Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\Tests\views\Unit;
|
Chris@0
|
4
|
Chris@0
|
5 use Drupal\Core\Entity\EntityTypeManagerInterface;
|
Chris@0
|
6 use Drupal\Tests\UnitTestCase;
|
Chris@0
|
7 use Drupal\views\Views;
|
Chris@0
|
8 use Drupal\views\Entity\View;
|
Chris@0
|
9 use Drupal\views\ViewExecutableFactory;
|
Chris@0
|
10 use Drupal\Core\DependencyInjection\ContainerBuilder;
|
Chris@0
|
11 use Symfony\Component\HttpFoundation\Request;
|
Chris@0
|
12 use Symfony\Component\HttpFoundation\RequestStack;
|
Chris@0
|
13
|
Chris@0
|
14 /**
|
Chris@0
|
15 * @coversDefaultClass \Drupal\views\Views
|
Chris@0
|
16 * @group views
|
Chris@0
|
17 */
|
Chris@0
|
18 class ViewsTest extends UnitTestCase {
|
Chris@0
|
19
|
Chris@0
|
20 /**
|
Chris@0
|
21 * The test container.
|
Chris@0
|
22 *
|
Chris@0
|
23 * @var \Drupal\Core\DependencyInjection\ContainerBuilder
|
Chris@0
|
24 */
|
Chris@0
|
25 protected $container;
|
Chris@0
|
26
|
Chris@0
|
27 /**
|
Chris@0
|
28 * {@inheritdoc}
|
Chris@0
|
29 */
|
Chris@0
|
30 protected function setUp() {
|
Chris@0
|
31 parent::setUp();
|
Chris@0
|
32
|
Chris@0
|
33 $this->container = new ContainerBuilder();
|
Chris@0
|
34 $user = $this->getMock('Drupal\Core\Session\AccountInterface');
|
Chris@0
|
35 $request_stack = new RequestStack();
|
Chris@0
|
36 $request_stack->push(new Request());
|
Chris@0
|
37 $views_data = $this->getMockBuilder('Drupal\views\ViewsData')
|
Chris@0
|
38 ->disableOriginalConstructor()
|
Chris@0
|
39 ->getMock();
|
Chris@0
|
40 $route_provider = $this->getMock('Drupal\Core\Routing\RouteProviderInterface');
|
Chris@0
|
41 $this->container->set('views.executable', new ViewExecutableFactory($user, $request_stack, $views_data, $route_provider));
|
Chris@0
|
42
|
Chris@0
|
43 \Drupal::setContainer($this->container);
|
Chris@0
|
44 }
|
Chris@0
|
45
|
Chris@0
|
46 /**
|
Chris@0
|
47 * Tests the getView() method.
|
Chris@0
|
48 *
|
Chris@0
|
49 * @covers ::getView
|
Chris@0
|
50 */
|
Chris@0
|
51 public function testGetView() {
|
Chris@0
|
52 $view = new View(['id' => 'test_view'], 'view');
|
Chris@0
|
53
|
Chris@0
|
54 $view_storage = $this->getMockBuilder('Drupal\Core\Config\Entity\ConfigEntityStorage')
|
Chris@0
|
55 ->disableOriginalConstructor()
|
Chris@0
|
56 ->getMock();
|
Chris@0
|
57 $view_storage->expects($this->once())
|
Chris@0
|
58 ->method('load')
|
Chris@0
|
59 ->with('test_view')
|
Chris@0
|
60 ->will($this->returnValue($view));
|
Chris@0
|
61
|
Chris@0
|
62 $entity_manager = $this->getMock('Drupal\Core\Entity\EntityManagerInterface');
|
Chris@0
|
63 $entity_manager->expects($this->once())
|
Chris@0
|
64 ->method('getStorage')
|
Chris@0
|
65 ->with('view')
|
Chris@0
|
66 ->will($this->returnValue($view_storage));
|
Chris@0
|
67 $this->container->set('entity.manager', $entity_manager);
|
Chris@0
|
68
|
Chris@0
|
69 $executable = Views::getView('test_view');
|
Chris@0
|
70 $this->assertInstanceOf('Drupal\views\ViewExecutable', $executable);
|
Chris@0
|
71 $this->assertEquals($view->id(), $executable->storage->id());
|
Chris@0
|
72 $this->assertEquals(spl_object_hash($view), spl_object_hash($executable->storage));
|
Chris@0
|
73 }
|
Chris@0
|
74
|
Chris@0
|
75 /**
|
Chris@0
|
76 * @covers ::getApplicableViews
|
Chris@0
|
77 *
|
Chris@0
|
78 * @dataProvider providerTestGetApplicableViews
|
Chris@0
|
79 */
|
Chris@0
|
80 public function testGetApplicableViews($applicable_type, $expected) {
|
Chris@0
|
81 $view_1 = new View([
|
Chris@0
|
82 'id' => 'test_view_1',
|
Chris@0
|
83 'display' => [
|
Chris@0
|
84 'default' => [
|
Chris@0
|
85 'display_plugin' => 'default',
|
Chris@0
|
86 'display_options' => [],
|
Chris@0
|
87 ],
|
Chris@0
|
88 'type_a' => [
|
Chris@0
|
89 'display_plugin' => 'type_a',
|
Chris@0
|
90 'display_options' => [],
|
Chris@0
|
91 ],
|
Chris@0
|
92 ],
|
Chris@0
|
93 ], 'view');
|
Chris@0
|
94 $view_2 = new View([
|
Chris@0
|
95 'id' => 'test_view_2',
|
Chris@0
|
96 'display' => [
|
Chris@0
|
97 'default' => [
|
Chris@0
|
98 'display_plugin' => 'default',
|
Chris@0
|
99 'display_options' => [],
|
Chris@0
|
100 ],
|
Chris@0
|
101 'type_b' => [
|
Chris@0
|
102 'display_plugin' => 'type_b',
|
Chris@0
|
103 'display_options' => [
|
Chris@0
|
104 'enabled' => TRUE,
|
Chris@0
|
105 ],
|
Chris@0
|
106 ],
|
Chris@0
|
107 'type_b_2' => [
|
Chris@0
|
108 'display_plugin' => 'type_b',
|
Chris@0
|
109 'display_options' => [
|
Chris@0
|
110 'enabled' => FALSE,
|
Chris@0
|
111 ],
|
Chris@0
|
112 ],
|
Chris@0
|
113 ],
|
Chris@0
|
114 ], 'view');
|
Chris@0
|
115 $view_3 = new View([
|
Chris@0
|
116 'id' => 'test_view_3',
|
Chris@0
|
117 'display' => [
|
Chris@0
|
118 'default' => [
|
Chris@0
|
119 'display_plugin' => 'default',
|
Chris@0
|
120 'display_options' => [],
|
Chris@0
|
121 ],
|
Chris@0
|
122 // Test with Type A but a disabled display.
|
Chris@0
|
123 'type_a' => [
|
Chris@0
|
124 'display_plugin' => 'type_a',
|
Chris@0
|
125 'display_options' => [
|
Chris@17
|
126 'enabled' => FALSE,
|
Chris@0
|
127 ],
|
Chris@0
|
128 ],
|
Chris@0
|
129 // Type D intentionally doesn't exist.
|
Chris@0
|
130 'type_d' => [
|
Chris@0
|
131 'display_plugin' => 'type_d',
|
Chris@0
|
132 'display_options' => [],
|
Chris@0
|
133 ],
|
Chris@0
|
134 ],
|
Chris@0
|
135 ], 'view');
|
Chris@0
|
136
|
Chris@0
|
137 $query = $this->getMock('Drupal\Core\Entity\Query\QueryInterface');
|
Chris@0
|
138 $query->expects($this->exactly(2))
|
Chris@0
|
139 ->method('condition')
|
Chris@0
|
140 ->willReturnSelf();
|
Chris@0
|
141 $query->expects($this->once())
|
Chris@0
|
142 ->method('execute')
|
Chris@0
|
143 ->willReturn(['test_view_1', 'test_view_2', 'test_view_3']);
|
Chris@0
|
144
|
Chris@0
|
145 $view_storage = $this->getMockBuilder('Drupal\Core\Config\Entity\ConfigEntityStorage')
|
Chris@0
|
146 ->disableOriginalConstructor()
|
Chris@0
|
147 ->getMock();
|
Chris@0
|
148 $view_storage->expects($this->once())
|
Chris@0
|
149 ->method('getQuery')
|
Chris@0
|
150 ->willReturn($query);
|
Chris@0
|
151
|
Chris@0
|
152 $view_storage->expects($this->once())
|
Chris@0
|
153 ->method('loadMultiple')
|
Chris@0
|
154 ->with(['test_view_1', 'test_view_2', 'test_view_3'])
|
Chris@0
|
155 ->will($this->returnValue(['test_view_1' => $view_1, 'test_view_2' => $view_2, 'test_view_3' => $view_3]));
|
Chris@0
|
156
|
Chris@0
|
157 $entity_type_manager = $this->getMock(EntityTypeManagerInterface::class);
|
Chris@0
|
158 $entity_type_manager->expects($this->exactly(2))
|
Chris@0
|
159 ->method('getStorage')
|
Chris@0
|
160 ->with('view')
|
Chris@0
|
161 ->will($this->returnValue($view_storage));
|
Chris@0
|
162 $this->container->set('entity_type.manager', $entity_type_manager);
|
Chris@0
|
163
|
Chris@0
|
164 $definitions = [
|
Chris@0
|
165 'type_a' => [
|
Chris@0
|
166 'type_a' => TRUE,
|
Chris@0
|
167 'type_b' => FALSE,
|
Chris@0
|
168 ],
|
Chris@0
|
169 'type_b' => [
|
Chris@0
|
170 'type_a' => FALSE,
|
Chris@0
|
171 'type_b' => TRUE,
|
Chris@0
|
172 ],
|
Chris@0
|
173 ];
|
Chris@0
|
174
|
Chris@0
|
175 $display_manager = $this->getMock('Drupal\Component\Plugin\PluginManagerInterface');
|
Chris@0
|
176 $display_manager->expects($this->once())
|
Chris@0
|
177 ->method('getDefinitions')
|
Chris@0
|
178 ->willReturn($definitions);
|
Chris@0
|
179 $this->container->set('plugin.manager.views.display', $display_manager);
|
Chris@0
|
180
|
Chris@0
|
181 $result = Views::getApplicableViews($applicable_type);
|
Chris@0
|
182 $this->assertEquals($expected, $result);
|
Chris@0
|
183 }
|
Chris@0
|
184
|
Chris@0
|
185 /**
|
Chris@0
|
186 * Data provider for testGetApplicableViews.
|
Chris@0
|
187 *
|
Chris@0
|
188 * @return array
|
Chris@0
|
189 */
|
Chris@0
|
190 public function providerTestGetApplicableViews() {
|
Chris@0
|
191 return [
|
Chris@0
|
192 ['type_a', [['test_view_1', 'type_a']]],
|
Chris@0
|
193 ['type_b', [['test_view_2', 'type_b']]],
|
Chris@0
|
194 ['type_c', []],
|
Chris@0
|
195 ];
|
Chris@0
|
196 }
|
Chris@0
|
197
|
Chris@0
|
198 }
|