controllerResolver = $this->getMock('Drupal\Core\Controller\ControllerResolverInterface'); $this->argumentsResolverFactory = $this->getMock('Drupal\Core\Access\AccessArgumentsResolverFactoryInterface'); $this->accessChecker = new CustomAccessCheck($this->controllerResolver, $this->argumentsResolverFactory); } /** * Test the access method. */ public function testAccess() { $route_match = $this->getMock('Drupal\Core\Routing\RouteMatchInterface'); $this->controllerResolver->expects($this->at(0)) ->method('getControllerFromDefinition') ->with('\Drupal\Tests\Core\Access\TestController::accessDeny') ->will($this->returnValue([new TestController(), 'accessDeny'])); $resolver0 = $this->getMock('Drupal\Component\Utility\ArgumentsResolverInterface'); $resolver0->expects($this->once()) ->method('getArguments') ->will($this->returnValue([])); $this->argumentsResolverFactory->expects($this->at(0)) ->method('getArgumentsResolver') ->will($this->returnValue($resolver0)); $this->controllerResolver->expects($this->at(1)) ->method('getControllerFromDefinition') ->with('\Drupal\Tests\Core\Access\TestController::accessAllow') ->will($this->returnValue([new TestController(), 'accessAllow'])); $resolver1 = $this->getMock('Drupal\Component\Utility\ArgumentsResolverInterface'); $resolver1->expects($this->once()) ->method('getArguments') ->will($this->returnValue([])); $this->argumentsResolverFactory->expects($this->at(1)) ->method('getArgumentsResolver') ->will($this->returnValue($resolver1)); $this->controllerResolver->expects($this->at(2)) ->method('getControllerFromDefinition') ->with('\Drupal\Tests\Core\Access\TestController::accessParameter') ->will($this->returnValue([new TestController(), 'accessParameter'])); $resolver2 = $this->getMock('Drupal\Component\Utility\ArgumentsResolverInterface'); $resolver2->expects($this->once()) ->method('getArguments') ->will($this->returnValue(['parameter' => 'TRUE'])); $this->argumentsResolverFactory->expects($this->at(2)) ->method('getArgumentsResolver') ->will($this->returnValue($resolver2)); $route = new Route('/test-route', [], ['_custom_access' => '\Drupal\Tests\Core\Access\TestController::accessDeny']); $account = $this->getMock('Drupal\Core\Session\AccountInterface'); $this->assertEquals(AccessResult::neutral(), $this->accessChecker->access($route, $route_match, $account)); $route = new Route('/test-route', [], ['_custom_access' => '\Drupal\Tests\Core\Access\TestController::accessAllow']); $this->assertEquals(AccessResult::allowed(), $this->accessChecker->access($route, $route_match, $account)); $route = new Route('/test-route', ['parameter' => 'TRUE'], ['_custom_access' => '\Drupal\Tests\Core\Access\TestController::accessParameter']); $this->assertEquals(AccessResult::allowed(), $this->accessChecker->access($route, $route_match, $account)); } } class TestController { public function accessAllow() { return AccessResult::allowed(); } public function accessDeny() { return AccessResult::neutral(); } public function accessParameter($parameter) { return AccessResult::allowedIf($parameter == 'TRUE'); } }