Verified Commit d04a6687 authored by Lee Rowlands's avatar Lee Rowlands
Browse files

Revert "Issue #3061610 by gabesullice, Wim Leers, tedbow, larowlan: Typed...

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 8adf9065.
parent 95c7e33b
Loading
Loading
Loading
Loading
+3 −4
Changes for core/lib/Drupal/Core/Entity/Plugin/DataType/Deriver/EntityDeriver.php: 3 added lines, 4 removed lines.
Original line number Diff line number Diff line
@@ -98,12 +98,11 @@ public function getDerivativeDefinitions($base_plugin_definition) {
      ] + $base_plugin_definition;

      // Incorporate the bundles as entity:$entity_type:$bundle, if any.
      $bundle_info = $this->bundleInfoService->getBundleInfo($entity_type_id);
      if (count($bundle_info) > 1 || $entity_type->getKey('bundle')) {
        foreach ($bundle_info as $bundle => $info) {
      foreach ($this->bundleInfoService->getBundleInfo($entity_type_id) as $bundle => $bundle_info) {
        if ($bundle !== $entity_type_id) {
          $this->derivatives[$entity_type_id . ':' . $bundle] = [
            'class' => $class,
            'label' => $info['label'],
            'label' => $bundle_info['label'],
            'constraints' => $this->derivatives[$entity_type_id]['constraints'],
          ] + $base_plugin_definition;
        }
+0 −95
Changes for core/tests/Drupal/KernelTests/Core/Entity/EntityDeriverTest.php: 0 added lines, 95 removed lines.
Original line number Diff line number Diff line
<?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,
      ],
    ];
  }

}
+0 −1
Changes for core/tests/Drupal/KernelTests/Core/Entity/EntityTypedDataDefinitionTest.php: 0 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -151,7 +151,6 @@ public function testEntityDefinitionIsInternal($internal, $expected) {

    $entity_type = $this->prophesize(EntityTypeInterface::class);
    $entity_type->entityClassImplements(ConfigEntityInterface::class)->willReturn(FALSE);
    $entity_type->getKey('bundle')->willReturn(FALSE);
    $entity_type->getLabel()->willReturn($this->randomString());
    $entity_type->getConstraints()->willReturn([]);
    $entity_type->isInternal()->willReturn($internal);