From 6e0f379cfd10b1f43b96aa9320d69a071937342e Mon Sep 17 00:00:00 2001 From: Anthonius Munthi Date: Mon, 19 Nov 2018 09:30:01 +0800 Subject: [PATCH] improved plugin using differrent interface for required file and dir lists ref yawik/standard#4 --- src/PermissionsFixer.php | 21 ++++++++------- src/RequireDirectoryPermissionInterface.php | 23 ++++++++++++++++ ...php => RequireFilePermissionInterface.php} | 12 ++------- test/PermissionsFixerTest.php | 27 ++++++++++++------- test/PluginTest.php | 4 +-- test/sandbox/src/Module.php | 9 ++++--- 6 files changed, 60 insertions(+), 36 deletions(-) create mode 100644 src/RequireDirectoryPermissionInterface.php rename src/{PermissionsFixerModuleInterface.php => RequireFilePermissionInterface.php} (64%) diff --git a/src/PermissionsFixer.php b/src/PermissionsFixer.php index 7781f1e..2a12db2 100644 --- a/src/PermissionsFixer.php +++ b/src/PermissionsFixer.php @@ -40,26 +40,27 @@ public function onConfigureEvent(ConfigureEvent $event) $directories = []; foreach ($modules as $module) { - if ($module instanceof PermissionsFixerModuleInterface) { - $modDirLists = $module->getDirectoryPermissionLists($options); - $modFileLists = $module->getFilePermissionLists($options); - - if (!is_null($modDirLists) && !is_array($modDirLists)) { + if ($module instanceof RequireFilePermissionInterface) { + $modFileLists = $module->getRequiredFileLists($options); + if (!is_null($modFileLists) && !is_array($modFileLists)) { $this->logError(sprintf( - '%s::getDirectoryPermissionList() should return an array.', + '%s::getRequiredFileList() should return an array.', get_class($module) )); } else { - $directories = array_merge($directories, $modDirLists); + $files = array_merge($files, $modFileLists); } + } - if (!is_null($modFileLists) && !is_array($modFileLists)) { + if ($module instanceof RequireDirectoryPermissionInterface) { + $modDirLists = $module->getRequiredDirectoryLists($options); + if (!is_null($modDirLists) && !is_array($modDirLists)) { $this->logError(sprintf( - '%s::getFilePermissionList() should return an array.', + '%s::getRequiredDirectoryList() should return an array.', get_class($module) )); } else { - $files = array_merge($files, $modFileLists); + $directories = array_merge($directories, $modDirLists); } } } diff --git a/src/RequireDirectoryPermissionInterface.php b/src/RequireDirectoryPermissionInterface.php new file mode 100644 index 0000000..be4f7bf --- /dev/null +++ b/src/RequireDirectoryPermissionInterface.php @@ -0,0 +1,23 @@ + * @since 0.32.0 */ -interface PermissionsFixerModuleInterface +interface RequireFilePermissionInterface { /** * Lists of files that permissions need to be fixed @@ -27,13 +27,5 @@ interface PermissionsFixerModuleInterface * @param CoreOptions $options A CoreOptions object to use * @return array A list of files */ - public function getFilePermissionLists(CoreOptions $options); - - /** - * Lists of directories that permissions need to be fixed - * - * @param CoreOptions $options A CoreOptions object to use - * @return array A list of files - */ - public function getDirectoryPermissionLists(CoreOptions $options); + public function getRequiredFileLists(CoreOptions $options); } diff --git a/test/PermissionsFixerTest.php b/test/PermissionsFixerTest.php index 8cebcb5..79464ea 100644 --- a/test/PermissionsFixerTest.php +++ b/test/PermissionsFixerTest.php @@ -15,7 +15,8 @@ use Yawik\Composer\Event\ConfigureEvent; use Yawik\Composer\PermissionsFixer; use PHPUnit\Framework\TestCase; -use Yawik\Composer\PermissionsFixerModuleInterface; +use Yawik\Composer\RequireDirectoryPermissionInterface; +use Yawik\Composer\RequireFilePermissionInterface; use Core\Options\ModuleOptions as CoreOptions; /** @@ -51,9 +52,9 @@ public function setUp() public function testOnConfigureEvent() { - $module1 = $this->createMock(PermissionsFixerModuleInterface::class); - $module2 = $this->createMock(PermissionsFixerModuleInterface::class); - $modError = $this->createMock(PermissionsFixerModuleInterface::class); + $module1 = $this->createMock(RequireFileAndDirPermissionModule::class); + $module2 = $this->createMock(RequireFileAndDirPermissionModule::class); + $modError = $this->createMock(RequireFileAndDirPermissionModule::class); $modules = [$module1,$module2]; $plugin = $this->getMockBuilder(PermissionsFixer::class) ->setMethods(['touch','chmod','mkdir','logError']) @@ -63,13 +64,13 @@ public function testOnConfigureEvent() foreach ($modules as $index => $module) { $index = $index+1; $module->expects($this->once()) - ->method('getDirectoryPermissionLists') + ->method('getRequiredDirectoryLists') ->willReturn([ 'public/static/module'.$index ]) ; $module->expects($this->once()) - ->method('getFilePermissionLists') + ->method('getRequiredFileLists') ->willReturn([ 'public/module'.$index.'.log' ]) @@ -77,11 +78,11 @@ public function testOnConfigureEvent() } $modError->expects($this->once()) - ->method('getDirectoryPermissionLists') + ->method('getRequiredDirectoryLists') ->willReturn('foo') ; $modError->expects($this->once()) - ->method('getFilePermissionLists') + ->method('getRequiredFileLists') ->willReturn('bar') ; $modules[] = $modError; @@ -122,8 +123,8 @@ public function testOnConfigureEvent() $plugin->expects($this->exactly(2)) ->method('logError') ->withConsecutive( - [$this->stringContains('getDirectoryPermissionList()')], - [$this->stringContains('getFilePermissionList()')] + [$this->stringContains('should return an array.')], + [$this->stringContains('should return an array.')] ) ; @@ -179,3 +180,9 @@ public function getTestFilesystemAction() ]; } } + +abstract class RequireFileAndDirPermissionModule implements + RequireDirectoryPermissionInterface, + RequireFilePermissionInterface +{ +} diff --git a/test/PluginTest.php b/test/PluginTest.php index a1cd54b..221599c 100644 --- a/test/PluginTest.php +++ b/test/PluginTest.php @@ -24,7 +24,7 @@ use Prophecy\Argument; use Yawik\Composer\Event\ActivateEvent; use Yawik\Composer\Event\ConfigureEvent; -use Yawik\Composer\PermissionsFixerModuleInterface; +use Yawik\Composer\RequireFilePermissionInterface; use Yawik\Composer\Plugin; use Zend\EventManager\EventManager; use Zend\ModuleManager\ModuleManager; @@ -276,7 +276,7 @@ public function testOnPostAutoloadDump() $app = $this->prophesize(Application::class); $manager = $this->prophesize(ModuleManager::class); $options = $this->prophesize(ModuleOptions::class); - $mod1 = $this->prophesize(PermissionsFixerModuleInterface::class)->reveal(); + $mod1 = $this->prophesize(RequireFilePermissionInterface::class)->reveal(); $modules = [$mod1]; $events = $this->createMock(EventManager::class); diff --git a/test/sandbox/src/Module.php b/test/sandbox/src/Module.php index 30db380..2b1e0f6 100644 --- a/test/sandbox/src/Module.php +++ b/test/sandbox/src/Module.php @@ -8,19 +8,20 @@ namespace Foo; -use Yawik\Composer\PermissionsFixerModuleInterface; +use Yawik\Composer\RequireDirectoryPermissionInterface; +use Yawik\Composer\RequireFilePermissionInterface; use Core\Options\ModuleOptions as CoreOptions; -class Module implements PermissionsFixerModuleInterface +class Module implements RequireFilePermissionInterface, RequireDirectoryPermissionInterface { - public function getDirectoryPermissionLists(CoreOptions $options) + public function getRequiredDirectoryLists(CoreOptions $options) { return [ 'public/static/Organizations/images' ]; } - public function getFilePermissionLists(CoreOptions $options) + public function getRequiredFileLists(CoreOptions $options) { return []; }