function ViewListBuilderTest::testBuildRowEntityList

Same name and namespace in other branches
  1. 9 core/modules/views_ui/tests/src/Unit/ViewListBuilderTest.php \Drupal\Tests\views_ui\Unit\ViewListBuilderTest::testBuildRowEntityList()
  2. 10 core/modules/views_ui/tests/src/Unit/ViewListBuilderTest.php \Drupal\Tests\views_ui\Unit\ViewListBuilderTest::testBuildRowEntityList()
  3. 11.x core/modules/views_ui/tests/src/Unit/ViewListBuilderTest.php \Drupal\Tests\views_ui\Unit\ViewListBuilderTest::testBuildRowEntityList()

Tests the listing of displays on a views list builder.

@covers ::buildRow

See also

\Drupal\views_ui\ViewListBuilder::getDisplaysList()

File

core/modules/views_ui/tests/src/Unit/ViewListBuilderTest.php, line 31

Class

ViewListBuilderTest
@coversDefaultClass <a href="/api/drupal/core%21modules%21views_ui%21src%21ViewListBuilder.php/class/ViewListBuilder/8.9.x" title="Defines a class to build a listing of view entities." class="local">\Drupal\views_ui\ViewListBuilder</a> @group views_ui

Namespace

Drupal\Tests\views_ui\Unit

Code

public function testBuildRowEntityList() {
    $storage = $this->getMockBuilder('Drupal\\Core\\Config\\Entity\\ConfigEntityStorage')
        ->disableOriginalConstructor()
        ->getMock();
    $display_manager = $this->getMockBuilder('\\Drupal\\views\\Plugin\\ViewsPluginManager')
        ->disableOriginalConstructor()
        ->getMock();
    $display_manager->expects($this->any())
        ->method('getDefinition')
        ->will($this->returnValueMap([
        [
            'default',
            TRUE,
            [
                'id' => 'default',
                'title' => 'Master',
                'theme' => 'views_view',
                'no_ui' => TRUE,
                'admin' => '',
            ],
        ],
        [
            'page',
            TRUE,
            [
                'id' => 'page',
                'title' => 'Page',
                'uses_menu_links' => TRUE,
                'uses_route' => TRUE,
                'contextual_links_locations' => [
                    'page',
                ],
                'theme' => 'views_view',
                'admin' => 'Page admin label',
            ],
        ],
        [
            'embed',
            TRUE,
            [
                'id' => 'embed',
                'title' => 'embed',
                'theme' => 'views_view',
                'admin' => 'Embed admin label',
            ],
        ],
    ]));
    $default_display = $this->getMockBuilder('Drupal\\views\\Plugin\\views\\display\\DefaultDisplay')
        ->setMethods([
        'initDisplay',
    ])
        ->setConstructorArgs([
        [],
        'default',
        $display_manager->getDefinition('default'),
    ])
        ->getMock();
    $route_provider = $this->createMock('Drupal\\Core\\Routing\\RouteProviderInterface');
    $state = $this->createMock('\\Drupal\\Core\\State\\StateInterface');
    $menu_storage = $this->createMock('\\Drupal\\Core\\Entity\\EntityStorageInterface');
    $page_display = $this->getMockBuilder('Drupal\\views\\Plugin\\views\\display\\Page')
        ->setMethods([
        'initDisplay',
        'getPath',
    ])
        ->setConstructorArgs([
        [],
        'default',
        $display_manager->getDefinition('page'),
        $route_provider,
        $state,
        $menu_storage,
    ])
        ->getMock();
    $page_display->expects($this->any())
        ->method('getPath')
        ->will($this->onConsecutiveCalls($this->returnValue('test_page'), $this->returnValue('<object>malformed_path</object>'), $this->returnValue('<script>alert("placeholder_page/%")</script>')));
    $embed_display = $this->getMockBuilder('Drupal\\views\\Plugin\\views\\display\\Embed')
        ->setMethods([
        'initDisplay',
    ])
        ->setConstructorArgs([
        [],
        'default',
        $display_manager->getDefinition('embed'),
    ])
        ->getMock();
    $values = [];
    $values['status'] = FALSE;
    $values['display']['default']['id'] = 'default';
    $values['display']['default']['display_title'] = 'Display';
    $values['display']['default']['display_plugin'] = 'default';
    $values['display']['page_1']['id'] = 'page_1';
    $values['display']['page_1']['display_title'] = 'Page 1';
    $values['display']['page_1']['display_plugin'] = 'page';
    $values['display']['page_1']['display_options']['path'] = 'test_page';
    $values['display']['page_2']['id'] = 'page_2';
    $values['display']['page_2']['display_title'] = 'Page 2';
    $values['display']['page_2']['display_plugin'] = 'page';
    $values['display']['page_2']['display_options']['path'] = '<object>malformed_path</object>';
    $values['display']['page_3']['id'] = 'page_3';
    $values['display']['page_3']['display_title'] = 'Page 3';
    $values['display']['page_3']['display_plugin'] = 'page';
    $values['display']['page_3']['display_options']['path'] = '<script>alert("placeholder_page/%")</script>';
    $values['display']['embed']['id'] = 'embed';
    $values['display']['embed']['display_title'] = 'Embedded';
    $values['display']['embed']['display_plugin'] = 'embed';
    $display_manager->expects($this->any())
        ->method('createInstance')
        ->will($this->returnValueMap([
        [
            'default',
            $values['display']['default'],
            $default_display,
        ],
        [
            'page',
            $values['display']['page_1'],
            $page_display,
        ],
        [
            'page',
            $values['display']['page_2'],
            $page_display,
        ],
        [
            'page',
            $values['display']['page_3'],
            $page_display,
        ],
        [
            'embed',
            $values['display']['embed'],
            $embed_display,
        ],
    ]));
    $container = new ContainerBuilder();
    $user = $this->createMock('Drupal\\Core\\Session\\AccountInterface');
    $request_stack = new RequestStack();
    $request_stack->push(new Request());
    $views_data = $this->getMockBuilder('Drupal\\views\\ViewsData')
        ->disableOriginalConstructor()
        ->getMock();
    $route_provider = $this->createMock('Drupal\\Core\\Routing\\RouteProviderInterface');
    $executable_factory = new ViewExecutableFactory($user, $request_stack, $views_data, $route_provider);
    $container->set('views.executable', $executable_factory);
    $container->set('plugin.manager.views.display', $display_manager);
    \Drupal::setContainer($container);
    // Setup a view list builder with a mocked buildOperations method,
    // because t() is called on there.
    $entity_type = $this->createMock('Drupal\\Core\\Entity\\EntityTypeInterface');
    $view_list_builder = new TestViewListBuilder($entity_type, $storage, $display_manager);
    $view_list_builder->setStringTranslation($this->getStringTranslationStub());
    // Create new view with test values.
    $view = new View($values, 'view');
    // Get the row object created by ViewListBuilder for this test view.
    $row = $view_list_builder->buildRow($view);
    // Expected output array for view's displays.
    $expected_displays = [
        '0' => [
            'display' => 'Embed admin label',
            'path' => FALSE,
        ],
        '1' => [
            'display' => 'Page admin label',
            'path' => '/<object>malformed_path</object>',
        ],
        '2' => [
            'display' => 'Page admin label',
            'path' => '/<script>alert("placeholder_page/%")</script>',
        ],
        '3' => [
            'display' => 'Page admin label',
            'path' => '/test_page',
        ],
    ];
    // Compare the expected and generated output.
    $this->assertEquals($expected_displays, $row['data']['displays']['data']['#displays']);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.