More updates to stop using dev or alpha or beta versions.
[yaffs-website] / web / core / tests / Drupal / Tests / Core / Access / CustomAccessCheckTest.php
1 <?php
2
3 /**
4  * @file
5  * Contains \Drupal\Tests\Core\Access\CustomAccessCheckTest.
6  */
7
8 namespace Drupal\Tests\Core\Access;
9
10 use Drupal\Core\Access\AccessResult;
11 use Drupal\Core\Access\CustomAccessCheck;
12 use Drupal\Tests\UnitTestCase;
13 use Symfony\Component\Routing\Route;
14
15 /**
16  * @coversDefaultClass \Drupal\Core\Access\CustomAccessCheck
17  * @group Access
18  */
19 class CustomAccessCheckTest extends UnitTestCase {
20
21   /**
22    * The access checker to test.
23    *
24    * @var \Drupal\Core\Access\CustomAccessCheck
25    */
26   protected $accessChecker;
27
28   /**
29    * The mocked controller resolver.
30    *
31    * @var \Drupal\Core\Controller\ControllerResolverInterface|\PHPUnit_Framework_MockObject_MockObject
32    */
33   protected $controllerResolver;
34
35   /**
36    * The mocked arguments resolver.
37    *
38    * @var \Drupal\Core\Access\AccessArgumentsResolverFactoryInterface|\PHPUnit_Framework_MockObject_MockObject
39    */
40   protected $argumentsResolverFactory;
41
42   /**
43    * {@inheritdoc}
44    */
45   protected function setUp() {
46     parent::setUp();
47
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);
51   }
52
53   /**
54    * Test the access method.
55    */
56   public function testAccess() {
57     $route_match = $this->getMock('Drupal\Core\Routing\RouteMatchInterface');
58
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']));
63
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));
71
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']));
76
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));
84
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']));
89
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));
97
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));
101
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));
104
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));
107   }
108
109 }
110
111 class TestController {
112
113   public function accessAllow() {
114     return AccessResult::allowed();
115   }
116
117   public function accessDeny() {
118     return AccessResult::neutral();
119   }
120
121   public function accessParameter($parameter) {
122     return AccessResult::allowedIf($parameter == 'TRUE');
123   }
124
125 }