From 592346a1bcc94aa8d0fe477365ed992e0ad7aa71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jens=20K=C3=B6cke?= Date: Fri, 13 Nov 2020 12:47:03 +0100 Subject: [PATCH 1/3] Use last entity when multiple candidates for requiredEntity are found. This enables to overwrite a requiredEntity in an extended entity. --- .../DataGenerator/Persist/OperationDataArrayResolver.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Magento/FunctionalTestingFramework/DataGenerator/Persist/OperationDataArrayResolver.php b/src/Magento/FunctionalTestingFramework/DataGenerator/Persist/OperationDataArrayResolver.php index 60b6e73c2..e4dc5f267 100644 --- a/src/Magento/FunctionalTestingFramework/DataGenerator/Persist/OperationDataArrayResolver.php +++ b/src/Magento/FunctionalTestingFramework/DataGenerator/Persist/OperationDataArrayResolver.php @@ -245,10 +245,11 @@ private function getDependentEntitiesOfType($type) private function resolveOperationObjectAndEntityData($entityObject, $operationElementValue) { if ($operationElementValue != $entityObject->getType()) { - // if we have a mismatch attempt to retrieve linked data and return just the first linkage + // if we have a mismatch attempt to retrieve linked data and return just the last linkage + // this enables overwriting of required entity fields $linkName = $entityObject->getLinkedEntitiesOfType($operationElementValue); if (!empty($linkName)) { - $linkName = $linkName[0]; + $linkName = array_pop($linkName); return DataObjectHandler::getInstance()->getObject($linkName); } return null; From ee3811af8b9ea9b2ea4a3da86fef2b7cdf9a730c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jens=20K=C3=B6cke?= Date: Wed, 25 Nov 2020 13:50:01 +0100 Subject: [PATCH 2/3] Add unit test --- .../OperationDataArrayResolverTest.php | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Persist/OperationDataArrayResolverTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Persist/OperationDataArrayResolverTest.php index 3596edd98..e13447c51 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Persist/OperationDataArrayResolverTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Persist/OperationDataArrayResolverTest.php @@ -477,6 +477,57 @@ public function testNestedMetadataArrayOfDiverseObjects() $this->assertEquals($expectedResult, $result); } + + public function testExtendedWithRequiredEntity() + { + $entityDataObjectBuilder = new EntityDataObjectBuilder(); + $extEntityDataObject = $entityDataObjectBuilder + ->withName("extEntity") + ->withType("entity") + ->withLinkedEntities(["baseSubentity" => "subentity","extSubentity" => "subentity"]) + ->build(); + + $mockDOHInstance = AspectMock::double(DataObjectHandler::class, ["getObject" => function ($name) { + $entityDataObjectBuilder = new EntityDataObjectBuilder(); + + if ($name == "baseSubentity") { + return $entityDataObjectBuilder + ->withName("baseSubentity") + ->withType("subentity") + ->withDataFields(["subtest" => "BaseSubtest"]) + ->build(); + } + + if ($name == "extSubentity") { + return $entityDataObjectBuilder + ->withName("extSubentity") + ->withType("subentity") + ->withDataFields(["subtest" => "ExtSubtest"]) + ->build(); + } + }])->make(); + AspectMock::double(DataObjectHandler::class, ['getInstance' => $mockDOHInstance]); + + $subentityOpElementBuilder = new OperationElementBuilder(); + $subentityOpElement = $subentityOpElementBuilder + ->withKey("sub") + ->withType("subentity") + ->withElementType("object") + ->withFields(["subtest" => "string"]) + ->build(); + + $operationResolver = new OperationDataArrayResolver(); + $result = $operationResolver->resolveOperationDataArray($extEntityDataObject,[$subentityOpElement], "create", false); + + $expected = [ + "sub" => [ + "subtest" => "ExtSubtest" + ] + ]; + + $this->assertEquals($expected, $result); + + } /** * After class functionality * @return void From ae7ae3cc8dc8eef49b2051720f831257c5bb2d7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jens=20K=C3=B6cke?= Date: Wed, 25 Nov 2020 13:58:46 +0100 Subject: [PATCH 3/3] Fix code sniffer errors --- .../Persist/OperationDataArrayResolverTest.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Persist/OperationDataArrayResolverTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Persist/OperationDataArrayResolverTest.php index e13447c51..2721bd266 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Persist/OperationDataArrayResolverTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Persist/OperationDataArrayResolverTest.php @@ -477,7 +477,6 @@ public function testNestedMetadataArrayOfDiverseObjects() $this->assertEquals($expectedResult, $result); } - public function testExtendedWithRequiredEntity() { $entityDataObjectBuilder = new EntityDataObjectBuilder(); @@ -517,7 +516,12 @@ public function testExtendedWithRequiredEntity() ->build(); $operationResolver = new OperationDataArrayResolver(); - $result = $operationResolver->resolveOperationDataArray($extEntityDataObject,[$subentityOpElement], "create", false); + $result = $operationResolver->resolveOperationDataArray( + $extEntityDataObject, + [$subentityOpElement], + "create", + false + ); $expected = [ "sub" => [ @@ -526,7 +530,6 @@ public function testExtendedWithRequiredEntity() ]; $this->assertEquals($expected, $result); - } /** * After class functionality