function EntityDefinitionUpdateTest::testDefinitionEvents
Same name in other branches
- 9 core/tests/Drupal/KernelTests/Core/Entity/EntityDefinitionUpdateTest.php \Drupal\KernelTests\Core\Entity\EntityDefinitionUpdateTest::testDefinitionEvents()
- 8.9.x core/tests/Drupal/KernelTests/Core/Entity/EntityDefinitionUpdateTest.php \Drupal\KernelTests\Core\Entity\EntityDefinitionUpdateTest::testDefinitionEvents()
- 10 core/tests/Drupal/KernelTests/Core/Entity/EntityDefinitionUpdateTest.php \Drupal\KernelTests\Core\Entity\EntityDefinitionUpdateTest::testDefinitionEvents()
Tests entity type and field storage definition events.
File
-
core/
tests/ Drupal/ KernelTests/ Core/ Entity/ EntityDefinitionUpdateTest.php, line 730
Class
- EntityDefinitionUpdateTest
- Tests EntityDefinitionUpdateManager functionality.
Namespace
Drupal\KernelTests\Core\EntityCode
public function testDefinitionEvents() : void {
/** @var \Drupal\entity_test\EntityTestDefinitionSubscriber $event_subscriber */
$event_subscriber = $this->container
->get('entity_test.definition.subscriber');
$event_subscriber->enableEventTracking();
$event_subscriber->enableLiveDefinitionUpdates();
// Test field storage definition events.
$storage_definition = FieldStorageDefinition::create('string')->setName('field_storage_test')
->setLabel(new TranslatableMarkup('Field storage test'))
->setTargetEntityTypeId('entity_test_rev');
$this->assertFalse($event_subscriber->hasEventFired(FieldStorageDefinitionEvents::CREATE), 'Entity type create was not dispatched yet.');
\Drupal::service('field_storage_definition.listener')->onFieldStorageDefinitionCreate($storage_definition);
$this->assertTrue($event_subscriber->hasEventFired(FieldStorageDefinitionEvents::CREATE), 'Entity type create event successfully dispatched.');
$this->assertTrue($event_subscriber->hasDefinitionBeenUpdated(FieldStorageDefinitionEvents::CREATE), 'Last installed field storage definition was created before the event was fired.');
// Check that the newly added field can be retrieved from the live field
// storage definitions.
$field_storage_definitions = $this->entityFieldManager
->getFieldStorageDefinitions('entity_test_rev');
$this->assertArrayHasKey('field_storage_test', $field_storage_definitions);
$updated_storage_definition = clone $storage_definition;
$updated_storage_definition->setLabel(new TranslatableMarkup('Updated field storage test'));
$this->assertFalse($event_subscriber->hasEventFired(FieldStorageDefinitionEvents::UPDATE), 'Entity type update was not dispatched yet.');
\Drupal::service('field_storage_definition.listener')->onFieldStorageDefinitionUpdate($updated_storage_definition, $storage_definition);
$this->assertTrue($event_subscriber->hasEventFired(FieldStorageDefinitionEvents::UPDATE), 'Entity type update event successfully dispatched.');
$this->assertTrue($event_subscriber->hasDefinitionBeenUpdated(FieldStorageDefinitionEvents::UPDATE), 'Last installed field storage definition was updated before the event was fired.');
// Check that the updated field can be retrieved from the live field storage
// definitions.
$field_storage_definitions = $this->entityFieldManager
->getFieldStorageDefinitions('entity_test_rev');
$this->assertEquals(new TranslatableMarkup('Updated field storage test'), $field_storage_definitions['field_storage_test']->getLabel());
$this->assertFalse($event_subscriber->hasEventFired(FieldStorageDefinitionEvents::DELETE), 'Entity type delete was not dispatched yet.');
\Drupal::service('field_storage_definition.listener')->onFieldStorageDefinitionDelete($storage_definition);
$this->assertTrue($event_subscriber->hasEventFired(FieldStorageDefinitionEvents::DELETE), 'Entity type delete event successfully dispatched.');
$this->assertTrue($event_subscriber->hasDefinitionBeenUpdated(FieldStorageDefinitionEvents::DELETE), 'Last installed field storage definition was deleted before the event was fired.');
// Check that the deleted field can no longer be retrieved from the live
// field storage definitions.
$field_storage_definitions = $this->entityFieldManager
->getFieldStorageDefinitions('entity_test_rev');
$this->assertArrayNotHasKey('field_storage_test', $field_storage_definitions);
// Test entity type events.
$entity_type = $this->entityTypeManager
->getDefinition('entity_test_rev');
$this->assertFalse($event_subscriber->hasEventFired(EntityTypeEvents::CREATE), 'Entity type create was not dispatched yet.');
\Drupal::service('entity_type.listener')->onEntityTypeCreate($entity_type);
$this->assertTrue($event_subscriber->hasEventFired(EntityTypeEvents::CREATE), 'Entity type create event successfully dispatched.');
$this->assertTrue($event_subscriber->hasDefinitionBeenUpdated(EntityTypeEvents::CREATE), 'Last installed entity type definition was created before the event was fired.');
$updated_entity_type = clone $entity_type;
$updated_entity_type->set('label', new TranslatableMarkup('Updated entity test rev'));
$this->assertFalse($event_subscriber->hasEventFired(EntityTypeEvents::UPDATE), 'Entity type update was not dispatched yet.');
\Drupal::service('entity_type.listener')->onEntityTypeUpdate($updated_entity_type, $entity_type);
$this->assertTrue($event_subscriber->hasEventFired(EntityTypeEvents::UPDATE), 'Entity type update event successfully dispatched.');
$this->assertTrue($event_subscriber->hasDefinitionBeenUpdated(EntityTypeEvents::UPDATE), 'Last installed entity type definition was updated before the event was fired.');
// Check that the updated definition can be retrieved from the live entity
// type definitions.
$entity_type = $this->entityTypeManager
->getDefinition('entity_test_rev');
$this->assertEquals(new TranslatableMarkup('Updated entity test rev'), $entity_type->getLabel());
$this->assertFalse($event_subscriber->hasEventFired(EntityTypeEvents::DELETE), 'Entity type delete was not dispatched yet.');
\Drupal::service('entity_type.listener')->onEntityTypeDelete($entity_type);
$this->assertTrue($event_subscriber->hasEventFired(EntityTypeEvents::DELETE), 'Entity type delete event successfully dispatched.');
$this->assertTrue($event_subscriber->hasDefinitionBeenUpdated(EntityTypeEvents::DELETE), 'Last installed entity type definition was deleted before the event was fired.');
// Check that the deleted entity type can no longer be retrieved from the
// live entity type definitions.
$this->assertNull($this->entityTypeManager
->getDefinition('entity_test_rev', FALSE));
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.