You are here

public function ViewListBuilderTest::testBuildRowEntityList in Drupal 10

Same name and namespace in other branches
  1. 8 core/modules/views_ui/tests/src/Unit/ViewListBuilderTest.php \Drupal\Tests\views_ui\Unit\ViewListBuilderTest::testBuildRowEntityList()
  2. 9 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 32
Contains \Drupal\Tests\views_ui\Unit\ViewListBuilderTest.

Class

ViewListBuilderTest
@coversDefaultClass \Drupal\views_ui\ViewListBuilder @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')
    ->willReturnMap([
    [
      'default',
      TRUE,
      [
        'id' => 'default',
        'title' => 'Default',
        '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')
    ->onlyMethods([
    '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');
  $parent_form_selector = $this
    ->createMock(MenuParentFormSelector::class);
  $page_display = $this
    ->getMockBuilder('Drupal\\views\\Plugin\\views\\display\\Page')
    ->onlyMethods([
    'initDisplay',
    'getPath',
  ])
    ->setConstructorArgs([
    [],
    'default',
    $display_manager
      ->getDefinition('page'),
    $route_provider,
    $state,
    $menu_storage,
    $parent_form_selector,
  ])
    ->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')
    ->onlyMethods([
    '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')
    ->willReturnMap([
    [
      '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']);
}