5 * Contains \Drupal\Tests\views_ui\Unit\ViewListBuilderTest.
8 namespace Drupal\Tests\views_ui\Unit;
10 use Drupal\Core\DependencyInjection\ContainerBuilder;
11 use Drupal\Core\Entity\EntityInterface;
12 use Drupal\Tests\UnitTestCase;
13 use Drupal\views\Entity\View;
14 use Drupal\views\ViewExecutableFactory;
15 use Drupal\views_ui\ViewListBuilder;
16 use Symfony\Component\HttpFoundation\Request;
17 use Symfony\Component\HttpFoundation\RequestStack;
20 * @coversDefaultClass \Drupal\views_ui\ViewListBuilder
23 class ViewListBuilderTest extends UnitTestCase {
26 * Tests the listing of displays on a views list builder.
28 * @see \Drupal\views_ui\ViewListBuilder::getDisplaysList()
31 public function testBuildRowEntityList() {
32 $storage = $this->getMockBuilder('Drupal\Core\Config\Entity\ConfigEntityStorage')
33 ->disableOriginalConstructor()
35 $display_manager = $this->getMockBuilder('\Drupal\views\Plugin\ViewsPluginManager')
36 ->disableOriginalConstructor()
39 $display_manager->expects($this->any())
40 ->method('getDefinition')
41 ->will($this->returnValueMap([
48 'theme' => 'views_view',
59 'uses_menu_links' => TRUE,
61 'contextual_links_locations' => ['page'],
62 'theme' => 'views_view',
63 'admin' => 'Page admin label',
72 'theme' => 'views_view',
73 'admin' => 'Embed admin label',
79 $default_display = $this->getMock('Drupal\views\Plugin\views\display\DefaultDisplay',
81 [[], 'default', $display_manager->getDefinition('default')]
83 $route_provider = $this->getMock('Drupal\Core\Routing\RouteProviderInterface');
84 $state = $this->getMock('\Drupal\Core\State\StateInterface');
85 $menu_storage = $this->getMock('\Drupal\Core\Entity\EntityStorageInterface');
86 $page_display = $this->getMock('Drupal\views\Plugin\views\display\Page',
87 ['initDisplay', 'getPath'],
88 [[], 'default', $display_manager->getDefinition('page'), $route_provider, $state, $menu_storage]
90 $page_display->expects($this->any())
92 ->will($this->onConsecutiveCalls(
93 $this->returnValue('test_page'),
94 $this->returnValue('<object>malformed_path</object>'),
95 $this->returnValue('<script>alert("placeholder_page/%")</script>')));
97 $embed_display = $this->getMock('Drupal\views\Plugin\views\display\Embed', ['initDisplay'],
98 [[], 'default', $display_manager->getDefinition('embed')]
102 $values['status'] = FALSE;
103 $values['display']['default']['id'] = 'default';
104 $values['display']['default']['display_title'] = 'Display';
105 $values['display']['default']['display_plugin'] = 'default';
107 $values['display']['page_1']['id'] = 'page_1';
108 $values['display']['page_1']['display_title'] = 'Page 1';
109 $values['display']['page_1']['display_plugin'] = 'page';
110 $values['display']['page_1']['display_options']['path'] = 'test_page';
112 $values['display']['page_2']['id'] = 'page_2';
113 $values['display']['page_2']['display_title'] = 'Page 2';
114 $values['display']['page_2']['display_plugin'] = 'page';
115 $values['display']['page_2']['display_options']['path'] = '<object>malformed_path</object>';
117 $values['display']['page_3']['id'] = 'page_3';
118 $values['display']['page_3']['display_title'] = 'Page 3';
119 $values['display']['page_3']['display_plugin'] = 'page';
120 $values['display']['page_3']['display_options']['path'] = '<script>alert("placeholder_page/%")</script>';
122 $values['display']['embed']['id'] = 'embed';
123 $values['display']['embed']['display_title'] = 'Embedded';
124 $values['display']['embed']['display_plugin'] = 'embed';
126 $display_manager->expects($this->any())
127 ->method('createInstance')
128 ->will($this->returnValueMap([
129 ['default', $values['display']['default'], $default_display],
130 ['page', $values['display']['page_1'], $page_display],
131 ['page', $values['display']['page_2'], $page_display],
132 ['page', $values['display']['page_3'], $page_display],
133 ['embed', $values['display']['embed'], $embed_display],
136 $container = new ContainerBuilder();
137 $user = $this->getMock('Drupal\Core\Session\AccountInterface');
138 $request_stack = new RequestStack();
139 $request_stack->push(new Request());
140 $views_data = $this->getMockBuilder('Drupal\views\ViewsData')
141 ->disableOriginalConstructor()
143 $route_provider = $this->getMock('Drupal\Core\Routing\RouteProviderInterface');
144 $executable_factory = new ViewExecutableFactory($user, $request_stack, $views_data, $route_provider);
145 $container->set('views.executable', $executable_factory);
146 $container->set('plugin.manager.views.display', $display_manager);
147 \Drupal::setContainer($container);
149 // Setup a view list builder with a mocked buildOperations method,
150 // because t() is called on there.
151 $entity_type = $this->getMock('Drupal\Core\Entity\EntityTypeInterface');
152 $view_list_builder = new TestViewListBuilder($entity_type, $storage, $display_manager);
153 $view_list_builder->setStringTranslation($this->getStringTranslationStub());
155 // Create new view with test values.
156 $view = new View($values, 'view');
158 // Get the row object created by ViewListBuilder for this test view.
159 $row = $view_list_builder->buildRow($view);
161 // Expected output array for view's displays.
162 $expected_displays = [
164 'display' => 'Embed admin label',
168 'display' => 'Page admin label',
169 'path' => '/<object>malformed_path</object>',
172 'display' => 'Page admin label',
173 'path' => '/<script>alert("placeholder_page/%")</script>',
176 'display' => 'Page admin label',
177 'path' => '/test_page',
181 // Compare the expected and generated output.
182 $this->assertEquals($expected_displays, $row['data']['displays']['data']['#displays']);
187 class TestViewListBuilder extends ViewListBuilder {
189 public function buildOperations(EntityInterface $entity) {