FieldImportCreateTest.php

Same filename and directory in other branches
  1. 9 core/modules/field/tests/src/Kernel/FieldImportCreateTest.php
  2. 8.9.x core/modules/field/tests/src/Kernel/FieldImportCreateTest.php
  3. 10 core/modules/field/tests/src/Kernel/FieldImportCreateTest.php

Namespace

Drupal\Tests\field\Kernel

File

core/modules/field/tests/src/Kernel/FieldImportCreateTest.php

View source
<?php

declare (strict_types=1);
namespace Drupal\Tests\field\Kernel;

use Drupal\Core\Site\Settings;
use Drupal\field\Entity\FieldConfig;
use Drupal\field\Entity\FieldStorageConfig;

/**
 * Create field storages and fields during config create method invocation.
 *
 * @group field
 */
class FieldImportCreateTest extends FieldKernelTestBase {
    
    /**
     * Tests creating field storages and fields during default config import.
     */
    public function testImportCreateDefault() : void {
        $field_name = 'field_test_import';
        $field_storage_id = "entity_test.{$field_name}";
        $field_id = "entity_test.entity_test.{$field_name}";
        $field_name_2 = 'field_test_import_2';
        $field_storage_id_2 = "entity_test.{$field_name_2}";
        $field_id_2a = "entity_test.entity_test.{$field_name_2}";
        $field_id_2b = "entity_test.test_bundle.{$field_name_2}";
        // Check that the field storages and fields do not exist yet.
        $this->assertNull(FieldStorageConfig::load($field_storage_id));
        $this->assertNull(FieldConfig::load($field_id));
        $this->assertNull(FieldStorageConfig::load($field_storage_id_2));
        $this->assertNull(FieldConfig::load($field_id_2a));
        $this->assertNull(FieldConfig::load($field_id_2b));
        // Create a second bundle for the 'Entity test' entity type.
        entity_test_create_bundle('test_bundle');
        // Enable field_test_config module and check that the field and storage
        // shipped in the module's default config were created.
        \Drupal::service('module_installer')->install([
            'field_test_config',
        ]);
        // A field storage with one single field.
        $field_storage = FieldStorageConfig::load($field_storage_id);
        $this->assertNotEmpty($field_storage, 'The field was created.');
        $field = FieldConfig::load($field_id);
        $this->assertNotEmpty($field, 'The field was deleted.');
        // A field storage with two fields.
        $field_storage_2 = FieldStorageConfig::load($field_storage_id_2);
        $this->assertNotEmpty($field_storage_2, 'The second field was created.');
        $field2a = FieldConfig::load($field_id_2a);
        $this->assertEquals('entity_test', $field2a->getTargetBundle(), 'The second field was created on bundle entity_test.');
        $field2b = FieldConfig::load($field_id_2b);
        $this->assertEquals('test_bundle', $field2b->getTargetBundle(), 'The second field was created on bundle test_bundle.');
        // Tests fields.
        $ids = \Drupal::entityQuery('field_config')->condition('entity_type', 'entity_test')
            ->condition('bundle', 'entity_test')
            ->execute();
        $this->assertCount(2, $ids);
        $this->assertTrue(isset($ids['entity_test.entity_test.field_test_import']));
        $this->assertTrue(isset($ids['entity_test.entity_test.field_test_import_2']));
        $ids = \Drupal::entityQuery('field_config')->condition('entity_type', 'entity_test')
            ->condition('bundle', 'test_bundle')
            ->execute();
        $this->assertCount(1, $ids);
        $this->assertTrue(isset($ids['entity_test.test_bundle.field_test_import_2']));
    }
    
    /**
     * Tests creating field storages and fields during config import.
     */
    public function testImportCreate() : void {
        // A field storage with one single field.
        $field_name = 'field_test_import_sync';
        $field_storage_id = "entity_test.{$field_name}";
        $field_id = "entity_test.entity_test.{$field_name}";
        $field_storage_config_name = "field.storage.{$field_storage_id}";
        $field_config_name = "field.field.{$field_id}";
        // A field storage with two fields.
        $field_name_2 = 'field_test_import_sync_2';
        $field_storage_id_2 = "entity_test.{$field_name_2}";
        $field_id_2a = "entity_test.test_bundle.{$field_name_2}";
        $field_id_2b = "entity_test.test_bundle_2.{$field_name_2}";
        $field_storage_config_name_2 = "field.storage.{$field_storage_id_2}";
        $field_config_name_2a = "field.field.{$field_id_2a}";
        $field_config_name_2b = "field.field.{$field_id_2b}";
        $active = $this->container
            ->get('config.storage');
        $sync = $this->container
            ->get('config.storage.sync');
        $this->copyConfig($active, $sync);
        // Add the new files to the sync directory.
        $src_dir = __DIR__ . '/../../modules/field_test_config/sync';
        $target_dir = Settings::get('config_sync_directory');
        
        /** @var \Drupal\Core\File\FileSystemInterface $file_system */
        $file_system = \Drupal::service('file_system');
        $this->assertNotFalse($file_system->copy("{$src_dir}/{$field_storage_config_name}.yml", "{$target_dir}/{$field_storage_config_name}.yml"));
        $this->assertNotFalse($file_system->copy("{$src_dir}/{$field_config_name}.yml", "{$target_dir}/{$field_config_name}.yml"));
        $this->assertNotFalse($file_system->copy("{$src_dir}/{$field_storage_config_name_2}.yml", "{$target_dir}/{$field_storage_config_name_2}.yml"));
        $this->assertNotFalse($file_system->copy("{$src_dir}/{$field_config_name_2a}.yml", "{$target_dir}/{$field_config_name_2a}.yml"));
        $this->assertNotFalse($file_system->copy("{$src_dir}/{$field_config_name_2b}.yml", "{$target_dir}/{$field_config_name_2b}.yml"));
        // Import the content of the sync directory.
        $this->configImporter()
            ->import();
        // Check that the field and storage were created.
        $field_storage = FieldStorageConfig::load($field_storage_id);
        $this->assertNotEmpty($field_storage, 'Test import storage field from sync exists');
        $field = FieldConfig::load($field_id);
        $this->assertNotEmpty($field, 'Test import field  from sync exists');
        $field_storage = FieldStorageConfig::load($field_storage_id_2);
        $this->assertNotEmpty($field_storage, 'Test import storage field 2 from sync exists');
        $field = FieldConfig::load($field_id_2a);
        $this->assertNotEmpty($field, 'Test import field 2a from sync exists');
        $field = FieldConfig::load($field_id_2b);
        $this->assertNotEmpty($field, 'Test import field 2b from sync exists');
    }

}

Classes

Title Deprecated Summary
FieldImportCreateTest Create field storages and fields during config create method invocation.

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