You are here

public function ContentEntityHasChangesTest::testHasTranslationChanges in Drupal 8

Same name and namespace in other branches
  1. 9 core/tests/Drupal/KernelTests/Core/Entity/ContentEntityHasChangesTest.php \Drupal\KernelTests\Core\Entity\ContentEntityHasChangesTest::testHasTranslationChanges()

Tests the correct functionality of the hasTranslationChanges() function.

File

core/tests/Drupal/KernelTests/Core/Entity/ContentEntityHasChangesTest.php, line 41

Class

ContentEntityHasChangesTest
Tests ContentEntityBase::hasTranslationChanges().

Namespace

Drupal\KernelTests\Core\Entity

Code

public function testHasTranslationChanges() {
  $user1 = User::create([
    'name' => 'username1',
    'status' => 1,
  ]);
  $user1
    ->save();
  $user2 = User::create([
    'name' => 'username2',
    'status' => 1,
  ]);
  $user2
    ->save();

  /** @var \Drupal\Core\Entity\EntityStorageInterface $storage */
  $storage = $this->container
    ->get('entity_type.manager')
    ->getStorage('entity_test_mulrev_chnged_revlog');

  /** @var \Drupal\entity_test\Entity\EntityTestMulRevChangedWithRevisionLog $entity */
  $entity = $storage
    ->create([
    'name' => $this
      ->randomString(),
  ]);
  $entity
    ->setRevisionUserId($user1
    ->id());
  $entity
    ->save();
  $this
    ->assertFalse($entity
    ->hasTranslationChanges(), 'ContentEntityBase::hasTranslationChanges() found no changes after the entity has been saved.');

  // Update the revision metadata fields and the changed field, which should
  // be skipped from checking for changes in
  // ContentEntityBase::hasTranslationChanges().
  $entity_previous_rev_id = $entity
    ->getRevisionId();

  // Revision metadata field revision_timestamp.
  $entity
    ->setRevisionCreationTime(time() + 1);

  // Revision metadata field revision_uid.
  $entity
    ->setRevisionUserId($user2
    ->id());

  // Revision metadata field revision_log.
  $entity
    ->setRevisionLogMessage('test');

  // Revision metadata field revision_translation_affected.
  $entity
    ->setRevisionTranslationAffected(TRUE);

  // Changed field.
  $entity
    ->setChangedTime(time() + 1);

  // Check that the revision metadata fields and the changed field have been
  // skipped when comparing same revisions.
  $this
    ->assertFalse($entity
    ->hasTranslationChanges(), 'ContentEntityBase::hasTranslationChanges() found no changes when comparing different revisions.');

  // Check that the revision metadata fields and the changed field have been
  // skipped when comparing same revisions with enforced new revision to be
  // created on save.
  $entity
    ->setNewRevision(TRUE);
  $this
    ->assertFalse($entity
    ->hasTranslationChanges(), 'ContentEntityBase::hasTranslationChanges() found no changes when comparing different revisions.');

  // Save the entity in new revision with changes on the revision metadata
  // fields.
  $entity
    ->save();

  // Check that the revision metadata fields and the changed field have been
  // skipped when comparing different revisions.
  $entity = $storage
    ->loadRevision($entity_previous_rev_id);
  $this
    ->assertFalse($entity
    ->hasTranslationChanges(), 'ContentEntityBase::hasTranslationChanges() found no changes when comparing different revisions.');
}