You are here

public function FieldCrudTest::testCreateField in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/field/tests/src/Kernel/FieldCrudTest.php \Drupal\Tests\field\Kernel\FieldCrudTest::testCreateField()

Tests the creation of a field.

File

core/modules/field/tests/src/Kernel/FieldCrudTest.php, line 67

Class

FieldCrudTest
Create field entities by attaching fields to entities.

Namespace

Drupal\Tests\field\Kernel

Code

public function testCreateField() {
  $field = FieldConfig::create($this->fieldDefinition);
  $field
    ->save();
  $field = FieldConfig::load($field
    ->id());
  $this
    ->assertEquals('TRUE', $field
    ->getSetting('field_setting_from_config_data'));
  $this
    ->assertNull($field
    ->getSetting('config_data_from_field_setting'));

  // Read the configuration. Check against raw configuration data rather than
  // the loaded ConfigEntity, to be sure we check that the defaults are
  // applied on write.
  $config = $this
    ->config('field.field.' . $field
    ->id())
    ->get();
  $field_type_manager = \Drupal::service('plugin.manager.field.field_type');
  $this
    ->assertTrue($config['settings']['config_data_from_field_setting']);
  $this
    ->assertTrue(!isset($config['settings']['field_setting_from_config_data']));

  // Since we are working with raw configuration, this needs to be unset
  // manually.
  // @see Drupal\field_test\Plugin\Field\FieldType\TestItem::fieldSettingsFromConfigData()
  unset($config['settings']['config_data_from_field_setting']);

  // Check that default values are set.
  $this
    ->assertFalse($config['required'], 'Required defaults to false.');
  $this
    ->assertSame($config['label'], $this->fieldDefinition['field_name'], 'Label defaults to field name.');
  $this
    ->assertSame('', $config['description'], 'Description defaults to empty string.');

  // Check that default settings are set.
  $this
    ->assertEquals($config['settings'], $field_type_manager
    ->getDefaultFieldSettings($this->fieldStorageDefinition['type']), 'Default field settings have been written.');

  // Check that the denormalized 'field_type' was properly written.
  $this
    ->assertEquals($config['field_type'], $this->fieldStorageDefinition['type']);

  // Guarantee that the field/bundle combination is unique.
  try {
    FieldConfig::create($this->fieldDefinition)
      ->save();
    $this
      ->fail('Cannot create two fields with the same field / bundle combination.');
  } catch (EntityStorageException $e) {

    // Expected exception; just continue testing.
  }

  // Check that the specified field exists.
  try {
    $this->fieldDefinition['field_name'] = $this
      ->randomMachineName();
    FieldConfig::create($this->fieldDefinition)
      ->save();
    $this
      ->fail('Cannot create a field with a non-existing storage.');
  } catch (FieldException $e) {

    // Expected exception; just continue testing.
  }

  // TODO: test other failures.
}