You are here

public function DefaultViewsTest::testDefaultViews in Drupal 9

Same name in this branch
  1. 9 core/modules/views/tests/src/Functional/DefaultViewsTest.php \Drupal\Tests\views\Functional\DefaultViewsTest::testDefaultViews()
  2. 9 core/modules/views_ui/tests/src/Functional/DefaultViewsTest.php \Drupal\Tests\views_ui\Functional\DefaultViewsTest::testDefaultViews()
Same name and namespace in other branches
  1. 8 core/modules/views_ui/tests/src/Functional/DefaultViewsTest.php \Drupal\Tests\views_ui\Functional\DefaultViewsTest::testDefaultViews()

Tests default views.

File

core/modules/views_ui/tests/src/Functional/DefaultViewsTest.php, line 38

Class

DefaultViewsTest
Tests enabling, disabling, and reverting default views via the listing page.

Namespace

Drupal\Tests\views_ui\Functional

Code

public function testDefaultViews() {

  // Make sure the view starts off as disabled (does not appear on the listing
  // page).
  $edit_href = 'admin/structure/views/view/glossary';
  $this
    ->drupalGet('admin/structure/views');

  // @todo Disabled default views do now appear on the front page. Test this
  // behavior with templates instead.
  // $this->assertSession()->linkByHrefNotExists($edit_href);
  // Enable the view, and make sure it is now visible on the main listing
  // page.
  $this
    ->drupalGet('admin/structure/views');
  $this
    ->clickViewsOperationLink('Enable', '/glossary/');
  $this
    ->assertSession()
    ->addressEquals('admin/structure/views');
  $this
    ->assertSession()
    ->linkByHrefExists($edit_href);

  // It should not be possible to revert the view yet.
  // @todo Figure out how to handle this with the new configuration system.
  // $this->assertSession()->linkNotExists('Revert');
  // $revert_href = 'admin/structure/views/view/glossary/revert';
  // $this->assertSession()->linkByHrefNotExists($revert_href);
  // Edit the view and change the title. Make sure that the new title is
  // displayed.
  $new_title = $this
    ->randomMachineName(16);
  $edit = [
    'title' => $new_title,
  ];
  $this
    ->drupalGet('admin/structure/views/nojs/display/glossary/page_1/title');
  $this
    ->submitForm($edit, 'Apply');
  $this
    ->drupalGet('admin/structure/views/view/glossary/edit/page_1');
  $this
    ->submitForm([], 'Save');
  $this
    ->drupalGet('glossary');
  $this
    ->assertSession()
    ->statusCodeEquals(200);
  $this
    ->assertSession()
    ->pageTextContains($new_title);

  // Save another view in the UI.
  $this
    ->drupalGet('admin/structure/views/nojs/display/archive/page_1/title');
  $this
    ->submitForm([], 'Apply');
  $this
    ->drupalGet('admin/structure/views/view/archive/edit/page_1');
  $this
    ->submitForm([], 'Save');

  // Check there is an enable link. i.e. The view has not been enabled after
  // editing.
  $this
    ->drupalGet('admin/structure/views');
  $this
    ->assertSession()
    ->linkByHrefExists('admin/structure/views/view/archive/enable');

  // Enable it again so it can be tested for access permissions.
  $this
    ->clickViewsOperationLink('Enable', '/archive/');

  // It should now be possible to revert the view. Do that, and make sure the
  // view title we added above no longer is displayed.
  // $this->drupalGet('admin/structure/views');
  // $this->assertSession()->linkExists('Revert');
  // $this->assertSession()->linkByHrefExists($revert_href);
  // $this->drupalGet($revert_href);
  // $this->submitForm(array(), 'Revert');
  // $this->drupalGet('glossary');
  // $this->assertSession()->pageTextNotContains($new_title);
  // Duplicate the view and check that the normal schema of duplicated views is used.
  $this
    ->drupalGet('admin/structure/views');
  $this
    ->clickViewsOperationLink('Duplicate', '/glossary');
  $edit = [
    'id' => 'duplicate_of_glossary',
  ];
  $this
    ->assertSession()
    ->titleEquals('Duplicate of Glossary | Drupal');
  $this
    ->submitForm($edit, 'Duplicate');
  $this
    ->assertSession()
    ->addressEquals('admin/structure/views/view/duplicate_of_glossary');

  // Duplicate a view and set a custom name.
  $this
    ->drupalGet('admin/structure/views');
  $this
    ->clickViewsOperationLink('Duplicate', '/glossary');
  $random_name = strtolower($this
    ->randomMachineName());
  $this
    ->submitForm([
    'id' => $random_name,
  ], 'Duplicate');
  $this
    ->assertSession()
    ->addressEquals("admin/structure/views/view/{$random_name}");

  // Now disable the view, and make sure it stops appearing on the main view
  // listing page but instead goes back to displaying on the disabled views
  // listing page.
  // @todo Test this behavior with templates instead.
  $this
    ->drupalGet('admin/structure/views');
  $this
    ->clickViewsOperationLink('Disable', '/glossary/');

  // $this->assertSession()->addressEquals('admin/structure/views');
  // $this->assertSession()->linkByHrefNotExists($edit_href);
  // The easiest way to verify it appears on the disabled views listing page
  // is to try to click the "enable" link from there again.
  $this
    ->drupalGet('admin/structure/views');
  $this
    ->clickViewsOperationLink('Enable', '/glossary/');
  $this
    ->assertSession()
    ->addressEquals('admin/structure/views');
  $this
    ->assertSession()
    ->linkByHrefExists($edit_href);

  // Clear permissions for anonymous users to check access for default views.
  Role::load(RoleInterface::ANONYMOUS_ID)
    ->revokePermission('access content')
    ->save();

  // Test the default views disclose no data by default.
  $this
    ->drupalLogout();
  $this
    ->drupalGet('glossary');
  $this
    ->assertSession()
    ->statusCodeEquals(403);
  $this
    ->drupalGet('archive');
  $this
    ->assertSession()
    ->statusCodeEquals(403);

  // Test deleting a view.
  $this
    ->drupalLogin($this->fullAdminUser);
  $this
    ->drupalGet('admin/structure/views');
  $this
    ->clickViewsOperationLink('Delete', '/glossary/');

  // Submit the confirmation form.
  $this
    ->submitForm([], 'Delete');

  // Ensure the view is no longer listed.
  $this
    ->assertSession()
    ->addressEquals('admin/structure/views');
  $this
    ->assertSession()
    ->linkByHrefNotExists($edit_href);

  // Ensure the view is no longer available.
  $this
    ->drupalGet($edit_href);
  $this
    ->assertSession()
    ->statusCodeEquals(404);
  $this
    ->assertSession()
    ->pageTextContains('Page not found');

  // Delete all duplicated Glossary views.
  $this
    ->drupalGet('admin/structure/views');
  $this
    ->clickViewsOperationLink('Delete', 'duplicate_of_glossary');

  // Submit the confirmation form.
  $this
    ->submitForm([], 'Delete');
  $this
    ->drupalGet('glossary');
  $this
    ->assertSession()
    ->statusCodeEquals(200);
  $this
    ->drupalGet('admin/structure/views');
  $this
    ->clickViewsOperationLink('Delete', $random_name);

  // Submit the confirmation form.
  $this
    ->submitForm([], 'Delete');
  $this
    ->drupalGet('glossary');
  $this
    ->assertSession()
    ->statusCodeEquals(404);
  $this
    ->assertSession()
    ->pageTextContains('Page not found');
}