function SqlContentEntityStorageSchemaTest::testOnFieldStorageDefinitionUpdateShared

Same name in other branches
  1. 9 core/tests/Drupal/KernelTests/Core/Entity/Sql/SqlContentEntityStorageSchemaTest.php \Drupal\KernelTests\Core\Entity\Sql\SqlContentEntityStorageSchemaTest::testOnFieldStorageDefinitionUpdateShared()
  2. 8.9.x core/tests/Drupal/KernelTests/Core/Entity/Sql/SqlContentEntityStorageSchemaTest.php \Drupal\KernelTests\Core\Entity\Sql\SqlContentEntityStorageSchemaTest::testOnFieldStorageDefinitionUpdateShared()
  3. 11.x core/tests/Drupal/KernelTests/Core/Entity/Sql/SqlContentEntityStorageSchemaTest.php \Drupal\KernelTests\Core\Entity\Sql\SqlContentEntityStorageSchemaTest::testOnFieldStorageDefinitionUpdateShared()

Tests updating a shared table field definition.

File

core/tests/Drupal/KernelTests/Core/Entity/Sql/SqlContentEntityStorageSchemaTest.php, line 44

Class

SqlContentEntityStorageSchemaTest
@group Entity

Namespace

Drupal\KernelTests\Core\Entity\Sql

Code

public function testOnFieldStorageDefinitionUpdateShared() : void {
    // Install the test entity type with an additional field. Use a multi-column
    // field so that field name and column name(s) do not match.
    $field = BaseFieldDefinition::create('shape')->setSetting('foreign_key_name', NULL)
        ->setName('shape')
        ->setProvider('entity_test');
    $this->state
        ->set('entity_test.additional_base_field_definitions', [
        'shape' => $field,
    ]);
    $this->entityDefinitionUpdateManager
        ->installFieldStorageDefinition('shape', 'entity_test', 'entity_test', $field);
    // Make sure the field is not marked as NOT NULL initially.
    $expected = [
        'entity_test' => [
            'fields' => [
                'shape__shape' => [
                    'type' => 'varchar',
                    'length' => 32,
                    'not null' => FALSE,
                ],
                'shape__color' => [
                    'type' => 'varchar',
                    'length' => 32,
                    'not null' => FALSE,
                ],
            ],
        ],
    ];
    $actual = $this->installedStorageSchema
        ->get('entity_test.field_schema_data.shape');
    $this->assertSame($expected, $actual);
    // Make the field an entity key, so that it will get marked as NOT NULL.
    $entity_type = $this->entityDefinitionUpdateManager
        ->getEntityType('entity_test');
    $original_keys = $entity_type->getKeys();
    $entity_type->set('entity_keys', $original_keys + [
        'shape' => 'shape',
    ]);
    $this->entityDefinitionUpdateManager
        ->updateEntityType($entity_type);
    // Update the field and make sure the schema got updated.
    $this->entityDefinitionUpdateManager
        ->updateFieldStorageDefinition($field);
    $expected['entity_test']['fields']['shape__shape']['not null'] = TRUE;
    $expected['entity_test']['fields']['shape__color']['not null'] = TRUE;
    $actual = $this->installedStorageSchema
        ->get('entity_test.field_schema_data.shape');
    $this->assertSame($expected, $actual);
    // Remove the entity key again and check that the schema got reverted.
    $entity_type->set('entity_keys', $original_keys);
    $this->entityDefinitionUpdateManager
        ->updateEntityType($entity_type);
    $this->entityDefinitionUpdateManager
        ->updateFieldStorageDefinition($field);
    $expected['entity_test']['fields']['shape__shape']['not null'] = FALSE;
    $expected['entity_test']['fields']['shape__color']['not null'] = FALSE;
    $actual = $this->installedStorageSchema
        ->get('entity_test.field_schema_data.shape');
    $this->assertSame($expected, $actual);
    // Now add an entity and repeat the process.
    $entity_storage = $this->entityTypeManager
        ->getStorage('entity_test');
    $entity_storage->create([
        'shape' => [
            'shape' => 'rectangle',
            'color' => 'pink',
        ],
    ])
        ->save();
    $entity_type->set('entity_keys', $original_keys + [
        'shape' => 'shape',
    ]);
    $this->entityDefinitionUpdateManager
        ->updateEntityType($entity_type);
    $this->entityDefinitionUpdateManager
        ->updateFieldStorageDefinition($field);
    $expected['entity_test']['fields']['shape__shape']['not null'] = TRUE;
    $expected['entity_test']['fields']['shape__color']['not null'] = TRUE;
    $actual = $this->installedStorageSchema
        ->get('entity_test.field_schema_data.shape');
    $this->assertSame($expected, $actual);
    $entity_type->set('entity_keys', $original_keys);
    $this->entityDefinitionUpdateManager
        ->updateEntityType($entity_type);
    $this->entityDefinitionUpdateManager
        ->updateFieldStorageDefinition($field);
    $expected['entity_test']['fields']['shape__shape']['not null'] = FALSE;
    $expected['entity_test']['fields']['shape__color']['not null'] = FALSE;
    $actual = $this->installedStorageSchema
        ->get('entity_test.field_schema_data.shape');
    $this->assertSame($expected, $actual);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.