Revert "Issue #3061610 by gabesullice, Wim Leers, tedbow, larowlan: Typed Data's EntityDeriver does not derive bundle-level data types when a bundle has the same name as its entity type (f.e. entity:comment:comment)"
This reverts commit 8adf90654d
.
8.7.x
parent
95c7e33b9f
commit
d04a668734
|
@ -98,12 +98,11 @@ class EntityDeriver implements ContainerDeriverInterface {
|
||||||
] + $base_plugin_definition;
|
] + $base_plugin_definition;
|
||||||
|
|
||||||
// Incorporate the bundles as entity:$entity_type:$bundle, if any.
|
// Incorporate the bundles as entity:$entity_type:$bundle, if any.
|
||||||
$bundle_info = $this->bundleInfoService->getBundleInfo($entity_type_id);
|
foreach ($this->bundleInfoService->getBundleInfo($entity_type_id) as $bundle => $bundle_info) {
|
||||||
if (count($bundle_info) > 1 || $entity_type->getKey('bundle')) {
|
if ($bundle !== $entity_type_id) {
|
||||||
foreach ($bundle_info as $bundle => $info) {
|
|
||||||
$this->derivatives[$entity_type_id . ':' . $bundle] = [
|
$this->derivatives[$entity_type_id . ':' . $bundle] = [
|
||||||
'class' => $class,
|
'class' => $class,
|
||||||
'label' => $info['label'],
|
'label' => $bundle_info['label'],
|
||||||
'constraints' => $this->derivatives[$entity_type_id]['constraints'],
|
'constraints' => $this->derivatives[$entity_type_id]['constraints'],
|
||||||
] + $base_plugin_definition;
|
] + $base_plugin_definition;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,95 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace Drupal\KernelTests\Core\Entity;
|
|
||||||
|
|
||||||
use Drupal\comment\Entity\CommentType;
|
|
||||||
use Drupal\Component\Plugin\Exception\PluginNotFoundException;
|
|
||||||
use Drupal\KernelTests\KernelTestBase;
|
|
||||||
use Drupal\node\Entity\NodeType;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests EntityDeriver functionality.
|
|
||||||
*
|
|
||||||
* @coversDefaultClass \Drupal\Core\Entity\Plugin\DataType\Deriver\EntityDeriver
|
|
||||||
*
|
|
||||||
* @group Entity
|
|
||||||
*/
|
|
||||||
class EntityDeriverTest extends KernelTestBase {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The typed data manager to use.
|
|
||||||
*
|
|
||||||
* @var \Drupal\Core\TypedData\TypedDataManagerInterface
|
|
||||||
*/
|
|
||||||
protected $typedDataManager;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public static $modules = [
|
|
||||||
'system',
|
|
||||||
'field',
|
|
||||||
'user',
|
|
||||||
'node',
|
|
||||||
'comment',
|
|
||||||
'entity_test',
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
protected function setUp() {
|
|
||||||
parent::setup();
|
|
||||||
|
|
||||||
$this->installEntitySchema('comment');
|
|
||||||
NodeType::create(['type' => 'article', 'name' => 'Article'])->save();
|
|
||||||
CommentType::create([
|
|
||||||
'id' => 'comment',
|
|
||||||
'name' => 'Default comment',
|
|
||||||
'target_entity_type_id' => 'node',
|
|
||||||
])->save();
|
|
||||||
entity_test_create_bundle('foo', NULL, 'entity_test_no_bundle');
|
|
||||||
entity_test_create_bundle('entity_test_no_bundle', NULL, 'entity_test_no_bundle');
|
|
||||||
$this->typedDataManager = $this->container->get('typed_data_manager');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests that types are derived for entity types with and without bundles.
|
|
||||||
*
|
|
||||||
* @dataProvider derivativesProvider
|
|
||||||
*/
|
|
||||||
public function testDerivatives($data_type, $expect_exception) {
|
|
||||||
if ($expect_exception) {
|
|
||||||
$this->expectException(PluginNotFoundException::class);
|
|
||||||
}
|
|
||||||
$this->typedDataManager->createDataDefinition($data_type);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides test data for ::testDerivatives().
|
|
||||||
*/
|
|
||||||
public function derivativesProvider() {
|
|
||||||
return [
|
|
||||||
'unbundleable entity type with no bundle type' => ['entity:user', FALSE],
|
|
||||||
'unbundleable entity type with bundle type' => ['entity:user:user', TRUE],
|
|
||||||
'bundleable entity type with no bundle type' => ['entity:node', FALSE],
|
|
||||||
'bundleable entity type with bundle type' => [
|
|
||||||
'entity:node:article',
|
|
||||||
FALSE,
|
|
||||||
],
|
|
||||||
'bundleable entity type with bundle type with matching name' => [
|
|
||||||
'entity:comment:comment',
|
|
||||||
FALSE,
|
|
||||||
],
|
|
||||||
'unbundleable entity type with entity_test_entity_bundle_info()-generated bundle type' => [
|
|
||||||
'entity:entity_test_no_bundle:foo',
|
|
||||||
FALSE,
|
|
||||||
],
|
|
||||||
'unbundleable entity type with entity_test_entity_bundle_info()-generated bundle type with matching name' => [
|
|
||||||
'entity:entity_test_no_bundle:entity_test_no_bundle',
|
|
||||||
FALSE,
|
|
||||||
],
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -151,7 +151,6 @@ class EntityTypedDataDefinitionTest extends KernelTestBase {
|
||||||
|
|
||||||
$entity_type = $this->prophesize(EntityTypeInterface::class);
|
$entity_type = $this->prophesize(EntityTypeInterface::class);
|
||||||
$entity_type->entityClassImplements(ConfigEntityInterface::class)->willReturn(FALSE);
|
$entity_type->entityClassImplements(ConfigEntityInterface::class)->willReturn(FALSE);
|
||||||
$entity_type->getKey('bundle')->willReturn(FALSE);
|
|
||||||
$entity_type->getLabel()->willReturn($this->randomString());
|
$entity_type->getLabel()->willReturn($this->randomString());
|
||||||
$entity_type->getConstraints()->willReturn([]);
|
$entity_type->getConstraints()->willReturn([]);
|
||||||
$entity_type->isInternal()->willReturn($internal);
|
$entity_type->isInternal()->willReturn($internal);
|
||||||
|
|
Loading…
Reference in New Issue