テストが止まらないようにするための設定
例えば、テスト中の動作によって、セキュリティテストを実行中のユーザーが削除されてしまったり、ページのアクセス権が変更されてしまい、アクセスできなくなってしまう可能性があります。 これを防いで、安定してテストできるようにするため、EC-CUBE本体側に修正を入れます。
Note: これらの修正の他、各種削除機能のテストをする場合は、削除処理がロールバックされるように該当処理の EntityManager::flush()
をコメントアウトする必要があります。
管理画面
規格、規格分類の削除防止
diff --git a/src/Eccube/Repository/ClassCategoryRepository.php b/src/Eccube/Repository/ClassCategoryRepository.php
index 8f08c2b9b2..4b4d9abdec 100644
--- a/src/Eccube/Repository/ClassCategoryRepository.php
+++ b/src/Eccube/Repository/ClassCategoryRepository.php
@@ -103,7 +103,7 @@ class ClassCategoryRepository extends AbstractRepository
$em = $this->getEntityManager();
$em->remove($ClassCategory);
- $em->flush();
+ // $em->flush();
}
/**
diff --git a/src/Eccube/Repository/ClassNameRepository.php b/src/Eccube/Repository/ClassNameRepository.php
index 7e894b0585..4809d8262b 100644
--- a/src/Eccube/Repository/ClassNameRepository.php
+++ b/src/Eccube/Repository/ClassNameRepository.php
@@ -92,6 +92,6 @@ class ClassNameRepository extends AbstractRepository
$em = $this->getEntityManager();
$em->remove($ClassName);
- $em->flush();
+ // $em->flush();
}
}
ログアウト防止
ログアウトすると、セッションが切断され CSRF トークンが変更されてしまい、テストに失敗するため、ログアウトしないように設定する
diff --git a/app/config/eccube/packages/security.yaml b/app/config/eccube/packages/security.yaml
index 2ad4e1a608..8da71094d0 100644
--- a/app/config/eccube/packages/security.yaml
+++ b/app/config/eccube/packages/security.yaml
@@ -34,9 +34,9 @@ security:
use_forward: false
success_handler: eccube.security.success_handler
failure_handler: eccube.security.failure_handler
- logout:
- path: admin_logout
- target: admin_login
+ # logout:
+ # path: admin_logout
+ # target: admin_login
customer:
pattern: ^/
anonymous: true
権限管理の更新防止
権限機能の拒否URLに /
が登録されてしまい、管理画面にアクセスできなくなるのを防ぎます
diff --git a/src/Eccube/Controller/Admin/Setting/System/AuthorityController.php b/src/Eccube/Controller/Admin/Setting/System/AuthorityController.php
index 2f69bd5f62..4d2f4fdde1 100644
--- a/src/Eccube/Controller/Admin/Setting/System/AuthorityController.php
+++ b/src/Eccube/Controller/Admin/Setting/System/AuthorityController.php
@@ -103,7 +103,7 @@ class AuthorityController extends AbstractController
}
}
}
- $this->entityManager->flush();
+ // $this->entityManager->flush();
$event = new EventArgs(
[
マスタデータの更新防止
マスタデータが不用意に更新され、各種機能が動作しなくなるのを防ぎます。
diff --git a/src/Eccube/Controller/Admin/Setting/System/MasterdataController.php b/src/Eccube/Controller/Admin/Setting/System/MasterdataController.php
index 9b661031ab..a517b9a6ff 100644
--- a/src/Eccube/Controller/Admin/Setting/System/MasterdataController.php
+++ b/src/Eccube/Controller/Admin/Setting/System/MasterdataController.php
@@ -162,7 +162,7 @@ class MasterdataController extends AbstractController
}
try {
- $this->entityManager->flush();
+ // $this->entityManager->flush();
$event = new EventArgs(
[
管理画面ユーザーの更新防止
テストを実施中のユーザーのパスワードやユーザーIDの変更を防ぎます
diff --git a/src/Eccube/Controller/Admin/Setting/System/MemberController.php b/src/Eccube/Controller/Admin/Setting/System/MemberController.php
index d1f042f67a..0ce6235b77 100644
--- a/src/Eccube/Controller/Admin/Setting/System/MemberController.php
+++ b/src/Eccube/Controller/Admin/Setting/System/MemberController.php
@@ -188,7 +188,7 @@ class MemberController extends AbstractController
$Member->setPassword($encodedPassword);
}
- $this->memberRepository->save($Member);
+ // $this->memberRepository->save($Member);
$event = new EventArgs(
[
セキュリティ管理の更新防止
セキュリティ管理の内容が変更され、管理画面にアクセスできなくなるのを防ぎます
diff --git a/src/Eccube/Controller/Admin/Setting/System/SecurityController.php b/src/Eccube/Controller/Admin/Setting/System/SecurityController.php
index d48b4f36b2..a658bbd33b 100644
--- a/src/Eccube/Controller/Admin/Setting/System/SecurityController.php
+++ b/src/Eccube/Controller/Admin/Setting/System/SecurityController.php
@@ -71,28 +71,28 @@ class SecurityController extends AbstractController
'ECCUBE_FORCE_SSL' => $data['force_ssl'] ? 'true' : 'false',
]);
- file_put_contents($envFile, $env);
+ // file_put_contents($envFile, $env);
- // 管理画面URLの更新. 変更されている場合はログアウトし再ログインさ
せる.
- $adminRoute = $this->eccubeConfig['eccube_admin_route'];
- if ($adminRoute !== $data['admin_route_dir']) {
- $env = StringUtil::replaceOrAddEnv($env, [
- 'ECCUBE_ADMIN_ROUTE' => $data['admin_route_dir'],
- ]);
+ // // 管理画面URLの更新. 変更されている場合はログアウトし再ログインさせる.
+ // $adminRoute = $this->eccubeConfig['eccube_admin_route'];
+ // if ($adminRoute !== $data['admin_route_dir']) {
+ // $env = StringUtil::replaceOrAddEnv($env, [
+ // 'ECCUBE_ADMIN_ROUTE' => $data['admin_route_dir'],
+ // ]);
- file_put_contents($envFile, $env);
+ // file_put_contents($envFile, $env);
- $this->addSuccess('admin.setting.system.security.admin_url_changed', 'admin');
+ // $this->addSuccess('admin.setting.system.security.admin_url_changed', 'admin');
- // ログアウト
- $this->tokenStorage->setToken(null);
+ // // ログアウト
+ // $this->tokenStorage->setToken(null);
- // キャッシュの削除
- $cacheUtil->clearCache();
+ // // キャッシュの削除
+ // $cacheUtil->clearCache();
- // 管理者画面へ再ログイン
- return $this->redirect($request->getBaseUrl().'/'.$data['admin_route_dir']);
- }
+ // // 管理者画面へ再ログイン
+ // return $this->redirect($request->getBaseUrl().'/'.$data['admin_route_dir']);
+ // }
$this->addSuccess('admin.common.save_complete', 'admin');
フロント画面
会員情報変更防止
会員情報が変更され、再ログインできなくなるのを防止します
diff --git a/src/Eccube/Controller/Mypage/ChangeController.php b/src/Eccube/Controller/Mypage/ChangeController.php
index 70121e110c..1846b6fbe6 100644
--- a/src/Eccube/Controller/Mypage/ChangeController.php
+++ b/src/Eccube/Controller/Mypage/ChangeController.php
@@ -97,7 +97,7 @@ class ChangeController extends AbstractController
$encoder->encodePassword($Customer->getPassword(), $Customer->getSalt())
);
}
- $this->entityManager->flush();
+ // $this->entityManager->flush();
log_info('会員編集完了');
お届け先登録制限防止
お届け先上限数に抵触してテストが失敗するのを防止します
diff --git a/src/Eccube/Controller/Mypage/DeliveryController.php b/src/Eccube/Controller/Mypage/DeliveryController.php
index af8dd653a6..803f3123f2 100644
--- a/src/Eccube/Controller/Mypage/DeliveryController.php
+++ b/src/Eccube/Controller/Mypage/DeliveryController.php
@@ -77,7 +77,7 @@ class DeliveryController extends AbstractController
$addressCurrNum = count($Customer->getCustomerAddresses());
$addressMax = $this->eccubeConfig['eccube_deliv_addr_max'];
if ($addressCurrNum >= $addressMax) {
- throw new NotFoundHttpException();
+ // throw new NotFoundHttpException();
}
$CustomerAddress = new CustomerAddress();
$CustomerAddress->setCustomer($Customer);
お届け先情報削除防止
お届け先情報が削除され、商品購入が失敗しないようにします
diff --git a/src/Eccube/Controller/Mypage/DeliveryController.php b/src/Eccube/Controller/Mypage/DeliveryController.php
index f3ecbc1ed0..7bd7290c1a 100644
--- a/src/Eccube/Controller/Mypage/DeliveryController.php
+++ b/src/Eccube/Controller/Mypage/DeliveryController.php
@@ -170,7 +170,7 @@ class DeliveryController extends AbstractController
throw new BadRequestHttpException();
}
- $this->customerAddressRepository->delete($CustomerAddress);
+ // $this->customerAddressRepository->delete($CustomerAddress);
$event = new EventArgs(
[
お気に入り追加防止
お気に入り追加(/products/add_favorite/<id>
)のテストが失敗しないようにします
お気に入り削除防止のパッチと同時には使用できません
diff --git a/src/Eccube/Repository/CustomerFavoriteProductRepository.php b/src/Eccube/Repository/CustomerFavoriteProductRepository.php
index 24430036a4..cff5db5a64 100644
--- a/src/Eccube/Repository/CustomerFavoriteProductRepository.php
+++ b/src/Eccube/Repository/CustomerFavoriteProductRepository.php
@@ -45,7 +45,7 @@ class CustomerFavoriteProductRepository extends AbstractRepository
$em = $this->getEntityManager();
$em->persist($CustomerFavoriteProduct);
- $em->flush();
+ // $em->flush();
}
}
お気に入り削除防止
お気に入りが削除され、お気に入り関連のテストが失敗しないようにします お気に入り追加防止のパッチと同時には使用できません
diff --git a/src/Eccube/Controller/Mypage/MypageController.php b/src/Eccube/Controller/Mypage/MypageController.php
index d3abe49efd..b02a841954 100644
--- a/src/Eccube/Controller/Mypage/MypageController.php
+++ b/src/Eccube/Controller/Mypage/MypageController.php
@@ -362,7 +362,7 @@ class MypageController extends AbstractController
$CustomerFavoriteProduct = $this->customerFavoriteProductRepository->findOneBy(['Customer' => $Customer, 'Product' => $Product]);
if ($CustomerFavoriteProduct) {
- $this->customerFavoriteProductRepository->delete($CustomerFavoriteProduct);
+ // $this->customerFavoriteProductRepository->delete($CustomerFavoriteProduct);
} else {
throw new BadRequestHttpException();
}
Note: sequence アドオンを使用することで、登録→削除までの一連の流れをテストできる可能性
会員の退会防止
テスト中の会員が退会してしまい、テストが停止しないようにします
diff --git a/src/Eccube/Controller/Mypage/WithdrawController.php b/src/Eccube/Controller/Mypage/WithdrawController.php
index 796a0b943e..940709df9c 100644
--- a/src/Eccube/Controller/Mypage/WithdrawController.php
+++ b/src/Eccube/Controller/Mypage/WithdrawController.php
@@ -121,8 +121,8 @@ class WithdrawController extends AbstractController
// 退会ステータスに変更
$CustomerStatus = $this->customerStatusRepository->find(CustomerStatus::WITHDRAWING);
- $Customer->setStatus($CustomerStatus);
- $Customer->setEmail(StringUtil::random(60).'@dummy.dummy');
+ //$Customer->setStatus($CustomerStatus);
+ //$Customer->setEmail(StringUtil::random(60).'@dummy.dummy');
$this->entityManager->flush();
@@ -140,11 +140,11 @@ class WithdrawController extends AbstractController
$this->mailService->sendCustomerWithdrawMail($Customer, $email);
// カートと受注のセッションを削除
- $this->cartService->clear();
- $this->orderHelper->removeSession();
+ // $this->cartService->clear();
+ // $this->orderHelper->removeSession();
// ログアウト
- $this->tokenStorage->setToken(null);
+ // $this->tokenStorage->setToken(null);
log_info('ログアウト完了');
仮会員登録防止
diff --git a/src/Eccube/Controller/EntryController.php b/src/Eccube/Controller/EntryController.php
index 076ac0a991..30a089994a 100644
--- a/src/Eccube/Controller/EntryController.php
+++ b/src/Eccube/Controller/EntryController.php
@@ -180,7 +180,7 @@ class EntryController extends AbstractController
->setPoint(0);
$this->entityManager->persist($Customer);
- $this->entityManager->flush();
+ // $this->entityManager->flush();
log_info('会員登録完了');
本会員登録防止
@@ -293,7 +293,7 @@ class EntryController extends AbstractController
$CustomerStatus = $this->customerStatusRepository->find(CustomerStatus::REGULAR);
$Customer->setStatus($CustomerStatus);
$this->entityManager->persist($Customer);
- $this->entityManager->flush();
+ // $this->entityManager->flush();
log_info('本会員登録完了');
注文完了時のカート削除
注文完了時にカートが削除されないようにします。
注文確認画面から注文完了画面への遷移は /shopping/checkout
へ CSRF トークンを POST するのみですので、あまり有用ではないかもしれません。
diff --git a/src/Eccube/Controller/ShoppingController.php b/src/Eccube/Controller/ShoppingController.php
index 8e99094d73..e8e744f39a 100644
--- a/src/Eccube/Controller/ShoppingController.php
+++ b/src/Eccube/Controller/ShoppingController.php
@@ -386,7 +386,7 @@ class ShoppingController extends AbstractShoppingController
return $response;
}
- $this->entityManager->flush();
+ //$this->entityManager->flush();
log_info('[注文処理] 注文処理が完了しました.', [$Order->getId()]);
} catch (ShoppingException $e) {
@@ -409,7 +409,7 @@ class ShoppingController extends AbstractShoppingController
// カート削除
log_info('[注文処理] カートをクリアします.', [$Order->getId()]);
- $this->cartService->clear();
+ //$this->cartService->clear();
// 受注IDをセッションにセット
$this->session->set(OrderHelper::SESSION_ORDER_ID, $Order->getId());
@@ -417,7 +417,7 @@ class ShoppingController extends AbstractShoppingController
// メール送信
log_info('[注文処理] 注文メールの送信を行います.', [$Order->getId()]);
$this->mailService->sendOrderMail($Order);
- $this->entityManager->flush();
+ //$this->entityManager->flush();
log_info('[注文処理] 注文処理が完了しました. 購入完了画面へ遷移します.', [$Order->getId()]);
@@ -463,7 +463,7 @@ class ShoppingController extends AbstractShoppingController
}
log_info('[注文完了] 購入フローのセッションをクリアします. ');
- $this->orderHelper->removeSession();
+ //$this->orderHelper->removeSession();
$hasNextCart = !empty($this->cartService->getCarts());
クーポンプラグインの利用制限解除
何回でも繰り返しクーポンを利用できるようにします
diff --git a/Controller/CouponShoppingController.php b/Controller/CouponShoppingController.php
index 7551217..091bbd7 100644
--- a/Controller/CouponShoppingController.php
+++ b/Controller/CouponShoppingController.php
@@ -159,7 +159,7 @@ class CouponShoppingController extends AbstractController
$form->get('coupon_cd')->addError(new FormError(trans('plugin_coupon.front.shopping.sameuser')));
$error = true;
}
-
+ $error = false;
// ----------------------------------
// 値引き項目追加 / 合計金額上書き
// ----------------------------------