diff --git a/.github/workflows/e2e-test-throttling.yml b/.github/workflows/e2e-test-throttling.yml index 9f0577bba40..d5c1d0a6328 100644 --- a/.github/workflows/e2e-test-throttling.yml +++ b/.github/workflows/e2e-test-throttling.yml @@ -21,7 +21,7 @@ jobs: matrix: php: [ 8.1 ] db: [ pgsql ] - method: [ フロント画面ログイン_IP, フロント画面ログイン_会員, 管理画面ログイン_IP, 管理画面ログイン_会員, 会員登録, 問い合わせ, パスワード再発行, 注文確認_非会員購入, 注文確認_会員購入, 注文完了_非会員購入, 注文完了_会員購入 ] + method: [ フロント画面ログイン_IP, フロント画面ログイン_会員, 管理画面ログイン_IP, 管理画面ログイン_会員, 会員登録, 問い合わせ, パスワード再発行, 注文確認_非会員購入, 注文確認_会員購入, 注文完了_非会員購入, 注文完了_会員購入, 会員情報編集, 配送先情報_追加, 配送先情報_編集, 配送先情報_削除, order_お届け先追加, order_お届け先変更 ] include: - db: pgsql database_url: postgres://postgres:password@127.0.0.1:5432/eccube_db @@ -70,6 +70,25 @@ jobs: limit: 10 interval: '30 minutes'" > app/config/eccube/packages/prod/eccube_rate_limiter.yaml + # delivery deleteのテストするため、delivery addの上限値を変更する + - name: Fix limiter limi for delivery delete + if: startsWith(matrix.method, '配送先情報_削除') + run: | + echo "eccube: + rate_limiter: + mypage_delivery_new: + route: mypage_delivery_new + method: [ 'POST' ] + type: customer + limit: 1024 + interval: '30 minutes' + mypage_delivery_delete: + route: mypage_delivery_delete + method: [ 'DELETE' ] + type: customer + limit: 10 + interval: '30 minutes'" > app/config/eccube/packages/prod/eccube_rate_limiter.yaml + - name: Setup PHP uses: nanasess/setup-php@master with: diff --git a/app/config/eccube/packages/prod/eccube_rate_limiter.yaml b/app/config/eccube/packages/prod/eccube_rate_limiter.yaml index 19665d4fd37..a86553f75d5 100644 --- a/app/config/eccube/packages/prod/eccube_rate_limiter.yaml +++ b/app/config/eccube/packages/prod/eccube_rate_limiter.yaml @@ -14,6 +14,42 @@ eccube: type: ip limit: 5 interval: '30 minutes' + mypage_change: + route: mypage_change + method: [ 'POST' ] + type: customer + limit: 10 + interval: '30 minutes' + mypage_delivery_new: + route: mypage_delivery_new + method: [ 'POST' ] + type: customer + limit: 10 + interval: '30 minutes' + mypage_delivery_edit: + route: mypage_delivery_edit + method: [ 'POST' ] + type: customer + limit: 10 + interval: '30 minutes' + mypage_delivery_delete: + route: mypage_delivery_delete + method: [ 'DELETE' ] + type: customer + limit: 10 + interval: '30 minutes' + shopping_shipping_multiple_edit_customer: + route: shopping_shipping_multiple_edit + method: [ 'POST' ] + type: customer + limit: 10 + interval: '30 minutes' + shopping_shipping_edit_customer: + route: shopping_shipping_edit + method: [ 'POST' ] + type: customer + limit: 10 + interval: '30 minutes' contact: route: contact method: [ 'POST' ] diff --git a/codeception/_support/Page/Front/CustomerAddressChangePage.php b/codeception/_support/Page/Front/CustomerAddressChangePage.php new file mode 100644 index 00000000000..8295d43b700 --- /dev/null +++ b/codeception/_support/Page/Front/CustomerAddressChangePage.php @@ -0,0 +1,107 @@ +tester->see('お届け先の指定', 'div.ec-pageHeader h1'); + + return $page; + } + + public function go($I) + { + $page = new self($I); + $page->tester->click('#page_shopping_shipping > div.ec-layoutRole > div > main > div.ec-registerRole > div > div > div > div > a'); + + return $this; + } + + + public function 入力_姓($value) + { + $this->tester->fillField(['id' => 'shopping_shipping_name_name01'], $value); + + return $this; + } + + public function 入力_名($value) + { + $this->tester->fillField(['id' => 'shopping_shipping_name_name02'], $value); + + return $this; + } + + public function 入力_セイ($value) + { + $this->tester->fillField(['id' => 'shopping_shipping_kana_kana01'], $value); + + return $this; + } + + public function 入力_メイ($value) + { + $this->tester->fillField(['id' => 'shopping_shipping_kana_kana02'], $value); + + return $this; + } + + public function 入力_郵便番号($value) + { + $this->tester->fillField(['id' => 'shopping_shipping_postal_code'], $value); + + return $this; + } + + public function 入力_都道府県($value) + { + $this->tester->selectOption(['id' => 'shopping_shipping_address_pref'], $value); + + return $this; + } + + public function 入力_市区町村名($value) + { + $this->tester->fillField(['id' => 'shopping_shipping_address_addr01'], $value); + + return $this; + } + + public function 入力_番地_ビル名($value) + { + $this->tester->fillField(['id' => 'shopping_shipping_address_addr02'], $value); + + return $this; + } + + public function 入力_電話番号($value) + { + $this->tester->fillField(['id' => 'shopping_shipping_phone_number'], $value); + + return $this; + } + + public function 登録する() + { + $this->tester->click('div.ec-RegisterRole__actions button'); + } +} diff --git a/codeception/acceptance/EF09ThrottlingCest.php b/codeception/acceptance/EF09ThrottlingCest.php index ab15b9dd4ce..bc35905899e 100644 --- a/codeception/acceptance/EF09ThrottlingCest.php +++ b/codeception/acceptance/EF09ThrottlingCest.php @@ -13,6 +13,12 @@ use Codeception\Util\Fixtures; use Page\Front\CartPage; +use Page\Front\CustomerAddressAddPage; +use Page\Front\CustomerAddressEditPage; +use Page\Front\CustomerAddressListPage; +use Page\Front\CustomerAddressChangePage; +use Page\Front\MultipleShippingPage; +use Page\Front\MyPage; use Page\Front\ProductDetailPage; use Page\Front\ShoppingConfirmPage; use Page\Front\ShoppingLoginPage; @@ -379,4 +385,367 @@ public function 注文完了_会員購入(AcceptanceTester $I) ShoppingConfirmPage::at($I)->注文する(); $I->see('購入処理で予期しないエラーが発生しました。恐れ入りますがお問い合わせページよりご連絡ください。', 'div.ec-cartRole__error'); } + + /** + * @param AcceptanceTester $I + * @return void + */ + public function 会員情報編集(AcceptanceTester $I) + { + $I->wantTo('EF0901-UC01-T12_会員情報編集'); + $createCustomer = Fixtures::get('createCustomer'); + $customer = $createCustomer(); + $I->loginAsMember($customer->getEmail(), 'password'); + $form = []; + + for ($i = 0; $i < 10; $i++) { + $I->expect('会員情報を編集します。:'.$i); + MyPage::go($I)->会員情報編集(); + // 会員情報・編集画面にて、登録ボタンをクリック + $I->submitForm('div.ec-editRole form', $form); + + // 会員情報編集(完了)画面が表示される + $I->see('会員情報編集(完了)', 'div.ec-pageHeader h1'); + } + + $I->expect('試行回数上限を超過します'); + + MyPage::go($I)->会員情報編集(); + + // 会員情報・編集画面にて、登録ボタンをクリック + $I->submitForm('div.ec-editRole form', $form); + + // 会員情報・編集画面にて、登録ボタンをクリック + $I->see('試行回数の上限を超過しました。しばらくお待ちいただき、再度お試しください。', 'p.ec-reportDescription'); + } + + /** + * @param AcceptanceTester $I + * @return void + */ + public function 配送先情報_追加(AcceptanceTester $I) + { + $I->wantTo('EF0901-UC01-T13_配送先情報_追加'); + $createCustomer = Fixtures::get('createCustomer'); + $customer = $createCustomer(); + $I->loginAsMember($customer->getEmail(), 'password'); + + for ($i = 0; $i < 10; $i++) { + $I->expect('お届け先を追加します。:'.$i); + $I->wait(10); + // お届先作成 + // TOPページ>マイページ>お届け先編集 + MyPage::go($I) + ->お届け先編集() + ->追加(); + + // 入力 & submit + CustomerAddressEditPage::at($I) + ->入力_姓('姓05') + ->入力_名('名05') + ->入力_セイ('セイ') + ->入力_メイ('メイ') + ->入力_郵便番号('530-0001') + ->入力_都道府県(['value' => '27']) + ->入力_市区町村名('大阪市北区') + ->入力_番地_ビル名('梅田2-4-9 ブリーゼタワー13F') + ->入力_電話番号('111-111-111') + ->登録する(); + } + + $I->expect('試行回数上限を超過します'); + $I->wait(10); + + MyPage::go($I) + ->お届け先編集() + ->追加(); + + // 入力 & submit + CustomerAddressEditPage::at($I) + ->入力_姓('姓05') + ->入力_名('名05') + ->入力_セイ('セイ') + ->入力_メイ('メイ') + ->入力_郵便番号('530-0001') + ->入力_都道府県(['value' => '27']) + ->入力_市区町村名('大阪市北区') + ->入力_番地_ビル名('梅田2-4-9 ブリーゼタワー13F') + ->入力_電話番号('111-111-111') + ->登録する(); + + // 会員情報・編集画面にて、登録ボタンをクリック + $I->see('試行回数の上限を超過しました。しばらくお待ちいただき、再度お試しください。', 'p.ec-reportDescription'); + } + + /** + * @param AcceptanceTester $I + * @return void + */ + public function 配送先情報_編集(AcceptanceTester $I) + { + $I->wantTo('EF0901-UC01-T13_配送先情報_追加'); + $createCustomer = Fixtures::get('createCustomer'); + $customer = $createCustomer(); + $I->loginAsMember($customer->getEmail(), 'password'); + + MyPage::go($I) + ->お届け先編集() + ->追加(); + + // 入力 & submit + CustomerAddressEditPage::at($I) + ->入力_姓('姓05') + ->入力_名('名05') + ->入力_セイ('セイ') + ->入力_メイ('メイ') + ->入力_郵便番号('530-0001') + ->入力_都道府県(['value' => '27']) + ->入力_市区町村名('大阪市北区') + ->入力_番地_ビル名('梅田2-4-9 ブリーゼタワー13F') + ->入力_電話番号('111-111-111') + ->登録する(); + + for ($i = 0; $i < 10; $i++) { + $I->expect('お届け先を編集します。:'.$i); + $I->wait(10); + + // お届先編集 + // TOPページ>マイページ>お届け先編集 + MyPage::go($I) + ->お届け先編集() + ->変更(1); + + CustomerAddressEditPage::at($I) + ->入力_姓('姓05') + ->入力_名('名05') + ->入力_セイ('セイ') + ->入力_メイ('メイ') + ->入力_郵便番号('530-0001') + ->入力_都道府県(['value' => '27']) + ->入力_市区町村名('大阪市南区') + ->入力_番地_ビル名('梅田2-4-9 ブリーゼタワー13F') + ->入力_電話番号('111-111-111') + ->登録する(); + } + + $I->expect('試行回数上限を超過します'); + $I->wait(10); + + // お届先編集 + // TOPページ>マイページ>お届け先編集 + MyPage::go($I) + ->お届け先編集() + ->変更(1); + + CustomerAddressEditPage::at($I) + ->入力_姓('姓05') + ->入力_名('名05') + ->入力_セイ('セイ') + ->入力_メイ('メイ') + ->入力_郵便番号('530-0001') + ->入力_都道府県(['value' => '27']) + ->入力_市区町村名('大阪市南区') + ->入力_番地_ビル名('梅田2-4-9 ブリーゼタワー13F') + ->入力_電話番号('111-111-111') + ->登録する(); + + // 会員情報・編集画面にて、登録ボタンをクリック + $I->see('試行回数の上限を超過しました。しばらくお待ちいただき、再度お試しください。', 'p.ec-reportDescription'); + } + + /** + * customer_delivery_deleteでのスロットリングのテスト + * customer_delivery_newでの制限に引っかかるため、customer_delivery_newのlimiter上限値を変更してから実施してください。 + * + * @param AcceptanceTester $I + * @return void + */ + public function 配送先情報_削除(AcceptanceTester $I) + { + $I->wantTo('EF0901-UC01-T14_配送先情報_削除'); + $createCustomer = Fixtures::get('createCustomer'); + $customer = $createCustomer(); + $I->loginAsMember($customer->getEmail(), 'password'); + + for ($i = 0; $i < 10; $i++) { + $I->expect('お届け先を追加します。:'.$i); + $I->wait(10); + + // TOPページ>マイページ>お届け先編集 + MyPage::go($I)->お届け先編集()->追加(); + + CustomerAddressEditPage::at($I) + ->入力_姓('姓0501') + ->入力_名('名0501') + ->入力_セイ('セイ') + ->入力_メイ('メイ') + ->入力_郵便番号('530-0001') + ->入力_都道府県(['value' => '27']) + ->入力_市区町村名('大阪市西区') + ->入力_番地_ビル名('梅田2-4-9 ブリーゼタワー13F') + ->入力_電話番号('111-111-111') + ->登録する(); + } + + for ($i = 0; $i < 10; $i++) { + $I->expect('お届け先を削除します。:'.$i); + CustomerAddressListPage::at($I) + ->削除(1); + } + + $I->expect('試行回数上限を超過します'); + $I->wait(10); + + // TOPページ>マイページ>お届け先編集 + MyPage::go($I)->お届け先編集()->追加(); + + CustomerAddressEditPage::at($I) + ->入力_姓('姓0501') + ->入力_名('名0501') + ->入力_セイ('セイ') + ->入力_メイ('メイ') + ->入力_郵便番号('530-0001') + ->入力_都道府県(['value' => '27']) + ->入力_市区町村名('大阪市西区') + ->入力_番地_ビル名('梅田2-4-9 ブリーゼタワー13F') + ->入力_電話番号('111-111-111') + ->登録する(); + + $I->wait(1); + + $I->expect('お届け先を削除します。'); + CustomerAddressListPage::at($I) + ->削除(1); + + $I->see('試行回数の上限を超過しました。しばらくお待ちいただき、再度お試しください。', 'p.ec-reportDescription'); + } + + /** + * @param AcceptanceTester $I + * @return void + */ + public function order_お届け先追加(AcceptanceTester $I) + { + $I->wantTo('EF0901-UC01-T15_order_お届け先追加'); + $I->logoutAsMember(); + $createCustomer = Fixtures::get('createCustomer'); + $customer = $createCustomer(); + + $nameSei = 'あいおい0302'; + $nameMei = '名0302'; + + // 商品詳細パーコレータ カートへ + ProductDetailPage::go($I, 2) + ->カートに入れる(1) + ->カートへ進む(); + + CartPage::go($I) + ->レジに進む(); + + // ログイン + ShoppingLoginPage::at($I)->ログイン($customer->getEmail()); + ShoppingPage::at($I)->お届け先追加(); + + for ($i = 0; $i < 10; $i++) { + $I->expect('お届け先を追加します。:'.$i); + // 新規お届け先追加 + MultipleShippingPage::at($I)->新規お届け先を追加する(); + + CustomerAddressAddPage::at($I) + ->入力_姓($nameSei) + ->入力_名($nameMei) + ->入力_セイ('セイ') + ->入力_メイ('メイ') + ->入力_郵便番号('530-0001') + ->入力_都道府県(['value' => '27']) + ->入力_市区町村名('大阪市北区2') + ->入力_番地_ビル名('梅田2-4-9 ブリーゼタワー13F2') + ->入力_電話番号('222-222-222') + ->登録する(); + + $I->wait(1); + } + + // 新規お届け先追加 + MultipleShippingPage::at($I)->新規お届け先を追加する(); + + CustomerAddressAddPage::at($I) + ->入力_姓($nameSei) + ->入力_名($nameMei) + ->入力_セイ('セイ') + ->入力_メイ('メイ') + ->入力_郵便番号('530-0001') + ->入力_都道府県(['value' => '27']) + ->入力_市区町村名('大阪市北区2') + ->入力_番地_ビル名('梅田2-4-9 ブリーゼタワー13F2') + ->入力_電話番号('222-222-222') + ->登録する(); + + $I->wait(1); + $I->see('試行回数の上限を超過しました。しばらくお待ちいただき、再度お試しください。', 'p.ec-reportDescription'); + } + + /** + * @param AcceptanceTester $I + * @return void + */ + public function order_お届け先変更(AcceptanceTester $I) + { + $I->wantTo('EF0901-UC01-T15_order_お届け先追加'); + $I->logoutAsMember(); + $createCustomer = Fixtures::get('createCustomer'); + $customer = $createCustomer(); + + $nameSei = 'あいおい0302'; + $nameMei = '名0302'; + + // 商品詳細パーコレータ カートへ + ProductDetailPage::go($I, 2) + ->カートに入れる(1) + ->カートへ進む(); + + CartPage::go($I) + ->レジに進む(); + + // ログイン + ShoppingLoginPage::at($I)->ログイン($customer->getEmail()); + + for ($i = 0; $i < 10; $i++) { + $I->expect('お届け先を変更します。:'.$i); + // 新規お届け先追加 + ShoppingPage::at($I)->お届け先変更(); + + CustomerAddressChangePage::at($I)->go($I) + ->入力_姓($nameSei) + ->入力_名($nameMei) + ->入力_セイ('セイ') + ->入力_メイ('メイ') + ->入力_郵便番号('530-0001') + ->入力_都道府県(['value' => '27']) + ->入力_市区町村名('大阪市北区2') + ->入力_番地_ビル名('梅田2-4-9 ブリーゼタワー13F2') + ->入力_電話番号('222-222-222') + ->登録する(); + + $I->wait(1); + } + + // 新規お届け先追加 + ShoppingPage::at($I)->お届け先変更(); + + CustomerAddressChangePage::at($I)->go($I) + ->入力_姓($nameSei) + ->入力_名($nameMei) + ->入力_セイ('セイ') + ->入力_メイ('メイ') + ->入力_郵便番号('530-0001') + ->入力_都道府県(['value' => '27']) + ->入力_市区町村名('大阪市北区2') + ->入力_番地_ビル名('梅田2-4-9 ブリーゼタワー13F2') + ->入力_電話番号('222-222-222') + ->登録する(); + + $I->wait(1); + $I->see('試行回数の上限を超過しました。しばらくお待ちいただき、再度お試しください。', 'p.ec-reportDescription'); + } }