You are here

public function ConfigurableFieldTest::testEncryptFieldRevision in Field Encryption 3.0.x

Test encrypting fields with revisions.

This test also covers deletion of an encrypted field with existing data.

File

tests/src/Functional/ConfigurableFieldTest.php, line 120

Class

ConfigurableFieldTest
Tests field encryption.

Namespace

Drupal\Tests\field_encrypt\Functional

Code

public function testEncryptFieldRevision() {
  $this
    ->setFieldStorageSettings(TRUE);

  // Save test entity.
  $this
    ->createTestNode();

  // Create a new revision for the entity.
  $old_revision_id = $this->testNode
    ->getRevisionId();
  $this->testNode
    ->setNewRevision(TRUE);
  $this->testNode->field_test_single->value = "Lorem ipsum dolor sit amet revision.";
  $this->testNode->field_test_single->summary = "Lorem ipsum revision.";
  $multi_field = $this->testNode
    ->get('field_test_multi');
  $multi_field_value = $multi_field
    ->getValue();
  $multi_field_value[0]['value'] = "four";
  $multi_field_value[1]['value'] = "five";
  $multi_field_value[2]['value'] = "six";
  $multi_field
    ->setValue($multi_field_value);
  $this->testNode
    ->save();

  // Ensure that the node revision has been created.
  $this->entityTypeManager
    ->getStorage('node')
    ->resetCache([
    $this->testNode
      ->id(),
  ]);
  $this
    ->assertNotSame($this->testNode
    ->getRevisionId(), $old_revision_id, 'A new revision has been created.');

  // Check if revision text is displayed unencrypted.
  $this
    ->drupalGet('node/' . $this->testNode
    ->id());
  $this
    ->assertSession()
    ->pageTextContains("Lorem ipsum dolor sit amet revision.");
  $this
    ->assertSession()
    ->pageTextContains("four");
  $this
    ->assertSession()
    ->pageTextContains("five");
  $this
    ->assertSession()
    ->pageTextContains("six");

  // Check if original text is displayed unencrypted.
  $this
    ->drupalGet('node/' . $this->testNode
    ->id() . '/revisions/' . $old_revision_id . '/view');
  $this
    ->assertSession()
    ->pageTextContains("Lorem ipsum dolor sit amet.");
  $this
    ->assertSession()
    ->pageTextContains("one");
  $this
    ->assertSession()
    ->pageTextContains("two");
  $this
    ->assertSession()
    ->pageTextContains("three");

  // Check values saved in the database.
  $result = \Drupal::database()
    ->query("SELECT field_test_single_value FROM {node_revision__field_test_single} WHERE entity_id = :entity_id", [
    ':entity_id' => $this->testNode
      ->id(),
  ])
    ->fetchField();
  $this
    ->assertEquals(ProcessEntities::ENCRYPTED_VALUE, $result);
  $result = \Drupal::database()
    ->query("SELECT field_test_multi_value FROM {node_revision__field_test_multi} WHERE entity_id = :entity_id", [
    ':entity_id' => $this->testNode
      ->id(),
  ])
    ->fetchAll();
  foreach ($result as $record) {
    $this
      ->assertEquals(ProcessEntities::ENCRYPTED_VALUE, $record->field_test_multi_value);
  }
  $this
    ->drupalGet('admin/structure/types/manage/page/fields/node.page.field_test_multi/delete');
  $this
    ->submitForm([], 'Delete');
}