diff --git a/tests/modules/dynamic_entity_reference_entity_test/dynamic_entity_reference_entity_test.module b/tests/modules/dynamic_entity_reference_entity_test/dynamic_entity_reference_entity_test.module index e2afc59..34778a3 100644 --- a/tests/modules/dynamic_entity_reference_entity_test/dynamic_entity_reference_entity_test.module +++ b/tests/modules/dynamic_entity_reference_entity_test/dynamic_entity_reference_entity_test.module @@ -17,6 +17,7 @@ function dynamic_entity_reference_entity_test_entity_base_field_info(EntityTypeI // 'entity_test' with no data table and 'entity_test_mul' is with data table. if ($entity_type->id() == 'entity_test' || $entity_type->id() == 'entity_test_mul') { $fields['dynamic_references'] = BaseFieldDefinition::create('dynamic_entity_reference') + ->setName('dynamic_references') ->setLabel((string) new TranslatableMarkup('References')) ->setDescription((string) new TranslatableMarkup('Reference another entity.')) ->setRequired(FALSE) @@ -41,29 +42,44 @@ function dynamic_entity_reference_entity_test_entity_base_field_info(EntityTypeI ], 'entity_test_mul' => [ 'handler' => "default:entity_test_mul", - 'handler_settings' => [], + 'handler_settings' => [ + 'target_bundles' => [ + 'entity_test_mul' => 'entity_test_mul', + ], + ], ], ]); } else { $fields['dynamic_references'] - ->setSettings([ - 'exclude_entity_types' => FALSE, - 'entity_type_ids' => [ - 'entity_test' => 'entity_test', - 'entity_test_mul' => 'entity_test_mul', - ], - 'entity_test' => [ - 'handler' => "default:entity_test", - 'handler_settings' => [], - ], - 'entity_test_mul' => [ - 'handler' => "default:entity_test_mul", - 'handler_settings' => [], - ], - ]); + ->setSettings([ + 'exclude_entity_types' => FALSE, + 'entity_type_ids' => [ + 'entity_test' => 'entity_test', + 'entity_test_mul' => 'entity_test_mul', + ], + 'entity_test' => [ + 'handler' => "default:entity_test", + 'handler_settings' => [ + 'target_bundles' => [ + 'entity_test' => 'entity_test', + ], + ], + ], + 'entity_test_mul' => [ + 'handler' => "default:entity_test_mul", + 'handler_settings' => [ + 'target_bundles' => [ + 'entity_test_mul' => 'entity_test_mul', + ], + ], + ], + ]); + } + if (\Drupal::state()->get('dynamic_entity_reference_entity_test_with_two_base_fields', FALSE)) { + $fields['der'] = BaseFieldDefinition::createFromFieldStorageDefinition($fields['dynamic_references']) + ->setName('der'); } - } return $fields; diff --git a/tests/src/Kernel/DynamicEntityReferenceBaseFieldTest.php b/tests/src/Kernel/DynamicEntityReferenceBaseFieldTest.php index 2e2cee1..8b49921 100644 --- a/tests/src/Kernel/DynamicEntityReferenceBaseFieldTest.php +++ b/tests/src/Kernel/DynamicEntityReferenceBaseFieldTest.php @@ -4,6 +4,8 @@ namespace Drupal\Tests\dynamic_entity_reference\Kernel; use Drupal\config\Tests\SchemaCheckTestTrait; use Drupal\Core\Field\FieldStorageDefinitionInterface; +use Drupal\entity_test\Entity\EntityTest; +use Drupal\entity_test\Entity\EntityTestMul; use Drupal\KernelTests\Core\Entity\EntityKernelTestBase; /** @@ -202,4 +204,84 @@ class DynamicEntityReferenceBaseFieldTest extends EntityKernelTestBase { } } + /** + * Tests the der field type for referencing multiple content entities. + */ + public function testMultipleEntityReference() { + \Drupal::state()->set('dynamic_entity_reference_entity_test_cardinality', 1); + \Drupal::state()->set('dynamic_entity_reference_entity_test_exclude', ''); + \Drupal::state()->set('dynamic_entity_reference_entity_test_with_two_base_fields', TRUE); + $this->enableModules(['dynamic_entity_reference_entity_test']); + \Drupal::entityDefinitionUpdateManager()->applyUpdates(); + $this->installEntitySchema('entity_test_mul'); + + // Create some test entities which link each other. + $referenced_entity = EntityTest::create(); + $referenced_entity->save(); + $referenced_entity_mul = EntityTestMul::create(); + $referenced_entity_mul->save(); + + $entity = EntityTest::create(); + $entity->der[] = $entity->dynamic_references[] = $referenced_entity; + $entity->der[] = $entity->dynamic_references[] = $referenced_entity_mul; + $entity->save(); + + // Check references correctly for dynamic_references field. + $this->assertEquals($entity->dynamic_references[0]->target_id, $referenced_entity->id()); + $this->assertEquals($entity->dynamic_references[0]->target_type, $referenced_entity->getEntityTypeId()); + $this->assertEquals($entity->dynamic_references[0]->entity->getName(), $referenced_entity->getName()); + $this->assertEquals($entity->dynamic_references[0]->entity->id(), $referenced_entity->id()); + $this->assertEquals($entity->dynamic_references[0]->entity->uuid(), $referenced_entity->uuid()); + // Check reference correctly. + $this->assertEquals($entity->dynamic_references[1]->target_id, $referenced_entity_mul->id()); + $this->assertEquals($entity->dynamic_references[1]->target_type, $referenced_entity_mul->getEntityTypeId()); + $this->assertEquals($entity->dynamic_references[1]->entity->getName(), $referenced_entity_mul->getName()); + $this->assertEquals($entity->dynamic_references[1]->entity->id(), $referenced_entity_mul->id()); + $this->assertEquals($entity->dynamic_references[1]->entity->uuid(), $referenced_entity_mul->uuid()); + + // Check references correctly for der field. + $this->assertEquals($entity->der[0]->target_id, $referenced_entity->id()); + $this->assertEquals($entity->der[0]->target_type, $referenced_entity->getEntityTypeId()); + $this->assertEquals($entity->der[0]->entity->getName(), $referenced_entity->getName()); + $this->assertEquals($entity->der[0]->entity->id(), $referenced_entity->id()); + $this->assertEquals($entity->der[0]->entity->uuid(), $referenced_entity->uuid()); + // Check reference correctly. + $this->assertEquals($entity->der[1]->target_id, $referenced_entity_mul->id()); + $this->assertEquals($entity->der[1]->target_type, $referenced_entity_mul->getEntityTypeId()); + $this->assertEquals($entity->der[1]->entity->getName(), $referenced_entity_mul->getName()); + $this->assertEquals($entity->der[1]->entity->id(), $referenced_entity_mul->id()); + $this->assertEquals($entity->der[1]->entity->uuid(), $referenced_entity_mul->uuid()); + + $entity = EntityTestMul::create(); + $entity->der[] = $entity->dynamic_references[] = $referenced_entity; + $entity->der[] = $entity->dynamic_references[] = $referenced_entity_mul; + $entity->save(); + + // Check references correctly for dynamic_references field. + $this->assertEquals($entity->dynamic_references[0]->target_id, $referenced_entity->id()); + $this->assertEquals($entity->dynamic_references[0]->target_type, $referenced_entity->getEntityTypeId()); + $this->assertEquals($entity->dynamic_references[0]->entity->getName(), $referenced_entity->getName()); + $this->assertEquals($entity->dynamic_references[0]->entity->id(), $referenced_entity->id()); + $this->assertEquals($entity->dynamic_references[0]->entity->uuid(), $referenced_entity->uuid()); + // Check reference correctly. + $this->assertEquals($entity->dynamic_references[1]->target_id, $referenced_entity_mul->id()); + $this->assertEquals($entity->dynamic_references[1]->target_type, $referenced_entity_mul->getEntityTypeId()); + $this->assertEquals($entity->dynamic_references[1]->entity->getName(), $referenced_entity_mul->getName()); + $this->assertEquals($entity->dynamic_references[1]->entity->id(), $referenced_entity_mul->id()); + $this->assertEquals($entity->dynamic_references[1]->entity->uuid(), $referenced_entity_mul->uuid()); + + // Check references correctly for der field. + $this->assertEquals($entity->der[0]->target_id, $referenced_entity->id()); + $this->assertEquals($entity->der[0]->target_type, $referenced_entity->getEntityTypeId()); + $this->assertEquals($entity->der[0]->entity->getName(), $referenced_entity->getName()); + $this->assertEquals($entity->der[0]->entity->id(), $referenced_entity->id()); + $this->assertEquals($entity->der[0]->entity->uuid(), $referenced_entity->uuid()); + // Check reference correctly. + $this->assertEquals($entity->der[1]->target_id, $referenced_entity_mul->id()); + $this->assertEquals($entity->der[1]->target_type, $referenced_entity_mul->getEntityTypeId()); + $this->assertEquals($entity->der[1]->entity->getName(), $referenced_entity_mul->getName()); + $this->assertEquals($entity->der[1]->entity->id(), $referenced_entity_mul->id()); + $this->assertEquals($entity->der[1]->entity->uuid(), $referenced_entity_mul->uuid()); + } + }