function EntityHasFieldConstraintValidatorTest::testValidation

Same name and namespace in other branches
  1. 9 core/tests/Drupal/KernelTests/Core/Entity/EntityHasFieldConstraintValidatorTest.php \Drupal\KernelTests\Core\Entity\EntityHasFieldConstraintValidatorTest::testValidation()
  2. 8.9.x core/tests/Drupal/KernelTests/Core/Entity/EntityHasFieldConstraintValidatorTest.php \Drupal\KernelTests\Core\Entity\EntityHasFieldConstraintValidatorTest::testValidation()
  3. 11.x core/tests/Drupal/KernelTests/Core/Entity/EntityHasFieldConstraintValidatorTest.php \Drupal\KernelTests\Core\Entity\EntityHasFieldConstraintValidatorTest::testValidation()

File

core/tests/Drupal/KernelTests/Core/Entity/EntityHasFieldConstraintValidatorTest.php, line 31

Class

EntityHasFieldConstraintValidatorTest
@covers \Drupal\Core\Entity\Plugin\Validation\Constraint\EntityHasFieldConstraintValidator[[api-linebreak]]

Namespace

Drupal\KernelTests\Core\Entity

Code

public function testValidation() : void {
  $this->state
    ->set('entity_test_constraints.build', [
    'EntityHasField' => 'body',
  ]);
  /** @var \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager */
  $entity_type_manager = $this->container
    ->get('entity_type.manager');
  $entity_type_manager->clearCachedDefinitions();
  // Clear the typed data cache so that the entity has the correct constraints
  // during validation.
  $this->container
    ->get('typed_data_manager')
    ->clearCachedDefinitions();
  $storage = $entity_type_manager->getStorage('entity_test_constraints');
  /** @var \Drupal\entity_test\Entity\EntityTestConstraints $entity */
  $entity = $storage->create();
  // We should get a violation if we try to validate the entity before the
  // field has been created.
  $violations = $entity->validate();
  $this->assertCount(1, $violations);
  $this->assertEquals('The entity must have the body field.', $violations[0]->getMessage());
  $storage->save($entity);
  // Create the field.
  $field_storage = FieldStorageConfig::create([
    'type' => 'string',
    'entity_type' => $entity->getEntityTypeId(),
    'field_name' => 'body',
  ]);
  $field_storage->save();
  FieldConfig::create([
    'field_storage' => $field_storage,
    'bundle' => $entity->bundle(),
  ])
    ->save();
  // Now that the field has been created, there should be no violations.
  $this->assertCount(0, $storage->loadUnchanged(1)
    ->validate());
}

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