File

core/modules/views/tests/src/FunctionalJavascript/Plugin/BulkOperationsTest.php, line 43

Class

BulkOperationsTest
Tests the bulk operations.

Namespace

Drupal\Tests\views\FunctionalJavascript\Plugin

Code

public function testBulkOperations() {
  $node_1 = $this
    ->drupalCreateNode([
    'type' => 'page',
    'title' => 'The first node',
    'changed' => \Drupal::time()
      ->getRequestTime() - 180,
  ]);
  $node_2 = $this
    ->drupalCreateNode([
    'type' => 'page',
    'title' => 'The second node',
    'changed' => \Drupal::time()
      ->getRequestTime() - 120,
  ]);

  // Login as administrator and go to admin/content.
  $this
    ->drupalGet('admin/content');
  $this
    ->assertSession()
    ->pageTextContains($node_1
    ->getTitle());

  // Filter the list.
  $this
    ->assertSession()
    ->pageTextContains($node_1
    ->getTitle());
  $this
    ->assertSession()
    ->pageTextContains($node_2
    ->getTitle());
  $this
    ->submitForm([
    'title' => 'The first node',
  ], 'Filter');
  $this
    ->assertSession()
    ->assertWaitOnAjaxRequest();
  $this
    ->assertSession()
    ->pageTextContains($node_1
    ->getTitle());
  $this
    ->assertSession()
    ->pageTextNotContains($node_2
    ->getTitle());

  // Select the node deletion action.
  $action_select = $this
    ->getSession()
    ->getPage()
    ->find('css', '[data-drupal-selector="edit-action"]');
  $action_select_name = $action_select
    ->getAttribute('name');
  $this
    ->getSession()
    ->getPage()
    ->selectFieldOption($action_select_name, 'node_delete_action');

  // Now click 'Apply to selected items' and assert the first node is selected
  // on the confirm form.
  $this
    ->submitForm([
    'node_bulk_form[0]' => TRUE,
  ], 'Apply to selected items');
  $this
    ->assertSession()
    ->pageTextContains($node_1
    ->getTitle());
  $this
    ->assertSession()
    ->pageTextNotContains($node_2
    ->getTitle());
  $this
    ->getSession()
    ->getPage()
    ->pressButton('Delete');

  // Confirm that the first node was deleted.
  $this
    ->assertSession()
    ->pageTextNotContains($node_1
    ->getTitle());
  $this
    ->assertSession()
    ->pageTextNotContains($node_2
    ->getTitle());

  // Ensure that assets are loaded on the page. This confirms that the page
  // was loaded without ajax state.
  $this
    ->assertSession()
    ->responseContains('/core/misc/ajax.js');

  // Confirm that second node exists.
  $this
    ->submitForm([], 'Reset');
  $this
    ->assertSession()
    ->pageTextContains($node_2
    ->getTitle());

  // Select the node unpublish action.
  $action_select = $this
    ->getSession()
    ->getPage()
    ->find('css', '[data-drupal-selector="edit-action"]');
  $action_select_name = $action_select
    ->getAttribute('name');
  $this
    ->getSession()
    ->getPage()
    ->selectFieldOption($action_select_name, 'node_unpublish_action');

  // Ensure that assets are loaded on the page. This confirms that the page
  // was loaded without ajax state.
  $this
    ->assertSession()
    ->responseContains('/core/misc/ajax.js');
}