Updated Drupal to 8.6. This goes with the following updates because it's possible...
[yaffs-website] / web / core / tests / Drupal / Tests / Core / Entity / Sql / SqlContentEntityStorageTest.php
index bf3fd46eb6a331eba92983524c95fc809eee4103..3c88db7f9e535b835a84c65689141720b556088f 100644 (file)
@@ -8,12 +8,14 @@
 namespace Drupal\Tests\Core\Entity\Sql;
 
 use Drupal\Core\Cache\CacheBackendInterface;
+use Drupal\Core\Cache\MemoryCache\MemoryCache;
 use Drupal\Core\Entity\EntityFieldManagerInterface;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityManager;
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Entity\Query\QueryFactoryInterface;
+use Drupal\Core\Entity\Sql\DefaultTableMapping;
 use Drupal\Core\Entity\Sql\SqlContentEntityStorage;
 use Drupal\Core\Language\Language;
 use Drupal\Tests\UnitTestCase;
@@ -199,12 +201,15 @@ class SqlContentEntityStorageTest extends UnitTestCase {
    * @dataProvider providerTestGetRevisionTable
    */
   public function testGetRevisionTable($revision_table, $expected) {
-    $this->entityType->expects($this->once())
+    $this->entityType->expects($this->any())
       ->method('isRevisionable')
       ->will($this->returnValue(TRUE));
     $this->entityType->expects($this->once())
       ->method('getRevisionTable')
       ->will($this->returnValue($revision_table));
+    $this->entityType->expects($this->any())
+      ->method('getRevisionMetadataKeys')
+      ->willReturn([]);
 
     $this->setUpEntityStorage();
 
@@ -237,12 +242,15 @@ class SqlContentEntityStorageTest extends UnitTestCase {
    * @covers ::getDataTable
    */
   public function testGetDataTable() {
-    $this->entityType->expects($this->once())
+    $this->entityType->expects($this->any())
       ->method('isTranslatable')
       ->will($this->returnValue(TRUE));
     $this->entityType->expects($this->exactly(1))
       ->method('getDataTable')
       ->will($this->returnValue('entity_test_field_data'));
+    $this->entityType->expects($this->any())
+      ->method('getRevisionMetadataKeys')
+      ->willReturn([]);
 
     $this->setUpEntityStorage();
 
@@ -264,10 +272,10 @@ class SqlContentEntityStorageTest extends UnitTestCase {
    * @dataProvider providerTestGetRevisionDataTable
    */
   public function testGetRevisionDataTable($revision_data_table, $expected) {
-    $this->entityType->expects($this->once())
+    $this->entityType->expects($this->any())
       ->method('isRevisionable')
       ->will($this->returnValue(TRUE));
-    $this->entityType->expects($this->once())
+    $this->entityType->expects($this->any())
       ->method('isTranslatable')
       ->will($this->returnValue(TRUE));
     $this->entityType->expects($this->exactly(1))
@@ -276,6 +284,9 @@ class SqlContentEntityStorageTest extends UnitTestCase {
     $this->entityType->expects($this->once())
       ->method('getRevisionDataTable')
       ->will($this->returnValue($revision_data_table));
+    $this->entityType->expects($this->any())
+      ->method('getRevisionMetadataKeys')
+      ->willReturn([]);
 
     $this->setUpEntityStorage();
 
@@ -302,6 +313,51 @@ class SqlContentEntityStorageTest extends UnitTestCase {
     ];
   }
 
+  /**
+   * Tests that setting a new table mapping also updates the table names.
+   *
+   * @covers ::setTableMapping
+   */
+  public function testSetTableMapping() {
+    $this->entityType->expects($this->any())
+      ->method('isRevisionable')
+      ->will($this->returnValue(FALSE));
+    $this->entityType->expects($this->any())
+      ->method('isTranslatable')
+      ->will($this->returnValue(FALSE));
+    $this->entityType->expects($this->any())
+      ->method('getRevisionMetadataKeys')
+      ->willReturn([]);
+
+    $this->setUpEntityStorage();
+
+    $this->assertSame('entity_test', $this->entityStorage->getBaseTable());
+    $this->assertNull($this->entityStorage->getRevisionTable());
+    $this->assertNull($this->entityStorage->getDataTable());
+    $this->assertNull($this->entityStorage->getRevisionDataTable());
+
+    // Change the entity type definition and instantiate a new table mapping
+    // with it.
+    $updated_entity_type = $this->createMock('Drupal\Core\Entity\ContentEntityTypeInterface');
+    $updated_entity_type->expects($this->any())
+      ->method('id')
+      ->will($this->returnValue($this->entityTypeId));
+    $updated_entity_type->expects($this->any())
+      ->method('isRevisionable')
+      ->will($this->returnValue(TRUE));
+    $updated_entity_type->expects($this->any())
+      ->method('isTranslatable')
+      ->will($this->returnValue(TRUE));
+
+    $table_mapping = new DefaultTableMapping($updated_entity_type, []);
+    $this->entityStorage->setTableMapping($table_mapping);
+
+    $this->assertSame('entity_test', $this->entityStorage->getBaseTable());
+    $this->assertSame('entity_test_revision', $this->entityStorage->getRevisionTable());
+    $this->assertSame('entity_test_field_data', $this->entityStorage->getDataTable());
+    $this->assertSame('entity_test_field_revision', $this->entityStorage->getRevisionDataTable());
+  }
+
   /**
    * Tests ContentEntityDatabaseStorage::onEntityTypeCreate().
    *
@@ -327,6 +383,14 @@ class SqlContentEntityStorageTest extends UnitTestCase {
     $this->entityType->expects($this->once())
       ->method('getKeys')
       ->will($this->returnValue(['id' => 'id']));
+    $this->entityType->expects($this->any())
+      ->method('hasKey')
+      ->will($this->returnValueMap([
+        // SqlContentEntityStorageSchema::initializeBaseTable()
+        ['revision', FALSE],
+        // SqlContentEntityStorageSchema::processBaseTable()
+        ['id', TRUE],
+      ]));
     $this->entityType->expects($this->any())
       ->method('getKey')
       ->will($this->returnValueMap([
@@ -369,7 +433,7 @@ class SqlContentEntityStorageTest extends UnitTestCase {
       ->will($this->returnValue($schema_handler));
 
     $storage = $this->getMockBuilder('Drupal\Core\Entity\Sql\SqlContentEntityStorage')
-      ->setConstructorArgs([$this->entityType, $this->connection, $this->entityManager, $this->cache, $this->languageManager])
+      ->setConstructorArgs([$this->entityType, $this->connection, $this->entityManager, $this->cache, $this->languageManager, new MemoryCache()])
       ->setMethods(['getStorageSchema'])
       ->getMock();
 
@@ -533,7 +597,7 @@ class SqlContentEntityStorageTest extends UnitTestCase {
       'uuid' => $entity_keys['uuid'],
     ];
 
-    $this->entityType->expects($this->exactly(2))
+    $this->entityType->expects($this->exactly(4))
       ->method('isRevisionable')
       ->will($this->returnValue(TRUE));
     $this->entityType->expects($this->any())
@@ -606,7 +670,7 @@ class SqlContentEntityStorageTest extends UnitTestCase {
       $field_names = array_merge($field_names, $revisionable_field_names);
       $this->fieldDefinitions += $this->mockFieldDefinitions(array_merge($revisionable_field_names, array_values($revision_metadata_field_names)), ['isRevisionable' => TRUE]);
 
-      $this->entityType->expects($this->exactly(2))
+      $this->entityType->expects($this->exactly(4))
         ->method('isRevisionable')
         ->will($this->returnValue(TRUE));
       $this->entityType->expects($this->any())
@@ -781,7 +845,7 @@ class SqlContentEntityStorageTest extends UnitTestCase {
     $revision_metadata_keys = [
       'revision_created' => 'revision_timestamp',
       'revision_user' => 'revision_uid',
-      'revision_log_message' => 'revision_log'
+      'revision_log_message' => 'revision_log',
     ];
 
     $this->entityType->expects($this->atLeastOnce())
@@ -1114,7 +1178,7 @@ class SqlContentEntityStorageTest extends UnitTestCase {
       ->method('getBaseFieldDefinitions')
       ->will($this->returnValue($this->fieldDefinitions));
 
-    $this->entityStorage = new SqlContentEntityStorage($this->entityType, $this->connection, $this->entityManager, $this->cache, $this->languageManager);
+    $this->entityStorage = new SqlContentEntityStorage($this->entityType, $this->connection, $this->entityManager, $this->cache, $this->languageManager, new MemoryCache());
   }
 
   /**
@@ -1189,11 +1253,13 @@ class SqlContentEntityStorageTest extends UnitTestCase {
       ->method('set');
 
     $entity_storage = $this->getMockBuilder('Drupal\Core\Entity\Sql\SqlContentEntityStorage')
-      ->setConstructorArgs([$this->entityType, $this->connection, $this->entityManager, $this->cache, $this->languageManager])
-      ->setMethods(['getFromStorage', 'invokeStorageLoadHook'])
+      ->setConstructorArgs([$this->entityType, $this->connection, $this->entityManager, $this->cache, $this->languageManager, new MemoryCache()])
+      ->setMethods(['getFromStorage', 'invokeStorageLoadHook', 'initTableLayout'])
       ->getMock();
     $entity_storage->method('invokeStorageLoadHook')
       ->willReturn(NULL);
+    $entity_storage->method('initTableLayout')
+      ->willReturn(NULL);
     $entity_storage->expects($this->once())
       ->method('getFromStorage')
       ->with([$id])
@@ -1241,11 +1307,13 @@ class SqlContentEntityStorageTest extends UnitTestCase {
       ->with($key, $entity, CacheBackendInterface::CACHE_PERMANENT, [$this->entityTypeId . '_values', 'entity_field_info']);
 
     $entity_storage = $this->getMockBuilder('Drupal\Core\Entity\Sql\SqlContentEntityStorage')
-      ->setConstructorArgs([$this->entityType, $this->connection, $this->entityManager, $this->cache, $this->languageManager])
-      ->setMethods(['getFromStorage', 'invokeStorageLoadHook'])
+      ->setConstructorArgs([$this->entityType, $this->connection, $this->entityManager, $this->cache, $this->languageManager, new MemoryCache()])
+      ->setMethods(['getFromStorage', 'invokeStorageLoadHook', 'initTableLayout'])
       ->getMock();
     $entity_storage->method('invokeStorageLoadHook')
       ->willReturn(NULL);
+    $entity_storage->method('initTableLayout')
+      ->willReturn(NULL);
     $entity_storage->expects($this->once())
       ->method('getFromStorage')
       ->with([$id])
@@ -1296,7 +1364,7 @@ class SqlContentEntityStorageTest extends UnitTestCase {
       ->method('getBaseFieldDefinitions')
       ->will($this->returnValue($this->fieldDefinitions));
 
-    $this->entityStorage = new SqlContentEntityStorage($this->entityType, $database, $this->entityManager, $this->cache, $this->languageManager);
+    $this->entityStorage = new SqlContentEntityStorage($this->entityType, $database, $this->entityManager, $this->cache, $this->languageManager, new MemoryCache());
 
     $result = $this->entityStorage->hasData();
 
@@ -1380,7 +1448,7 @@ class SqlContentEntityStorageTest extends UnitTestCase {
       ->method('getImplementations')
       ->will($this->returnValueMap([
         ['entity_load', []],
-        [$this->entityTypeId . '_load', []]
+        [$this->entityTypeId . '_load', []],
       ]));
 
     $this->container->set('module_handler', $this->moduleHandler);