getMock('Rbac\Traversal\Strategy\TraversalStrategyInterface'); $rbac = new Rbac($customStrategy); $this->assertAttributeSame($customStrategy, 'traversalStrategy', $rbac); } /** * @covers Rbac\Rbac::isGranted */ public function testInjectSingleRoleToArray() { $role = new Role('Foo'); $traversalStrategy = $this->getMock('Rbac\Traversal\Strategy\TraversalStrategyInterface'); $traversalStrategy->expects($this->once()) ->method('getRolesIterator') ->with($this->equalTo([$role])) ->will($this->returnValue(new ArrayIterator([]))); $rbac = new Rbac($traversalStrategy); $rbac->isGranted($role, 'permission'); } /** * @covers Rbac\Rbac::isGranted */ public function testFetchIteratorFromTraversalStrategy() { $traversalStrategy = $this->getMock('Rbac\Traversal\Strategy\TraversalStrategyInterface'); $traversalStrategy->expects($this->once()) ->method('getRolesIterator') ->will($this->returnValue(new ArrayIterator([]))); $rbac = new Rbac($traversalStrategy); $rbac->isGranted([], 'permission'); } /** * @covers Rbac\Rbac::isGranted */ public function testTraverseRoles() { $role = $this->getMock('Rbac\Role\RoleInterface'); $role->expects($this->exactly(3)) ->method('hasPermission') ->with($this->equalTo('permission')) ->will($this->returnValue(false)); $roles = [$role, $role, $role]; $rbac = new Rbac(new RecursiveRoleIteratorStrategy()); $rbac->isGranted($roles, 'permission'); } /** * @covers Rbac\Rbac::isGranted */ public function testReturnTrueWhenRoleHasPermission() { $grantedRole = $this->getMock('Rbac\Role\RoleInterface'); $grantedRole->expects($this->once()) ->method('hasPermission') ->with('permission') ->will($this->returnValue(true)); $nextRole = $this->getMock('Rbac\Role\RoleInterface'); $nextRole->expects($this->never())->method('hasPermission'); $roles = [$grantedRole, $nextRole]; $rbac = new Rbac(new RecursiveRoleIteratorStrategy()); $this->assertTrue($rbac->isGranted($roles, 'permission')); } public function testReturnFalseIfNoRoleHasPermission() { $roles = [new Role('Foo'), new Role('Bar')]; $rbac = new Rbac(new RecursiveRoleIteratorStrategy()); $this->assertFalse($rbac->isGranted($roles, 'permission')); } public function testGetTraversalStrategy() { $customStrategy = $this->getMock('Rbac\Traversal\Strategy\TraversalStrategyInterface'); $rbac = new Rbac($customStrategy); $this->assertSame($customStrategy, $rbac->getTraversalStrategy()); } }