Commit 65dc3b82 authored by catch's avatar catch
Browse files

Issue #3145076 by johnwebdev, alexpott, Sam152: [backport] MapItem base fields...

Issue #3145076 by johnwebdev, alexpott, Sam152: [backport] MapItem base fields cannot be uninstalled
parent 9e6e2e54
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -2378,8 +2378,12 @@ protected function getDedicatedTableSchema(FieldStorageDefinitionInterface $stor
      // A dedicated table only contain rows for actual field values, and no
      // rows for entities where the field is empty. Thus, we can safely
      // enforce 'not null' on the columns for the field's required properties.
      // Fields can have dynamic properties, so we need to make sure that the
      // property is statically defined.
      if (isset($properties[$column_name])) {
        $data_schema['fields'][$real_name]['not null'] = $properties[$column_name]->isRequired();
      }
    }

    // Add indexes.
    foreach ($schema['indexes'] as $index_name => $columns) {
+65 −0
Original line number Diff line number Diff line
<?php

namespace Drupal\KernelTests\Core\Field;

use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\entity_test_update\Entity\EntityTestUpdate;
use Drupal\KernelTests\Core\Entity\EntityKernelTestBase;

/**
 * Tests map base fields.
 *
 * @group Field
 */
class MapBaseFieldTest extends EntityKernelTestBase {

  /**
   * The entity definition update manager.
   *
   * @var \Drupal\Core\Entity\EntityDefinitionUpdateManagerInterface
   */
  protected $entityDefinitionUpdateManager;

  /**
   * {@inheritdoc}
   */
  public static $modules = ['entity_test_update'];

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();

    $this->entityDefinitionUpdateManager = $this->container->get('entity.definition_update_manager');

    // Install every entity type's schema that wasn't installed in the parent
    // method.
    foreach (array_diff_key($this->entityTypeManager->getDefinitions(), array_flip(['user', 'entity_test'])) as $entity_type_id => $entity_type) {
      $this->installEntitySchema($entity_type_id);
    }
  }

  /**
   * Tests uninstalling map item base field.
   */
  public function testUninstallMapItemBaseField() {
    $definitions['data_map'] = BaseFieldDefinition::create('map')
      ->setLabel(t('Data'))
      ->setRequired(TRUE);

    $this->state->set('entity_test_update.additional_base_field_definitions', $definitions);

    $this->entityDefinitionUpdateManager->installFieldStorageDefinition('data_map', 'entity_test_update', 'entity_test', $definitions['data_map']);

    $entity = EntityTestUpdate::create([
      'data_map' => [
        'key' => 'value',
      ],
    ]);
    $entity->save();

    $this->entityDefinitionUpdateManager->uninstallFieldStorageDefinition($definitions['data_map']);
  }

}