You are here

public function BatchUpdateTest::testBatchUpdate in Entity Usage 8.3

Same name and namespace in other branches
  1. 8 tests/src/FunctionalJavascript/BatchUpdateTest.php \Drupal\Tests\entity_usage\FunctionalJavascript\BatchUpdateTest::testBatchUpdate()
  2. 8.2 tests/src/FunctionalJavascript/BatchUpdateTest.php \Drupal\Tests\entity_usage\FunctionalJavascript\BatchUpdateTest::testBatchUpdate()

Tests the batch update.

File

tests/src/FunctionalJavascript/BatchUpdateTest.php, line 20

Class

BatchUpdateTest
Tests for the batch update functionality.

Namespace

Drupal\Tests\entity_usage\FunctionalJavascript

Code

public function testBatchUpdate() {
  $session = $this
    ->getSession();
  $page = $session
    ->getPage();
  $assert_session = $this
    ->assertSession();

  // No permissions, you get a 403 when trying to access the batch update.
  $this
    ->drupalGet('/admin/config/entity-usage/batch-update');
  $assert_session
    ->pageTextContains('You are not authorized to access this page');

  // Grant the logged-in the needed permission and try again.

  /** @var \Drupal\user\RoleInterface $role */
  $role = Role::load('authenticated');
  $this
    ->grantPermissions($role, [
    'perform batch updates entity usage',
  ]);
  $this
    ->drupalGet('/admin/config/entity-usage/batch-update');
  $assert_session
    ->pageTextContains('Batch update');
  $assert_session
    ->pageTextContains('This page allows you to delete and re-generate again all entity usage statistics in your system');

  /** @var \Drupal\entity_usage\EntityUsage $usage_service */
  $usage_service = \Drupal::service('entity_usage.usage');

  // Create node 1.
  $this
    ->drupalGet('/node/add/eu_test_ct');
  $page
    ->fillField('title[0][value]', 'Node 1');
  $page
    ->pressButton('Save');
  $session
    ->wait(500);
  $this
    ->saveHtmlOutput();
  $assert_session
    ->pageTextContains('eu_test_ct Node 1 has been created.');
  $node1 = Node::load(1);

  // Create node 2 referencing node 1 using reference field.
  $this
    ->drupalGet('/node/add/eu_test_ct');
  $page
    ->fillField('title[0][value]', 'Node 2');
  $page
    ->fillField('field_eu_test_related_nodes[0][target_id]', 'Node 1 (1)');
  $page
    ->pressButton('Save');
  $session
    ->wait(500);
  $this
    ->saveHtmlOutput();
  $assert_session
    ->pageTextContains('eu_test_ct Node 2 has been created.');

  // Create node 3 also referencing node 1 in a reference field.
  $this
    ->drupalGet('/node/add/eu_test_ct');
  $page
    ->fillField('title[0][value]', 'Node 3');
  $page
    ->fillField('field_eu_test_related_nodes[0][target_id]', 'Node 1 (1)');
  $page
    ->pressButton('Save');
  $session
    ->wait(500);
  $this
    ->saveHtmlOutput();
  $assert_session
    ->pageTextContains('eu_test_ct Node 3 has been created.');

  // Remove one of the records from the database to simulate an usage
  // non-tracked by the module.
  $usage_service
    ->deleteBySourceEntity(2, 'node');
  $usage = $usage_service
    ->listSources($node1);
  $this
    ->assertEquals($usage['node'], [
    '3' => [
      0 => [
        'source_langcode' => 'en',
        'source_vid' => '3',
      ],
    ],
  ]);

  // Go to the batch update page and check the update.
  $this
    ->drupalGet('/admin/config/entity-usage/batch-update');
  $assert_session
    ->pageTextContains('Batch Update');
  $assert_session
    ->pageTextContains('This page allows you to delete and re-generate again all entity usage statistics in your system.');
  $assert_session
    ->pageTextContains('You may want to check the settings page to fine-tune what entities should be tracked, and other options.');

  // If in the settings form we have disabled tracking for nodes, the batch
  // update should have no effect.
  $config = \Drupal::configFactory()
    ->getEditable('entity_usage.settings');
  $config
    ->set('track_enabled_source_entity_types', []);
  $config
    ->save();
  $page
    ->pressButton('Recreate all entity usage statistics');
  $this
    ->getSession()
    ->wait(1000);
  $this
    ->saveHtmlOutput();
  $this
    ->getSession()
    ->wait(6000);
  $this
    ->saveHtmlOutput();
  $assert_session
    ->pageTextContains('Recreated entity usage for');

  // The usage is still what we had before.
  $usage = $usage_service
    ->listSources($node1);
  $this
    ->assertEquals($usage['node'], [
    '3' => [
      0 => [
        'source_langcode' => 'en',
        'source_vid' => '3',
      ],
    ],
  ]);

  // Enable tracking for source nodes and try again.
  $config = \Drupal::configFactory()
    ->getEditable('entity_usage.settings');
  $config
    ->set('track_enabled_source_entity_types', [
    'node',
  ]);
  $config
    ->save();
  $this
    ->drupalGet('/admin/config/entity-usage/batch-update');
  $page
    ->pressButton('Recreate all entity usage statistics');
  $this
    ->getSession()
    ->wait(1000);
  $this
    ->saveHtmlOutput();
  $this
    ->getSession()
    ->wait(6000);
  $this
    ->saveHtmlOutput();
  $assert_session
    ->pageTextContains('Recreated entity usage for');

  // Check if the resulting usage is the expected.
  $usage = $usage_service
    ->listSources($node1);
  $this
    ->assertEquals($usage['node'], [
    '3' => [
      0 => [
        'source_langcode' => 'en',
        'source_vid' => '3',
      ],
    ],
    '2' => [
      0 => [
        'source_langcode' => 'en',
        'source_vid' => '2',
      ],
    ],
  ]);
}