You are here

public function FieldCrudTest::testFieldPropertyConstraints 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::testFieldPropertyConstraints()
  2. 10 core/modules/field/tests/src/Kernel/FieldCrudTest.php \Drupal\Tests\field\Kernel\FieldCrudTest::testFieldPropertyConstraints()

Tests setting and adding property constraints to a configurable field.

@covers ::setPropertyConstraints @covers ::addPropertyConstraints

File

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

Class

FieldCrudTest
Create field entities by attaching fields to entities.

Namespace

Drupal\Tests\field\Kernel

Code

public function testFieldPropertyConstraints() {
  $field = FieldConfig::create($this->fieldDefinition);
  $field
    ->save();
  $field_name = $this->fieldStorage
    ->getName();

  // Test that constraints are applied to configurable fields. A TestField and
  // a Range constraint are added dynamically to limit the field to values
  // between 0 and 32.
  // @see field_test_entity_bundle_field_info_alter()
  \Drupal::state()
    ->set('field_test_constraint', $field_name);

  // Clear the field definitions cache so the new constraints added by
  // field_test_entity_bundle_field_info_alter() are taken into consideration.
  \Drupal::service('entity_field.manager')
    ->clearCachedFieldDefinitions();

  // Test the newly added property constraints in the same request as when the
  // caches were cleared. This will test the field definitions that are stored
  // in the static cache of
  // \Drupal\Core\Entity\EntityFieldManager::getFieldDefinitions().
  $this
    ->doFieldPropertyConstraintsTests();

  // In order to test a real-world scenario where the property constraints are
  // only stored in the persistent cache of
  // \Drupal\Core\Entity\EntityFieldManager::getFieldDefinitions(), we need to
  // simulate a new request by removing the 'entity_field.manager' service,
  // thus forcing it to be re-initialized without static caches.
  \Drupal::getContainer()
    ->set('entity_field.manager', NULL);

  // This will test the field definitions that are stored in the persistent
  // cache by \Drupal\Core\Entity\EntityFieldManager::getFieldDefinitions().
  $this
    ->doFieldPropertyConstraintsTests();
}