View source
<?php
namespace Drupal\system\Tests\Entity;
use Drupal\simpletest\WebTestBase;
class EntityRevisionsTest extends WebTestBase {
public static $modules = array(
'entity_test',
);
protected $webUser;
protected function setUp() {
parent::setUp();
$this->webUser = $this
->drupalCreateUser(array(
'administer entity_test content',
'view test entity',
));
$this
->drupalLogin($this->webUser);
}
public function testRevisions() {
foreach (entity_test_entity_types(ENTITY_TEST_TYPES_REVISABLE) as $entity_type) {
$this
->runRevisionsTests($entity_type);
}
}
protected function runRevisionsTests($entity_type) {
$entity = entity_create($entity_type, array(
'name' => 'foo',
'user_id' => $this->webUser
->id(),
));
$entity->field_test_text->value = 'bar';
$entity
->save();
$names = array();
$texts = array();
$created = array();
$revision_ids = array();
$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_load($entity_type, $entity->id->value);
$entity
->setNewRevision(TRUE);
$names[] = $entity->name->value = $this
->randomMachineName(32);
$texts[] = $entity->field_test_text->value = $this
->randomMachineName(32);
$created[] = $entity->created->value = time() + $i + 1;
$entity
->save();
$revision_ids[] = $entity->revision_id->value;
$this
->assertTrue($entity->revision_id->value > $legacy_revision_id, format_string('%entity_type: Revision ID changed.', array(
'%entity_type' => $entity_type,
)));
$this
->assertNotEqual($entity->name->value, $legacy_name, format_string('%entity_type: Name changed.', array(
'%entity_type' => $entity_type,
)));
$this
->assertNotEqual($entity->field_test_text->value, $legacy_text, format_string('%entity_type: Text changed.', array(
'%entity_type' => $entity_type,
)));
}
for ($i = 0; $i < $revision_count; $i++) {
$entity_revision = entity_revision_load($entity_type, $revision_ids[$i]);
$this
->assertEqual($entity_revision->revision_id->value, $revision_ids[$i], format_string('%entity_type: Revision ID matches.', array(
'%entity_type' => $entity_type,
)));
$this
->assertEqual($entity_revision->name->value, $names[$i], format_string('%entity_type: Name matches.', array(
'%entity_type' => $entity_type,
)));
$this
->assertEqual($entity_revision->field_test_text->value, $texts[$i], format_string('%entity_type: Text matches.', array(
'%entity_type' => $entity_type,
)));
$this
->assertTrue(isset($entity_revision->created->value), format_string('%entity_type: Non-revisioned field is loaded.', array(
'%entity_type' => $entity_type,
)));
$this
->assertEqual($entity_revision->created->value, $created[2], format_string('%entity_type: Non-revisioned field value is the same between revisions.', array(
'%entity_type' => $entity_type,
)));
}
$entity = entity_load($entity_type, $entity->id->value);
$this
->drupalGet($entity_type . '/manage/' . $entity->id->value . '/edit');
$this
->assertFieldById('edit-name-0-value', $entity->name->value, format_string('%entity_type: Name matches in UI.', array(
'%entity_type' => $entity_type,
)));
$this
->assertFieldById('edit-field-test-text-0-value', $entity->field_test_text->value, format_string('%entity_type: Text matches in UI.', array(
'%entity_type' => $entity_type,
)));
}
}