diff --git a/Permissions/PermissionManager.php b/Permissions/PermissionManager.php index 130e815..efbd952 100644 --- a/Permissions/PermissionManager.php +++ b/Permissions/PermissionManager.php @@ -63,6 +63,26 @@ protected function getState($checkedPermission) return false; } - return (bool) $checkedPermission; + return (bool)$checkedPermission; + } + + /** + * Are all of the permissions passed of false value? + * @param array $permissions Permissions array + * @return bool + */ + public function permissionsAreAllFalse(array $permissions) + { + $uniquePermissions = array_unique($permissions); + + if (count($uniquePermissions) > 1) { + return false; + } + + $uniquePermission = reset($uniquePermissions); + + $cleanedPermission = $this->getState($uniquePermission); + + return $cleanedPermission === false; } } diff --git a/Tests/Permissions/PermissionManagerTest.php b/Tests/Permissions/PermissionManagerTest.php new file mode 100644 index 0000000..91e2a0e --- /dev/null +++ b/Tests/Permissions/PermissionManagerTest.php @@ -0,0 +1,72 @@ +getModulesRepositoryMock(); + $this->app->instance('modules', $modules); + + $manager = new PermissionManager(); + + $allFalsePermissions = $manager->permissionsAreAllFalse([ + 'permission1' => 'false', + 'permission2' => 'false', + 'permission3' => 'false', + 'permission4' => 'false', + ]); + + $mixedPermissioms = $manager->permissionsAreAllFalse([ + 'permission1' => 'true', + 'permission2' => 'false', + 'permission3' => 'false', + 'permission4' => 'true', + ]); + + $this->assertSame(true, $allFalsePermissions); + $this->assertSame(false, $mixedPermissioms); + } + + /** + * @test + */ + public function it_should_clean_permissions() + { + $input = [ + 'permission1' => 'true', + 'permission2' => 'true', + 'permission3' => 'false', + 'permission4' => 'false', + 'permission5' => 'true' + ]; + + $expected = [ + 'permission1' => true, + 'permission2' => true, + 'permission3' => false, + 'permission4' => false, + 'permission5' => true + ]; + + $manager = new PermissionManager(); + + $actual = $manager->clean($input); + + $this->assertSame($expected, $actual, "The PermissionManager should clean the permissions and fix their states."); + } + + protected function getModulesRepositoryMock() + { + return Mockery::mock(Repository::class); + } +} diff --git a/composer.json b/composer.json index 108cf31..a53c8c3 100644 --- a/composer.json +++ b/composer.json @@ -30,7 +30,8 @@ "dimsav/laravel-translatable": "~5.0", "mcamara/laravel-localization": "~1.0", "floatingpoint/stylist": "~0.1", - "maatwebsite/laravel-sidebar": "~2.0" + "maatwebsite/laravel-sidebar": "~2.0", + "mockery/mockery": "^0.9.4" }, "require-dev": { "phpunit/phpunit": "~4.0",