diff --git a/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/ValidReferenceConstraintValidator.php b/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/ValidReferenceConstraintValidator.php index aef9fb0018..89126ec28f 100644 --- a/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/ValidReferenceConstraintValidator.php +++ b/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/ValidReferenceConstraintValidator.php @@ -124,7 +124,7 @@ public function validate($value, Constraint $constraint) { // Get a list of pre-existing references. $previously_referenced_ids = []; if ($value->getParent() && ($entity = $value->getEntity()) && !$entity->isNew()) { - $existing_entity = $this->entityTypeManager->getStorage($entity->getEntityTypeId())->loadUnchanged($entity->id()); + $existing_entity = $this->entityTypeManager->getStorage($entity->getEntityTypeId())->loadUnchanged($entity->id()) ?: $entity; foreach ($existing_entity->{$value->getFieldDefinition()->getName()}->getValue() as $item) { $previously_referenced_ids[$item['target_id']] = $item['target_id']; } diff --git a/core/tests/Drupal/KernelTests/Core/Plugin/ContextDefinitionTest.php b/core/tests/Drupal/KernelTests/Core/Plugin/ContextDefinitionTest.php index 842f76b456..9018d8177b 100644 --- a/core/tests/Drupal/KernelTests/Core/Plugin/ContextDefinitionTest.php +++ b/core/tests/Drupal/KernelTests/Core/Plugin/ContextDefinitionTest.php @@ -6,6 +6,7 @@ use Drupal\Core\Plugin\Context\EntityContext; use Drupal\entity_test\Entity\EntityTest; use Drupal\KernelTests\KernelTestBase; +use Drupal\user\Entity\User; /** * @coversDefaultClass \Drupal\Core\Plugin\Context\ContextDefinition @@ -16,14 +17,23 @@ class ContextDefinitionTest extends KernelTestBase { /** * {@inheritdoc} */ - public static $modules = ['entity_test', 'user']; + protected static $modules = ['system', 'entity_test', 'user']; + + /** + * {@inheritdoc} + */ + protected function setUp() { + parent::setUp(); + + $this->installSchema('system', ['sequences']); + $this->installEntitySchema('user'); + $this->installEntitySchema('entity_test'); + } /** * @covers ::isSatisfiedBy */ public function testIsSatisfiedBy() { - $this->installEntitySchema('user'); - $value = EntityTest::create([]); // Assert that the entity has at least one violation. $this->assertNotEmpty($value->validate()); @@ -34,4 +44,23 @@ public function testIsSatisfiedBy() { $this->assertTrue($requirement->isSatisfiedBy($context)); } + /** + * Tests creating a context definition of a deleted entity. + */ + public function testDelete() { + User::create(['name' => $this->randomString()])->save(); + + $value = EntityTest::create([]); + $value->save(); + + // Assert that the requirements are satisfied before and after deletion. + $requirement = new ContextDefinition('any'); + $context = EntityContext::fromEntity($value); + $this->assertTrue($requirement->isSatisfiedBy($context)); + + $value->delete(); + $context = EntityContext::fromEntity($value); + $this->assertTrue($requirement->isSatisfiedBy($context)); + } + }