public function EntityRevisionsTest::testRevisions

Check node revision related operations.

File

drupal/core/modules/system/lib/Drupal/system/Tests/Entity/EntityRevisionsTest.php, line 48
Definition of Drupal\system\Tests\Entity\EntityRevisionsTest.

Class

EntityRevisionsTest
Tests for the basic revisioning functionality of entities.

Namespace

Drupal\system\Tests\Entity

Code

public function testRevisions() {

  // Create initial entity.
  $entity = entity_create('entity_test', array(
    'name' => 'foo',
    'user_id' => $this->web_user->uid,
  ));
  $entity->field_test_text->value = 'bar';
  $entity
    ->save();
  $entities = array();
  $names = array();
  $texts = array();
  $revision_ids = array();

  // Create three revisions.
  $revision_count = 3;
  for ($i = 0; $i < $revision_count; $i++) {
    $legacy_revision_id = $entity->revision_id->value;
    $legacy_name = $entity->name->value;
    $legacy_text = $entity->field_test_text->value;
    $entity = entity_test_load($entity->id->value);
    $entity
      ->setNewRevision(TRUE);
    $names[] = $entity->name->value = $this
      ->randomName(32);
    $texts[] = $entity->field_test_text->value = $this
      ->randomName(32);
    $entity
      ->save();
    $revision_ids[] = $entity->revision_id->value;

    // Check that the fields and properties contain new content.
    $this
      ->assertTrue($entity->revision_id->value > $legacy_revision_id, 'Revision ID changed.');
    $this
      ->assertNotEqual($entity->name->value, $legacy_name, 'Name changed.');
    $this
      ->assertNotEqual($entity->field_test_text->value, $legacy_text, 'Text changed.');
  }
  for ($i = 0; $i < $revision_count; $i++) {

    // Load specific revision.
    $entity_revision = entity_revision_load('entity_test', $revision_ids[$i]);

    // Check if properties and fields contain the revision specific content.
    $this
      ->assertEqual($entity_revision->revision_id->value, $revision_ids[$i], 'Revision ID matches.');
    $this
      ->assertEqual($entity_revision->name->value, $names[$i], 'Name matches.');
    $this
      ->assertEqual($entity_revision->field_test_text->value, $texts[$i], 'Text matches.');
  }

  // Confirm the correct revision text appears in the edit form.
  $entity = entity_load('entity_test', $entity->id->value);
  $this
    ->drupalGet('entity-test/manage/' . $entity->id->value);
  $this
    ->assertFieldById('edit-name', $entity->name->value, 'Name matches in UI.');
  $this
    ->assertFieldById('edit-field-test-text-und-0-value', $entity->field_test_text->value, 'Text matches in UI.');
}