5 * Contains \Drupal\Tests\Core\Access\CustomAccessCheckTest.
8 namespace Drupal\Tests\Core\Access;
10 use Drupal\Core\Access\AccessResult;
11 use Drupal\Core\Access\CustomAccessCheck;
12 use Drupal\Tests\UnitTestCase;
13 use Symfony\Component\Routing\Route;
16 * @coversDefaultClass \Drupal\Core\Access\CustomAccessCheck
19 class CustomAccessCheckTest extends UnitTestCase {
22 * The access checker to test.
24 * @var \Drupal\Core\Access\CustomAccessCheck
26 protected $accessChecker;
29 * The mocked controller resolver.
31 * @var \Drupal\Core\Controller\ControllerResolverInterface|\PHPUnit_Framework_MockObject_MockObject
33 protected $controllerResolver;
36 * The mocked arguments resolver.
38 * @var \Drupal\Core\Access\AccessArgumentsResolverFactoryInterface|\PHPUnit_Framework_MockObject_MockObject
40 protected $argumentsResolverFactory;
45 protected function setUp() {
48 $this->controllerResolver = $this->getMock('Drupal\Core\Controller\ControllerResolverInterface');
49 $this->argumentsResolverFactory = $this->getMock('Drupal\Core\Access\AccessArgumentsResolverFactoryInterface');
50 $this->accessChecker = new CustomAccessCheck($this->controllerResolver, $this->argumentsResolverFactory);
54 * Test the access method.
56 public function testAccess() {
57 $route_match = $this->getMock('Drupal\Core\Routing\RouteMatchInterface');
59 $this->controllerResolver->expects($this->at(0))
60 ->method('getControllerFromDefinition')
61 ->with('\Drupal\Tests\Core\Access\TestController::accessDeny')
62 ->will($this->returnValue([new TestController(), 'accessDeny']));
64 $resolver0 = $this->getMock('Drupal\Component\Utility\ArgumentsResolverInterface');
65 $resolver0->expects($this->once())
66 ->method('getArguments')
67 ->will($this->returnValue([]));
68 $this->argumentsResolverFactory->expects($this->at(0))
69 ->method('getArgumentsResolver')
70 ->will($this->returnValue($resolver0));
72 $this->controllerResolver->expects($this->at(1))
73 ->method('getControllerFromDefinition')
74 ->with('\Drupal\Tests\Core\Access\TestController::accessAllow')
75 ->will($this->returnValue([new TestController(), 'accessAllow']));
77 $resolver1 = $this->getMock('Drupal\Component\Utility\ArgumentsResolverInterface');
78 $resolver1->expects($this->once())
79 ->method('getArguments')
80 ->will($this->returnValue([]));
81 $this->argumentsResolverFactory->expects($this->at(1))
82 ->method('getArgumentsResolver')
83 ->will($this->returnValue($resolver1));
85 $this->controllerResolver->expects($this->at(2))
86 ->method('getControllerFromDefinition')
87 ->with('\Drupal\Tests\Core\Access\TestController::accessParameter')
88 ->will($this->returnValue([new TestController(), 'accessParameter']));
90 $resolver2 = $this->getMock('Drupal\Component\Utility\ArgumentsResolverInterface');
91 $resolver2->expects($this->once())
92 ->method('getArguments')
93 ->will($this->returnValue(['parameter' => 'TRUE']));
94 $this->argumentsResolverFactory->expects($this->at(2))
95 ->method('getArgumentsResolver')
96 ->will($this->returnValue($resolver2));
98 $route = new Route('/test-route', [], ['_custom_access' => '\Drupal\Tests\Core\Access\TestController::accessDeny']);
99 $account = $this->getMock('Drupal\Core\Session\AccountInterface');
100 $this->assertEquals(AccessResult::neutral(), $this->accessChecker->access($route, $route_match, $account));
102 $route = new Route('/test-route', [], ['_custom_access' => '\Drupal\Tests\Core\Access\TestController::accessAllow']);
103 $this->assertEquals(AccessResult::allowed(), $this->accessChecker->access($route, $route_match, $account));
105 $route = new Route('/test-route', ['parameter' => 'TRUE'], ['_custom_access' => '\Drupal\Tests\Core\Access\TestController::accessParameter']);
106 $this->assertEquals(AccessResult::allowed(), $this->accessChecker->access($route, $route_match, $account));
111 class TestController {
113 public function accessAllow() {
114 return AccessResult::allowed();
117 public function accessDeny() {
118 return AccessResult::neutral();
121 public function accessParameter($parameter) {
122 return AccessResult::allowedIf($parameter == 'TRUE');