From 01875f452ecbe9889eafeff8ac35d163a60d9b38 Mon Sep 17 00:00:00 2001 From: Alexey Korepov <28830-murz@users.noreply.drupalcode.org> Date: Wed, 13 Sep 2023 05:50:35 +0000 Subject: [PATCH] Issue #3386688 by maksim_matuzka: Add support for entities with bundles but without bundle_entity_type, like MenuLinkContent --- src/StubFactory/EntityStubFactory.php | 7 ++- .../StubFactory/EntityStubFactoryTest.php | 43 +++++++++++-------- 2 files changed, 31 insertions(+), 19 deletions(-) diff --git a/src/StubFactory/EntityStubFactory.php b/src/StubFactory/EntityStubFactory.php index 93743064..37c8de79 100644 --- a/src/StubFactory/EntityStubFactory.php +++ b/src/StubFactory/EntityStubFactory.php @@ -95,9 +95,12 @@ class EntityStubFactory { $entityTypeId = $storage->getEntityTypeId(); $bundleKey = $entityTypeDefinition->getKey('bundle'); - if ($bundleKey && ($values[$bundleKey] ?? NULL)) { + if ( + $bundleKey + && isset($values[$bundleKey]) + && $bundleEntityType = $entityTypeDefinition->getBundleEntityType() + ) { $bundle = self::getFieldPlainValue($values[$bundleKey]); - $bundleEntityType = $entityTypeDefinition->getBundleEntityType(); $bundleStorage = $entityTypeManager->getStorage($bundleEntityType); if (!$bundleEntity = $bundleStorage->load($bundle)) { $idKey = $bundleStorage->getEntityType()->getKey('id'); diff --git a/tests/src/Unit/StubFactory/EntityStubFactoryTest.php b/tests/src/Unit/StubFactory/EntityStubFactoryTest.php index 90bc5478..3cf36bad 100644 --- a/tests/src/Unit/StubFactory/EntityStubFactoryTest.php +++ b/tests/src/Unit/StubFactory/EntityStubFactoryTest.php @@ -2,11 +2,11 @@ namespace Drupal\Tests\test_helpers\Unit\Stubs; -use Drupal\Core\Entity\EntityBundleListener; use Drupal\field\Entity\FieldStorageConfig; use Drupal\field\FieldStorageConfigStorage; use Drupal\media\Entity\Media; use Drupal\media\Entity\MediaType; +use Drupal\menu_link_content\Entity\MenuLinkContent; use Drupal\node\Entity\Node; use Drupal\node\Entity\NodeType; use Drupal\taxonomy\Entity\Term; @@ -143,25 +143,34 @@ class EntityStubFactoryTest extends UnitTestCase { } /** - * Tests config entities. + * Tests MenuLinkContent entities. */ - public function testConfigEntities() { - TestHelpers::service('entity_bundle.listener', $this->createMock(EntityBundleListener::class)); - - $nodeType1 = TestHelpers::createEntity(NodeType::class, [ - 'type' => 'article', - 'name' => 'Article', + public function testMenuLinkContentEntities() { + TestHelpers::service('plugin.manager.menu.link'); + $e1 = TestHelpers::createEntity('menu_link_content', [ + 'title' => 'Menu Item 1', + 'bundle' => 'bundle1', + 'menu_name' => 'menu1', + 'link' => [ + 'uri' => 'route:<nolink>', + ], ]); - $nodeType1->save(); - $nodeType2 = TestHelpers::saveEntity(NodeType::class, [ - 'type' => 'page', - 'name' => 'Basic page', + $e1->save(); + $e2 = TestHelpers::saveEntity(MenuLinkContent::class, [ + 'title' => 'Menu Item 2', + 'menu_name' => 'menu2', + 'link' => [ + 'title' => 'External link', + 'uri' => 'http://example.com/page1', + ], ]); - $storage = \Drupal::service('entity_type.manager')->getStorage('node_type'); - $nodeType1Loaded = $storage->load('article'); - $this->assertEquals($nodeType1->id(), $nodeType1Loaded->id()); - $nodeType2Loaded = $storage->load('page'); - $this->assertEquals($nodeType2->get('name'), $nodeType2Loaded->get('name')); + $storage = \Drupal::service('entity_type.manager')->getStorage('menu_link_content'); + $entitiesIds = $storage->getQuery()->execute(); + $this->assertEquals([1 => '1', 2 => '2'], $entitiesIds); + $entities = $storage->loadMultiple(); + $this->assertCount(2, $entities); + $this->assertEquals($e1->title->value, $entities[1]->title->value); + $this->assertEquals($e2->link->uri, $entities[2]->link->uri); } /** -- GitLab