function DisplayCRUDTest::testDuplicateDisplay

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

Tests the duplicating of a display.

File

core/modules/views_ui/tests/src/Functional/DisplayCRUDTest.php, line 113

Class

DisplayCRUDTest
Tests creation, retrieval, updating, and deletion of displays in the Web UI.

Namespace

Drupal\Tests\views_ui\Functional

Code

public function testDuplicateDisplay() {
    $view = $this->randomView();
    $path_prefix = 'admin/structure/views/view/' . $view['id'] . '/edit';
    $path = $view['page[path]'];
    $this->drupalGet($path_prefix);
    $this->drupalPostForm(NULL, [], 'Duplicate Page');
    $this->assertLinkByHref($path_prefix . '/page_2', 0, 'Make sure after duplicating the new display appears in the UI');
    $this->assertUrl($path_prefix . '/page_2', [], 'The user got redirected to the new display.');
    // Set the title and override the css classes.
    $random_title = $this->randomMachineName();
    $random_css = $this->randomMachineName();
    $this->drupalPostForm("admin/structure/views/nojs/display/{$view['id']}/page_2/title", [
        'title' => $random_title,
    ], t('Apply'));
    $this->drupalPostForm("admin/structure/views/nojs/display/{$view['id']}/page_2/css_class", [
        'override[dropdown]' => 'page_2',
        'css_class' => $random_css,
    ], t('Apply'));
    // Duplicate as a different display type.
    $this->drupalPostForm(NULL, [], 'Duplicate as Block');
    $this->assertLinkByHref($path_prefix . '/block_1', 0, 'Make sure after duplicating the new display appears in the UI');
    $this->assertUrl($path_prefix . '/block_1', [], 'The user got redirected to the new display.');
    $this->assertText(t('Block settings'));
    $this->assertNoText(t('Page settings'));
    $this->drupalPostForm(NULL, [], t('Save'));
    $view = Views::getView($view['id']);
    $view->initDisplay();
    $page_2 = $view->displayHandlers
        ->get('page_2');
    $this->assertNotEmpty($page_2, 'The new page display got saved.');
    $this->assertEqual($page_2->display['display_title'], 'Page');
    $this->assertEqual($page_2->display['display_options']['path'], $path);
    $block_1 = $view->displayHandlers
        ->get('block_1');
    $this->assertNotEmpty($block_1, 'The new block display got saved.');
    $this->assertEqual($block_1->display['display_plugin'], 'block');
    $this->assertEqual($block_1->display['display_title'], 'Block', 'The new display title got generated as expected.');
    $this->assertFalse(isset($block_1->display['display_options']['path']));
    $this->assertEqual($block_1->getOption('title'), $random_title, 'The overridden title option from the display got copied into the duplicate');
    $this->assertEqual($block_1->getOption('css_class'), $random_css, 'The overridden css_class option from the display got copied into the duplicate');
    // Test duplicating a display after changing the machine name.
    $view_id = $view->id();
    $this->drupalPostForm("admin/structure/views/nojs/display/{$view_id}/page_2/display_id", [
        'display_id' => 'page_new',
    ], 'Apply');
    $this->drupalPostForm(NULL, [], 'Duplicate as Block');
    $this->drupalPostForm(NULL, [], t('Save'));
    $view = Views::getView($view_id);
    $view->initDisplay();
    $this->assertNotNull($view->displayHandlers
        ->get('page_new'), 'The original display is saved with a changed id');
    $this->assertNotNull($view->displayHandlers
        ->get('block_2'), 'The duplicate display is saved with new id');
}

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