service = self::$container->get(PermissionResolver::class); //Set up a mocked user $user_embed = new PermissionsEmbed(); $user_embed->setPermissionValue('parts', 0, true) //read ->setPermissionValue('parts', 2, false) //edit ->setPermissionValue('parts', 4, null) //create ->setPermissionValue('parts', 6, null) //move ->setPermissionValue('parts', 8, null); //delete $this->user = $this->createMock(User::class); $this->user->method('getPermissions')->willReturn($user_embed); //Set up a faked group $group1_embed = new PermissionsEmbed(); $group1_embed->setPermissionValue('parts', 6, true) ->setPermissionValue('parts', 8, false) ->setPermissionValue('parts', 10, null) ->setPermissionValue('parts', 0, false) ->setPermissionValue('parts', 2, true); $this->group = $this->createMock(Group::class); $this->group->method('getPermissions')->willReturn($group1_embed); //Set this group for the user $this->user->method('getGroup')->willReturn($this->group); //parent group $parent_group_embed = new PermissionsEmbed(); $parent_group_embed->setPermissionValue('parts', 12, true) ->setPermissionValue('parts', 14, false) ->setPermissionValue('parts', 16, null); $parent_group = $this->createMock(Group::class); $parent_group->method('getPermissions')->willReturn($parent_group_embed); $this->group->method('getParent')->willReturn($parent_group); } public function getPermissionNames() { //List all possible operation names. return [ [PermissionsEmbed::PARTS], [PermissionsEmbed::USERS], [PermissionsEmbed::PARTS_ORDERDETAILS], [PermissionsEmbed::PARTS_NAME], [PermissionsEmbed::PARTS_ORDER], [PermissionsEmbed::PARTS_MININSTOCK], [PermissionsEmbed::PARTS_MANUFACTURER], [PermissionsEmbed::PARTS_INSTOCK], [PermissionsEmbed::DEVICES], [PermissionsEmbed::PARTS_FOOTPRINT], [PermissionsEmbed::PARTS_DESCRIPTION], [PermissionsEmbed::PARTS_COMMENT], [PermissionsEmbed::PARTS_ATTACHMENTS], [PermissionsEmbed::MANUFACTURERS], [PermissionsEmbed::LABELS], [PermissionsEmbed::DATABASE], [PermissionsEmbed::GROUPS], [PermissionsEmbed::FOOTRPINTS], [PermissionsEmbed::DEVICE_PARTS], [PermissionsEmbed::CATEGORIES], [PermissionsEmbed::PARTS_PRICES], [PermissionsEmbed::ATTACHMENT_TYPES], [PermissionsEmbed::CONFIG] ]; } /** * @dataProvider getPermissionNames */ public function testListOperationsForPermission($perm_name) { $arr = $this->service->listOperationsForPermission($perm_name); //Every entry should not be empty. $this->assertNotEmpty($arr); } public function testInvalidListOperationsForPermission() { $this->expectException(\InvalidArgumentException::class); //Must throw an exception $this->service->listOperationsForPermission('invalid'); } public function testisValidPermission() { $this->assertTrue($this->service->isValidPermission('parts')); $this->assertFalse($this->service->isValidPermission('invalid')); } public function testIsValidOperation() { $this->assertTrue($this->service->isValidOperation('parts', 'read')); //Must return false if either the permission or the operation is not existing $this->assertFalse($this->service->isValidOperation('parts', 'invalid')); $this->assertFalse($this->service->isValidOperation('invalid', 'read')); $this->assertFalse($this->service->isValidOperation('invalid', 'invalid')); } public function testDontInherit() { //Check with faked object $this->assertTrue($this->service->dontInherit($this->user, 'parts', 'read')); $this->assertFalse($this->service->dontInherit($this->user, 'parts', 'edit')); $this->assertNull($this->service->dontInherit($this->user, 'parts', 'create')); $this->assertNull($this->service->dontInherit($this->user, 'parts', 'move')); $this->assertNull($this->service->dontInherit($this->user, 'parts', 'delete')); } public function testInherit() { //Not inherited values should be same as dont inherit: $this->assertTrue($this->service->Inherit($this->user, 'parts', 'read')); $this->assertFalse($this->service->Inherit($this->user, 'parts', 'edit')); //When thing can not be resolved null should be returned $this->assertNull($this->service->Inherit($this->user, 'parts', 'create')); //Check for inherit from group $this->assertTrue($this->service->inherit($this->user, 'parts', 'move')); $this->assertFalse($this->service->inherit($this->user, 'parts', 'delete')); $this->assertNull($this->service->inherit($this->user, 'parts', 'search')); //Check for inherit from group and parent group $this->assertTrue($this->service->inherit($this->user, 'parts', 'all_parts')); $this->assertFalse($this->service->inherit($this->user, 'parts', 'no_price_parts')); $this->assertNull($this->service->inherit($this->user, 'parts', 'obsolete_parts')); } }