From 06112e1125319a91f87b1eb983fd2f0298892bd3 Mon Sep 17 00:00:00 2001 From: marcelmanzel Date: Wed, 14 Aug 2024 08:48:18 +0200 Subject: [PATCH] OXDEV-8489: Create new ModuleDeactivationBlockedException --- .../ModuleDeactivationBlockedException.php | 22 +++++++++++++ .../Exception/ModuleDeactivationException.php | 8 ++--- .../Service/ModuleActivationService.php | 5 ++- .../ModuleActivationServiceInterface.php | 2 ++ .../ModuleBlockListExceptionTest.php | 2 +- ...ModuleDeactivationBlockedExceptionTest.php | 31 +++++++++++++++++++ .../Service/ModuleActivationsServiceTest.php | 16 ++++++++++ 7 files changed, 76 insertions(+), 10 deletions(-) create mode 100644 src/Module/Exception/ModuleDeactivationBlockedException.php create mode 100644 tests/Unit/Module/Exception/ModuleDeactivationBlockedExceptionTest.php diff --git a/src/Module/Exception/ModuleDeactivationBlockedException.php b/src/Module/Exception/ModuleDeactivationBlockedException.php new file mode 100644 index 0000000..994758f --- /dev/null +++ b/src/Module/Exception/ModuleDeactivationBlockedException.php @@ -0,0 +1,22 @@ +moduleBlocklistService->isModuleBlocked($moduleId)) { - throw new ModuleDeactivationException( - sprintf(ModuleDeactivationException::BLOCKED_MODULE_MESSAGE, $moduleId) - ); + throw new ModuleDeactivationBlockedException($moduleId); } $shopId = $this->context->getCurrentShopId(); diff --git a/src/Module/Service/ModuleActivationServiceInterface.php b/src/Module/Service/ModuleActivationServiceInterface.php index 1181e9c..0ae22b9 100644 --- a/src/Module/Service/ModuleActivationServiceInterface.php +++ b/src/Module/Service/ModuleActivationServiceInterface.php @@ -9,6 +9,7 @@ use OxidEsales\GraphQL\ConfigurationAccess\Module\Exception\ModuleActivationException; use OxidEsales\GraphQL\ConfigurationAccess\Module\Exception\ModuleDeactivationException; +use OxidEsales\GraphQL\ConfigurationAccess\Module\Exception\ModuleDeactivationBlockedException; interface ModuleActivationServiceInterface { @@ -19,6 +20,7 @@ public function activateModule(string $moduleId): bool; /** * @throws ModuleDeactivationException + * @throws ModuleDeactivationBlockedException */ public function deactivateModule(string $moduleId): bool; } diff --git a/tests/Unit/Module/Exception/ModuleBlockListExceptionTest.php b/tests/Unit/Module/Exception/ModuleBlockListExceptionTest.php index a7177cf..5435824 100644 --- a/tests/Unit/Module/Exception/ModuleBlockListExceptionTest.php +++ b/tests/Unit/Module/Exception/ModuleBlockListExceptionTest.php @@ -22,6 +22,6 @@ public function testException(): void $exception = new ModuleBlockListException(); $this->assertInstanceOf(ModuleBlockListException::class, $exception); - $this->assertSame(ModuleBlockListException::EXCEPTION_MESSAGE, $exception->getMessage()); + $this->assertSame('Failed to load module blocklist from YAML file.', $exception->getMessage()); } } diff --git a/tests/Unit/Module/Exception/ModuleDeactivationBlockedExceptionTest.php b/tests/Unit/Module/Exception/ModuleDeactivationBlockedExceptionTest.php new file mode 100644 index 0000000..fc08ba7 --- /dev/null +++ b/tests/Unit/Module/Exception/ModuleDeactivationBlockedExceptionTest.php @@ -0,0 +1,31 @@ +assertInstanceOf(ModuleDeactivationBlockedException::class, $exception); + $this->assertSame( + sprintf('Module "%s" is in the blocklist and cannot be deactivated.', $moduleId), + $exception->getMessage() + ); + } +} diff --git a/tests/Unit/Module/Service/ModuleActivationsServiceTest.php b/tests/Unit/Module/Service/ModuleActivationsServiceTest.php index e4769ff..7626722 100644 --- a/tests/Unit/Module/Service/ModuleActivationsServiceTest.php +++ b/tests/Unit/Module/Service/ModuleActivationsServiceTest.php @@ -12,6 +12,7 @@ use OxidEsales\EshopCommunity\Internal\Transition\Utility\ContextInterface; use OxidEsales\EshopCommunity\Internal\Framework\Module\Setup\Bridge\ModuleActivationBridgeInterface; use OxidEsales\GraphQL\ConfigurationAccess\Module\Exception\ModuleActivationException; +use OxidEsales\GraphQL\ConfigurationAccess\Module\Exception\ModuleDeactivationBlockedException; use OxidEsales\GraphQL\ConfigurationAccess\Module\Exception\ModuleDeactivationException; use OxidEsales\GraphQL\ConfigurationAccess\Module\Service\ModuleActivationService; use OxidEsales\GraphQL\ConfigurationAccess\Module\Service\ModuleBlocklistServiceInterface; @@ -73,6 +74,21 @@ public function testModuleActivationAndDeactivationExceptions( ($method === 'activate') ? $sut->activateModule($moduleId) : $sut->deactivateModule($moduleId); } + public function testModuleDeactivationBlockedException() + { + $moduleBlockListServiceMock = $this->createMock(ModuleBlocklistServiceInterface::class); + $moduleBlockListServiceMock + ->method('isModuleBlocked') + ->willReturn(true); + + $sut = $this->getSut( + moduleBlocklistService: $moduleBlockListServiceMock + ); + + $this->expectException(ModuleDeactivationBlockedException::class); + $sut->deactivateModule(uniqid()); + } + public static function activationDataProvider(): \Generator { yield 'test activate module' => [