73b3254630ea5aa9910bf3a2c9b8c0953f6bff79
[yaffs-website] / web / core / tests / Drupal / KernelTests / Core / Entity / RevisionableContentEntityBaseTest.php
1 <?php
2
3 namespace Drupal\KernelTests\Core\Entity;
4
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;
11
12 /**
13  * @coversDefaultClass \Drupal\Core\Entity\RevisionableContentEntityBase
14  * @group Entity
15  */
16 class RevisionableContentEntityBaseTest extends KernelTestBase {
17
18   /**
19    * {@inheritdoc}
20    */
21   public static $modules = ['entity_test_revlog', 'system', 'user'];
22
23   /**
24    * {@inheritdoc}
25    */
26   protected function setUp() {
27     parent::setUp();
28
29     $this->installEntitySchema('entity_test_mul_revlog');
30     $this->installEntitySchema('user');
31     $this->installSchema('system', 'sequences');
32   }
33
34   /**
35    * Tests the correct functionality CRUD operations of entity revisions.
36    */
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']);
41     $user->save();
42     /** @var \Drupal\entity_test_mul_revlog\Entity\EntityTestMulWithRevisionLog $entity */
43     $entity = EntityTestMulWithRevisionLog::create([
44       'type' => $entity_type,
45     ]);
46
47     // Save the entity, this creates the first revision.
48     $entity->save();
49     $revision_ids[] = $entity->getRevisionId();
50     $this->assertItemsTableCount(1, $definition);
51
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');
56
57     $revision_id = $entity->getRevisionId();
58     $revision_ids[] = $revision_id;
59
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());
66
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();
72
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();
78     }
79     $this->assertItemsTableCount(6, $definition);
80
81     $this->assertEqual(6, count($revision_ids));
82
83     // Delete the first 3 revisions.
84     foreach (range(0, 2) as $key) {
85       $storage->deleteRevision($revision_ids[$key]);
86     }
87
88     // We should have only data for three revisions.
89     $this->assertItemsTableCount(3, $definition);
90   }
91
92   /**
93    * Asserts the ammount of items on entity related tables.
94    *
95    * @param int $count
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.
99    */
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());
105   }
106
107   /**
108    * Creates a new revision in the entity of this test class.
109    *
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.
118    */
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);
124     $entity->save();
125   }
126
127 }