3 namespace Drupal\KernelTests\Core\Entity;
5 use Drupal\Core\Entity\EntityInterface;
6 use Drupal\Core\Entity\EntityTypeInterface;
7 use Drupal\entity_test_revlog\Entity\EntityTestMulWithRevisionLog;
8 use Drupal\KernelTests\KernelTestBase;
9 use Drupal\user\Entity\User;
10 use Drupal\user\UserInterface;
13 * @coversDefaultClass \Drupal\Core\Entity\RevisionableContentEntityBase
16 class RevisionableContentEntityBaseTest extends KernelTestBase {
21 public static $modules = ['entity_test_revlog', 'system', 'user'];
26 protected function setUp() {
29 $this->installEntitySchema('entity_test_mul_revlog');
30 $this->installEntitySchema('user');
31 $this->installSchema('system', 'sequences');
35 * Tests the correct functionality CRUD operations of entity revisions.
37 public function testRevisionableContentEntity() {
38 $entity_type = 'entity_test_mul_revlog';
39 $definition = \Drupal::entityManager()->getDefinition($entity_type);
40 $user = User::create(['name' => 'test name']);
42 /** @var \Drupal\entity_test_mul_revlog\Entity\EntityTestMulWithRevisionLog $entity */
43 $entity = EntityTestMulWithRevisionLog::create([
44 'type' => $entity_type,
47 // Save the entity, this creates the first revision.
49 $revision_ids[] = $entity->getRevisionId();
50 $this->assertItemsTableCount(1, $definition);
52 // Create the second revision.
53 $entity->setNewRevision(TRUE);
54 $random_timestamp = rand(1e8, 2e8);
55 $this->createRevision($entity, $user, $random_timestamp, 'This is my log message');
57 $revision_id = $entity->getRevisionId();
58 $revision_ids[] = $revision_id;
60 $storage = \Drupal::entityTypeManager()->getStorage('entity_test_mul_revlog');
61 $entity = $storage->loadRevision($revision_id);
62 $this->assertEquals($random_timestamp, $entity->getRevisionCreationTime());
63 $this->assertEquals($user->id(), $entity->getRevisionUserId());
64 $this->assertEquals($user->id(), $entity->getRevisionUser()->id());
65 $this->assertEquals('This is my log message', $entity->getRevisionLogMessage());
67 // Create the third revision.
68 $random_timestamp = rand(1e8, 2e8);
69 $this->createRevision($entity, $user, $random_timestamp, 'This is my log message');
70 $this->assertItemsTableCount(3, $definition);
71 $revision_ids[] = $entity->getRevisionId();
73 // Create another 3 revisions.
74 foreach (range(1, 3) as $count) {
75 $timestamp = rand(1e8, 2e8);
76 $this->createRevision($entity, $user, $timestamp, 'This is my log message number: ' . $count);
77 $revision_ids[] = $entity->getRevisionId();
79 $this->assertItemsTableCount(6, $definition);
81 $this->assertEqual(6, count($revision_ids));
83 // Delete the first 3 revisions.
84 foreach (range(0, 2) as $key) {
85 $storage->deleteRevision($revision_ids[$key]);
88 // We should have only data for three revisions.
89 $this->assertItemsTableCount(3, $definition);
93 * Asserts the ammount of items on entity related tables.
96 * The number of items expected to be in revisions related tables.
97 * @param \Drupal\Core\Entity\EntityTypeInterface $definition
98 * The definition and metada of the entity being tested.
100 protected function assertItemsTableCount($count, EntityTypeInterface $definition) {
101 $this->assertEqual(1, db_query('SELECT COUNT(*) FROM {' . $definition->getBaseTable() . '}')->fetchField());
102 $this->assertEqual(1, db_query('SELECT COUNT(*) FROM {' . $definition->getDataTable() . '}')->fetchField());
103 $this->assertEqual($count, db_query('SELECT COUNT(*) FROM {' . $definition->getRevisionTable() . '}')->fetchField());
104 $this->assertEqual($count, db_query('SELECT COUNT(*) FROM {' . $definition->getRevisionDataTable() . '}')->fetchField());
108 * Creates a new revision in the entity of this test class.
110 * @param \Drupal\Core\Entity\EntityInterface $entity
111 * The entity where revision will be created.
112 * @param \Drupal\user\UserInterface $user
113 * The author of the new revision.
114 * @param int $timestamp
115 * The timestamp of the new revision.
116 * @param string $log_message
117 * The log message of the new revision.
119 protected function createRevision(EntityInterface $entity, UserInterface $user, $timestamp, $log_message) {
120 $entity->setNewRevision(TRUE);
121 $entity->setRevisionCreationTime($timestamp);
122 $entity->setRevisionUserId($user->id());
123 $entity->setRevisionLogMessage($log_message);