From b3bd18b831a9420b8a9a29aabba8002edd85973b Mon Sep 17 00:00:00 2001 From: aljcalandra Date: Wed, 16 May 2018 13:29:53 -0500 Subject: [PATCH 1/6] MQE-231: Allow data to extend other data - Added simple test and adjusted so data could extend other data --- .../Resources/ExtendedParameterArrayTest.txt | 38 ++++++++++ .../TestModule/Data/ParameterArrayData.xml | 4 + .../TestModule/Test/ParameterArrayTest.xml | 6 ++ .../verification/Tests/ParameterArrayTest.php | 11 +++ .../Handlers/DataObjectHandler.php | 35 ++++++++- .../Objects/EntityDataObject.php | 21 ++++- .../DataGenerator/Util/DataExtensionUtil.php | 76 +++++++++++++++++++ .../Util/OperationElementExtractor.php | 9 ++- .../DataGenerator/etc/dataProfileSchema.xsd | 7 ++ 9 files changed, 201 insertions(+), 6 deletions(-) create mode 100644 dev/tests/verification/Resources/ExtendedParameterArrayTest.txt create mode 100644 src/Magento/FunctionalTestingFramework/DataGenerator/Util/DataExtensionUtil.php diff --git a/dev/tests/verification/Resources/ExtendedParameterArrayTest.txt b/dev/tests/verification/Resources/ExtendedParameterArrayTest.txt new file mode 100644 index 000000000..3c5e284eb --- /dev/null +++ b/dev/tests/verification/Resources/ExtendedParameterArrayTest.txt @@ -0,0 +1,38 @@ +amGoingTo("create entity that has the stepKey: simpleDataKey"); + $testExtendSimpleParamData = DataObjectHandler::getInstance()->getObject("testExtendSimpleParamData"); + $simpleDataKey = new DataPersistenceHandler($testExtendSimpleParamData, []); + $simpleDataKey->createEntity(); + $I->searchAndMultiSelectOption("#selector", ["otherName"]); + $I->searchAndMultiSelectOption("#selector", ["extendName"]); + } +} diff --git a/dev/tests/verification/TestModule/Data/ParameterArrayData.xml b/dev/tests/verification/TestModule/Data/ParameterArrayData.xml index 3b45aedf7..58e0866c6 100644 --- a/dev/tests/verification/TestModule/Data/ParameterArrayData.xml +++ b/dev/tests/verification/TestModule/Data/ParameterArrayData.xml @@ -18,4 +18,8 @@ originalValue originalValue3 + + otherName + extendName + diff --git a/dev/tests/verification/TestModule/Test/ParameterArrayTest.xml b/dev/tests/verification/TestModule/Test/ParameterArrayTest.xml index 2d91671cb..857f91040 100644 --- a/dev/tests/verification/TestModule/Test/ParameterArrayTest.xml +++ b/dev/tests/verification/TestModule/Test/ParameterArrayTest.xml @@ -28,4 +28,10 @@ + + + + + + diff --git a/dev/tests/verification/Tests/ParameterArrayTest.php b/dev/tests/verification/Tests/ParameterArrayTest.php index c65027d42..be01ff6c5 100644 --- a/dev/tests/verification/Tests/ParameterArrayTest.php +++ b/dev/tests/verification/Tests/ParameterArrayTest.php @@ -19,4 +19,15 @@ public function testParameterArrayGeneration() { $this->generateAndCompareTest('ParameterArrayTest'); } + + /** + * Tests flat generation of a hardcoded test file with no external references. + * + * @throws \Exception + * @throws \Magento\FunctionalTestingFramework\Exceptions\TestReferenceException + */ + public function testExtendedParameterArrayGeneration() + { + $this->generateAndCompareTest('ExtendedParameterArrayTest'); + } } diff --git a/src/Magento/FunctionalTestingFramework/DataGenerator/Handlers/DataObjectHandler.php b/src/Magento/FunctionalTestingFramework/DataGenerator/Handlers/DataObjectHandler.php index 0e79bcac1..a35f33724 100644 --- a/src/Magento/FunctionalTestingFramework/DataGenerator/Handlers/DataObjectHandler.php +++ b/src/Magento/FunctionalTestingFramework/DataGenerator/Handlers/DataObjectHandler.php @@ -6,17 +6,20 @@ namespace Magento\FunctionalTestingFramework\DataGenerator\Handlers; +use Magento\FunctionalTestingFramework\Config\Data; use Magento\FunctionalTestingFramework\DataGenerator\Objects\EntityDataObject; use Magento\FunctionalTestingFramework\DataGenerator\Parsers\DataProfileSchemaParser; use Magento\FunctionalTestingFramework\Exceptions\XmlException; use Magento\FunctionalTestingFramework\ObjectManager\ObjectHandlerInterface; use Magento\FunctionalTestingFramework\ObjectManagerFactory; +use Magento\FunctionalTestingFramework\DataGenerator\Util\DataExtensionUtil; class DataObjectHandler implements ObjectHandlerInterface { const _ENTITY = 'entity'; const _NAME = 'name'; const _TYPE = 'type'; + const _EXTENDS = 'extends'; const _DATA = 'data'; const _KEY = 'key'; const _VALUE = 'value'; @@ -46,6 +49,13 @@ class DataObjectHandler implements ObjectHandlerInterface */ private $entityDataObjects = []; + /** + * Instance of DataExtensionUtil class + * + * @var DataExtensionUtil + */ + private $extendUtil; + /** * Constructor */ @@ -57,6 +67,7 @@ private function __construct() return; } $this->entityDataObjects = $this->processParserOutput($parserOutput); + $this->extendUtil = new DataExtensionUtil(); } /** @@ -81,10 +92,9 @@ public static function getInstance() */ public function getObject($name) { - $allObjects = $this->getAllObjects(); - - if (array_key_exists($name, $allObjects)) { - return $allObjects[$name]; + if (array_key_exists($name, $this->entityDataObjects)) { + $item = $this->extendDataObject($this->entityDataObjects[$name]); + return $this->extendDataObject($this->entityDataObjects[$name]); } return null; @@ -97,6 +107,9 @@ public function getObject($name) */ public function getAllObjects() { + foreach ($this->entityDataObjects as $entityName => $entityObject) { + $this->entityDataObjects[$entityName] = $this->extendDataObject($entityObject); + } return $this->entityDataObjects; } @@ -239,4 +252,18 @@ private function processVarElements($entityData) } return $vars; } + + /** + * This method checks if the data object is extended and creates a new data object accordingly + * + * @param EntityDataObject $dataObject + * @return EntityDataObject + */ + private function extendDataObject($dataObject) + { + if ($dataObject->getParentName() != null) { + return $this->extendUtil->extendEntity($dataObject); + } + return $dataObject; + } } diff --git a/src/Magento/FunctionalTestingFramework/DataGenerator/Objects/EntityDataObject.php b/src/Magento/FunctionalTestingFramework/DataGenerator/Objects/EntityDataObject.php index d8564a26b..a204e6d5f 100644 --- a/src/Magento/FunctionalTestingFramework/DataGenerator/Objects/EntityDataObject.php +++ b/src/Magento/FunctionalTestingFramework/DataGenerator/Objects/EntityDataObject.php @@ -63,6 +63,13 @@ class EntityDataObject */ private $uniquenessData = []; + /** + * String of parent Entity + * + * @var string + */ + private $parentEntity; + /** * Constructor * @@ -72,8 +79,9 @@ class EntityDataObject * @param string[] $linkedEntities * @param string[] $uniquenessData * @param string[] $vars + * @param string $parentEntity */ - public function __construct($name, $type, $data, $linkedEntities, $uniquenessData, $vars = []) + public function __construct($name, $type, $data, $linkedEntities, $uniquenessData, $vars = [], $parentEntity = null) { $this->name = $name; $this->type = $type; @@ -84,6 +92,7 @@ public function __construct($name, $type, $data, $linkedEntities, $uniquenessDat } $this->vars = $vars; + $this->parentEntity = $parentEntity; } /** @@ -145,6 +154,16 @@ public function getDataByName($name, $uniquenessFormat) return null; } + /** + * Getter for data parent + * + * @return \string + */ + public function getParentName() + { + return $this->parentEntity; + } + /** * Formats and returns data based on given uniqueDataFormat and prefix/suffix. * diff --git a/src/Magento/FunctionalTestingFramework/DataGenerator/Util/DataExtensionUtil.php b/src/Magento/FunctionalTestingFramework/DataGenerator/Util/DataExtensionUtil.php new file mode 100644 index 000000000..a3e08b06d --- /dev/null +++ b/src/Magento/FunctionalTestingFramework/DataGenerator/Util/DataExtensionUtil.php @@ -0,0 +1,76 @@ +getObject($entityObject->getParentName()); + } catch (XmlException $error) { + throw new XmlException( + "Parent Entity " . + $entityObject->getParentName() . + " not defined for Entity " . + $entityObject->getName() . + "." . + PHP_EOL + ); + } + + // Check to see if the parent test is already an extended test + if ($parentEntity->getParentName() !== null) { + throw new XmlException( + "Cannot extend an entity that already extends another entity. Entity: " . $parentEntity->getName() + ); + } + if (MftfApplicationConfig::getConfig()->verboseEnabled()) { + echo("Extending Test: " . $parentEntity->getName() . " => " . $entityObject->getName() . PHP_EOL); + } + + // Get all data for both parent and child and merge + $referencedTestSteps = $parentEntity->getAllData(); + $newData = array_merge($referencedTestSteps, $entityObject->getAllData()); + + // Get all var references for both parent and child and merge + $referencedTestSteps = $parentEntity->getVarReferences(); + $newVarReferences = array_merge($referencedTestSteps, $entityObject->getVarReferences()); + + // Create new Test object to return + $extendedEntity = new EntityDataObject( + $entityObject->getName(), + $parentEntity->getType(), + $newData, + $parentEntity->getLinkedEntities(), + $parentEntity->getUniquenessData(), + $newVarReferences + ); + return $extendedEntity; + } +} diff --git a/src/Magento/FunctionalTestingFramework/DataGenerator/Util/OperationElementExtractor.php b/src/Magento/FunctionalTestingFramework/DataGenerator/Util/OperationElementExtractor.php index 6f2e3e447..1345649f2 100644 --- a/src/Magento/FunctionalTestingFramework/DataGenerator/Util/OperationElementExtractor.php +++ b/src/Magento/FunctionalTestingFramework/DataGenerator/Util/OperationElementExtractor.php @@ -17,6 +17,7 @@ class OperationElementExtractor const OPERATION_OBJECT_ENTRY = 'field'; const OPERATION_OBJECT_OBJ_NAME = 'object'; const OPERATION_OBJECT_ARRAY_VALUE = 'value'; + const OPERATION_OBJECT_EXTENDS = 'extends'; /** * OperationElementExtractor constructor. @@ -43,6 +44,11 @@ public function extractOperationElement($operationElementArray) $operationElements = []; $nestedOperationElements = []; + $operationExtends = null; + + if (array_key_exists(OperationElementExtractor::OPERATION_OBJECT_EXTENDS, $operationElementArray)) { + $operationExtends = $operationElementArray[OperationElementExtractor::OPERATION_OBJECT_EXTENDS]; + } // extract nested entries if (array_key_exists(OperationElementExtractor::OPERATION_OBJECT_ENTRY, $operationElementArray)) { @@ -79,7 +85,8 @@ public function extractOperationElement($operationElementArray) OperationElementExtractor::OPERATION_OBJECT_OBJ_NAME, $operationElementArray[OperationDefinitionObjectHandler::ENTITY_OPERATION_REQUIRED] ?? null, $nestedOperationElements, - $operationElements + $operationElements, + $operationExtends ); } diff --git a/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd b/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd index b956e718b..dbb58ed7f 100644 --- a/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd +++ b/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd @@ -77,6 +77,13 @@ + + + + Name of the entity that is extended. + + + From ccd6bff62f05e134c9822b381ad939c1cbc4d612 Mon Sep 17 00:00:00 2001 From: aljcalandra Date: Mon, 21 May 2018 13:15:12 -0500 Subject: [PATCH 2/6] MQE-231: Allow data to extend other data - Added Tests - Updated Extend Login - Cleaned Up Tests using double by adding new TestCase class to extend --- .../Handlers/DataObjectHandlerTest.php | 4 +- .../OperationDefinitionObjectHandlerTest.php | 4 +- .../Objects/EntityDataObjectTest.php | 4 +- .../OperationDataArrayResolverTest.php | 12 +- .../Util/DataExtensionUtilTest.php | 155 ++++++++++++++++++ .../Page/Handlers/PageObjectHandlerTest.php | 4 +- .../Handlers/SectionObjectHandlerTest.php | 4 +- .../Page/Objects/ElementObjectTest.php | 4 +- .../Page/Objects/PageObjectTest.php | 4 +- .../Page/Objects/SectionObjectTest.php | 4 +- .../Suite/Handlers/SuiteObjectHandlerTest.php | 4 +- .../Suite/SuiteGeneratorTest.php | 4 +- .../Test/Config/ActionGroupDomTest.php | 4 +- .../Test/Handlers/TestObjectHandlerTest.php | 4 +- .../Test/Objects/ActionGroupObjectTest.php | 12 +- .../Test/Objects/ActionObjectTest.php | 12 +- .../Test/Util/ActionMergeUtilTest.php | 12 +- .../Test/Util/ActionObjectExtractorTest.php | 4 +- .../Util/ModuleResolverTest.php | 4 +- .../Util/Sorter/ParallelGroupSorterTest.php | 4 +- .../Validation/NameValidationUtilTest.php | 4 +- dev/tests/unit/Util/MagentoTestCase.php | 24 +++ .../Resources/ExtendParentDataTest.txt | 41 +++++ .../TestModule/Data/ExtendedData.xml | 23 +++ .../TestModule/Data/ParameterArrayData.xml | 4 - .../TestModule/Test/ExtendedDataTest.xml | 19 +++ .../TestModule/Test/ParameterArrayTest.xml | 6 - .../verification/Tests/ExtendedDataTest.php | 22 +++ .../verification/Tests/ParameterArrayTest.php | 11 -- .../Handlers/DataObjectHandler.php | 16 +- .../DataGenerator/Util/DataExtensionUtil.php | 44 +++-- .../Util/OperationElementExtractor.php | 9 +- 32 files changed, 403 insertions(+), 83 deletions(-) create mode 100644 dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Util/DataExtensionUtilTest.php create mode 100644 dev/tests/unit/Util/MagentoTestCase.php create mode 100644 dev/tests/verification/Resources/ExtendParentDataTest.txt create mode 100644 dev/tests/verification/TestModule/Data/ExtendedData.xml create mode 100644 dev/tests/verification/TestModule/Test/ExtendedDataTest.xml create mode 100644 dev/tests/verification/Tests/ExtendedDataTest.php diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Handlers/DataObjectHandlerTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Handlers/DataObjectHandlerTest.php index c09e47478..b77659aa2 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Handlers/DataObjectHandlerTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Handlers/DataObjectHandlerTest.php @@ -12,12 +12,12 @@ use Magento\FunctionalTestingFramework\DataGenerator\Parsers\DataProfileSchemaParser; use Magento\FunctionalTestingFramework\ObjectManager; use Magento\FunctionalTestingFramework\ObjectManagerFactory; -use PHPUnit\Framework\TestCase; +use Magento\FunctionalTestingFramework\Util\MagentoTestCase; /** * Class DataObjectHandlerTest */ -class DataObjectHandlerTest extends TestCase +class DataObjectHandlerTest extends MagentoTestCase { // All tests share this array, feel free to add but be careful modifying or removing const PARSER_OUTPUT = [ diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Handlers/OperationDefinitionObjectHandlerTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Handlers/OperationDefinitionObjectHandlerTest.php index 3050b3830..ffb15648a 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Handlers/OperationDefinitionObjectHandlerTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Handlers/OperationDefinitionObjectHandlerTest.php @@ -13,12 +13,12 @@ use Magento\FunctionalTestingFramework\ObjectManagerFactory; use Magento\FunctionalTestingFramework\DataGenerator\Handlers\OperationDefinitionObjectHandler; use Magento\FunctionalTestingFramework\DataGenerator\Parsers\OperationDefinitionParser; -use PHPUnit\Framework\TestCase; +use Magento\FunctionalTestingFramework\Util\MagentoTestCase; /** * Class OperationDefinitionObjectHandlerTest */ -class OperationDefinitionObjectHandlerTest extends TestCase +class OperationDefinitionObjectHandlerTest extends MagentoTestCase { public function testGetMultipleObjects() { diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Objects/EntityDataObjectTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Objects/EntityDataObjectTest.php index 1b611dba6..03584c1be 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Objects/EntityDataObjectTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Objects/EntityDataObjectTest.php @@ -6,7 +6,7 @@ namespace Magento\FunctionalTestingFramework\DataGenerator\Objects; -use PHPUnit\Framework\TestCase; +use Magento\FunctionalTestingFramework\Util\MagentoTestCase; /** * The following function declarations override the global function_exists and declare msq/msqs for use @@ -32,7 +32,7 @@ function msqs($id = null) /** * Class EntityDataObjectTest */ -class EntityDataObjectTest extends TestCase +class EntityDataObjectTest extends MagentoTestCase { public function testBasicGetters() { diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Persist/OperationDataArrayResolverTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Persist/OperationDataArrayResolverTest.php index 4b57a2f73..1c3a7c011 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Persist/OperationDataArrayResolverTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Persist/OperationDataArrayResolverTest.php @@ -9,12 +9,12 @@ use Magento\FunctionalTestingFramework\DataGenerator\Handlers\DataObjectHandler; use Magento\FunctionalTestingFramework\DataGenerator\Handlers\OperationDefinitionObjectHandler; use Magento\FunctionalTestingFramework\DataGenerator\Persist\OperationDataArrayResolver; -use PHPUnit\Framework\TestCase; +use Magento\FunctionalTestingFramework\Util\MagentoTestCase; use tests\unit\Util\EntityDataObjectBuilder; use tests\unit\Util\OperationDefinitionBuilder; use tests\unit\Util\OperationElementBuilder; -class OperationDataArrayResolverTest extends TestCase +class OperationDataArrayResolverTest extends MagentoTestCase { const NESTED_METADATA_EXPECTED_RESULT = ["parentType" => [ "name" => "Hopper", @@ -35,6 +35,14 @@ class OperationDataArrayResolverTest extends TestCase ] ]]; + /** + * Teardown for removing AspectMock Double References + */ + protected function tearDown() + { + AspectMock::clean(); + } + /** * Test a basic metadata resolve between primitive values and a primitive data set * diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Util/DataExtensionUtilTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Util/DataExtensionUtilTest.php new file mode 100644 index 000000000..7542f66ae --- /dev/null +++ b/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Util/DataExtensionUtilTest.php @@ -0,0 +1,155 @@ + [ + 'extended' => [ + 'type' => 'testType', + 'extends' => "parent", + 'data' => [ + 0 => [ + 'key' => 'testKey', + 'value' => 'testValue' + ] + ] + ] + ] + ]; + + $this->setMockEntities($extendedDataObject); + + $this->expectExceptionMessage("Parent Entity parent not defined for Entity extended."); + DataObjectHandler::getInstance()->getObject("extended"); + } + + public function testAlreadyExtendedParentData() + { + $extendedDataObjects = [ + 'entity' => [ + 'extended' => [ + 'type' => 'testType', + 'extends' => "parent" + ], + 'parent' => [ + 'type' => 'type', + 'extends' => "grandparent" + ], + 'grandparent' => [ + 'type' => 'grand' + ] + ] + ]; + + $this->setMockEntities($extendedDataObjects); + + $this->expectExceptionMessage( + "Cannot extend an entity that already extends another entity. Entity: parent." . PHP_EOL + ); + DataObjectHandler::getInstance()->getObject("extended"); + } + + public function testExtendedVarGetter() + { + $extendedDataObjects = [ + 'entity' => [ + 'extended' => [ + 'type' => 'testType', + 'extends' => "parent" + ], + 'parent' => [ + 'type' => 'type', + 'var' => [ + 'someOtherEntity' => [ + 'entityType' => 'someOtherEntity', + 'entityKey' => 'id', + 'key' => 'someOtherEntity' + ] + ] + ] + ] + ]; + + $this->setMockEntities($extendedDataObjects); + $resultextendedDataObject = DataObjectHandler::getInstance()->getObject("extended"); + // Perform Asserts + $this->assertEquals("someOtherEntity->id", $resultextendedDataObject->getVarReference("someOtherEntity")); + } + + public function testGetLinkedEntities() + { + $extendedDataObjects = [ + 'entity' => [ + 'extended' => [ + 'type' => 'testType', + 'extends' => "parent" + ], + 'parent' => [ + 'type' => 'type', + 'requiredEntity' => [ + 'linkedEntity1' => [ + 'type' => 'linkedEntityType', + 'value' => 'linkedEntity1' + ], + 'linkedEntity2' => [ + 'type' => 'otherEntityType', + 'value' => 'linkedEntity2' + ], + ] + ] + ] + ]; + + $this->setMockEntities($extendedDataObjects); + // Perform Asserts + $resultextendedDataObject = DataObjectHandler::getInstance()->getObject("extended"); + $this->assertEquals("linkedEntity1", $resultextendedDataObject->getLinkedEntitiesOfType("linkedEntityType")[0]); + $this->assertEquals("linkedEntity2", $resultextendedDataObject->getLinkedEntitiesOfType("otherEntityType")[0]); + } + + private function setMockEntities($mockEntityData) + { + $property = new \ReflectionProperty(DataObjectHandler::class, 'INSTANCE'); + $property->setAccessible(true); + $property->setValue(null); + + $mockDataProfileSchemaParser = AspectMock::double(DataProfileSchemaParser::class, [ + 'readDataProfiles' => $mockEntityData + ])->make(); + + $mockObjectManager = AspectMock::double(ObjectManager::class, [ + 'create' => $mockDataProfileSchemaParser + ])->make(); + + AspectMock::double(ObjectManagerFactory::class, [ + 'getObjectManager' => $mockObjectManager + ]); + + } +} diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Page/Handlers/PageObjectHandlerTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Page/Handlers/PageObjectHandlerTest.php index 62e87022d..28ffcd9e1 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Page/Handlers/PageObjectHandlerTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Page/Handlers/PageObjectHandlerTest.php @@ -11,9 +11,9 @@ use Magento\FunctionalTestingFramework\ObjectManagerFactory; use Magento\FunctionalTestingFramework\Page\Handlers\PageObjectHandler; use Magento\FunctionalTestingFramework\XmlParser\PageParser; -use PHPUnit\Framework\TestCase; +use Magento\FunctionalTestingFramework\Util\MagentoTestCase; -class PageObjectHandlerTest extends TestCase +class PageObjectHandlerTest extends MagentoTestCase { public function testGetPageObject() { diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Page/Handlers/SectionObjectHandlerTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Page/Handlers/SectionObjectHandlerTest.php index 2f79b3680..4a939dbad 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Page/Handlers/SectionObjectHandlerTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Page/Handlers/SectionObjectHandlerTest.php @@ -11,9 +11,9 @@ use Magento\FunctionalTestingFramework\ObjectManagerFactory; use Magento\FunctionalTestingFramework\Page\Handlers\SectionObjectHandler; use Magento\FunctionalTestingFramework\XmlParser\SectionParser; -use PHPUnit\Framework\TestCase; +use Magento\FunctionalTestingFramework\Util\MagentoTestCase; -class SectionObjectHandlerTest extends TestCase +class SectionObjectHandlerTest extends MagentoTestCase { public function testGetSectionObject() { diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Page/Objects/ElementObjectTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Page/Objects/ElementObjectTest.php index 00d5e9479..d585f4085 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Page/Objects/ElementObjectTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Page/Objects/ElementObjectTest.php @@ -8,12 +8,12 @@ use Magento\FunctionalTestingFramework\Exceptions\XmlException; use Magento\FunctionalTestingFramework\Page\Objects\ElementObject; -use PHPUnit\Framework\TestCase; +use Magento\FunctionalTestingFramework\Util\MagentoTestCase; /** * Class ElementObjectTest */ -class ElementObjectTest extends TestCase +class ElementObjectTest extends MagentoTestCase { /** * Timeout should be null when instantiated with '-' diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Page/Objects/PageObjectTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Page/Objects/PageObjectTest.php index 32973217a..7f8053e77 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Page/Objects/PageObjectTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Page/Objects/PageObjectTest.php @@ -7,12 +7,12 @@ namespace tests\unit\Magento\FunctionalTestFramework\Page\Objects; use Magento\FunctionalTestingFramework\Page\Objects\PageObject; -use PHPUnit\Framework\TestCase; +use Magento\FunctionalTestingFramework\Util\MagentoTestCase; /** * Class PageObjectTest */ -class PageObjectTest extends TestCase +class PageObjectTest extends MagentoTestCase { /** * Assert that the page object has a section diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Page/Objects/SectionObjectTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Page/Objects/SectionObjectTest.php index 6257ee0db..5ed1f557f 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Page/Objects/SectionObjectTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Page/Objects/SectionObjectTest.php @@ -8,12 +8,12 @@ use Magento\FunctionalTestingFramework\Page\Objects\ElementObject; use Magento\FunctionalTestingFramework\Page\Objects\SectionObject; -use PHPUnit\Framework\TestCase; +use Magento\FunctionalTestingFramework\Util\MagentoTestCase; /** * Class SectionObjectTest */ -class SectionObjectTest extends TestCase +class SectionObjectTest extends MagentoTestCase { /** * Assert that the section object has an element diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Suite/Handlers/SuiteObjectHandlerTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Suite/Handlers/SuiteObjectHandlerTest.php index ede99bf34..3f0d2c5a8 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Suite/Handlers/SuiteObjectHandlerTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Suite/Handlers/SuiteObjectHandlerTest.php @@ -12,11 +12,11 @@ use Magento\FunctionalTestingFramework\Suite\Parsers\SuiteDataParser; use Magento\FunctionalTestingFramework\Test\Handlers\TestObjectHandler; use Magento\FunctionalTestingFramework\Test\Parsers\TestDataParser; -use PHPUnit\Framework\TestCase; +use Magento\FunctionalTestingFramework\Util\MagentoTestCase; use tests\unit\Util\SuiteDataArrayBuilder; use tests\unit\Util\TestDataArrayBuilder; -class SuiteObjectHandlerTest extends TestCase +class SuiteObjectHandlerTest extends MagentoTestCase { /** * Tests basic parsing and accesors of suite object and suite object supporting classes diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Suite/SuiteGeneratorTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Suite/SuiteGeneratorTest.php index 8eb486144..ec697597f 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Suite/SuiteGeneratorTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Suite/SuiteGeneratorTest.php @@ -16,11 +16,11 @@ use Magento\FunctionalTestingFramework\Test\Util\TestObjectExtractor; use Magento\FunctionalTestingFramework\Test\Parsers\TestDataParser; use Magento\FunctionalTestingFramework\Util\Manifest\DefaultTestManifest; -use PHPUnit\Framework\TestCase; +use Magento\FunctionalTestingFramework\Util\MagentoTestCase; use tests\unit\Util\SuiteDataArrayBuilder; use tests\unit\Util\TestDataArrayBuilder; -class SuiteGeneratorTest extends TestCase +class SuiteGeneratorTest extends MagentoTestCase { /** diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Config/ActionGroupDomTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Config/ActionGroupDomTest.php index b7ea66f65..8d0bc19ca 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Config/ActionGroupDomTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Config/ActionGroupDomTest.php @@ -7,9 +7,9 @@ use Magento\FunctionalTestingFramework\Exceptions\Collector\ExceptionCollector; use Magento\FunctionalTestingFramework\Test\Config\ActionGroupDom; -use PHPUnit\Framework\TestCase; +use Magento\FunctionalTestingFramework\Util\MagentoTestCase; -class ActionGroupDomTest extends TestCase +class ActionGroupDomTest extends MagentoTestCase { /** * Test Action Group duplicate step key validation diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Handlers/TestObjectHandlerTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Handlers/TestObjectHandlerTest.php index 860c8d3bb..c57d3f169 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Handlers/TestObjectHandlerTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Handlers/TestObjectHandlerTest.php @@ -18,10 +18,10 @@ use Magento\FunctionalTestingFramework\Test\Parsers\TestDataParser; use Magento\FunctionalTestingFramework\Test\Util\ActionObjectExtractor; use Magento\FunctionalTestingFramework\Test\Util\TestObjectExtractor; -use PHPUnit\Framework\TestCase; +use Magento\FunctionalTestingFramework\Util\MagentoTestCase; use tests\unit\Util\TestDataArrayBuilder; -class TestObjectHandlerTest extends TestCase +class TestObjectHandlerTest extends MagentoTestCase { /** * Basic test to validate array => test object conversion. diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionGroupObjectTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionGroupObjectTest.php index 8a5ba7100..c12c8c839 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionGroupObjectTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionGroupObjectTest.php @@ -15,14 +15,22 @@ use Magento\FunctionalTestingFramework\Test\Objects\ActionGroupObject; use Magento\FunctionalTestingFramework\Test\Objects\ActionObject; use Magento\FunctionalTestingFramework\Test\Objects\ArgumentObject; -use PHPUnit\Framework\TestCase; +use Magento\FunctionalTestingFramework\Util\MagentoTestCase; use tests\unit\Util\ActionGroupObjectBuilder; use tests\unit\Util\EntityDataObjectBuilder; -class ActionGroupObjectTest extends TestCase +class ActionGroupObjectTest extends MagentoTestCase { const ACTION_GROUP_MERGE_KEY = 'TestKey'; + /** + * Teardown for removing AspectMock Double References + */ + protected function tearDown() + { + AspectMock::clean(); + } + /** * Tests a string literal in an action group */ diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionObjectTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionObjectTest.php index b5aa8c4b1..98ee6676c 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionObjectTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionObjectTest.php @@ -15,13 +15,21 @@ use Magento\FunctionalTestingFramework\Test\Objects\ActionObject; use Magento\FunctionalTestingFramework\Page\Handlers\SectionObjectHandler; use Magento\FunctionalTestingFramework\Page\Objects\SectionObject; -use PHPUnit\Framework\TestCase; +use Magento\FunctionalTestingFramework\Util\MagentoTestCase; /** * Class ActionObjectTest */ -class ActionObjectTest extends TestCase +class ActionObjectTest extends MagentoTestCase { + /** + * Teardown for removing AspectMock Double References + */ + protected function tearDown() + { + AspectMock::clean(); + } + /** * The order offset should be 0 when the action is instantiated with 'before' */ diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Util/ActionMergeUtilTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Util/ActionMergeUtilTest.php index bae9965dd..0c9b360ab 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Util/ActionMergeUtilTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Util/ActionMergeUtilTest.php @@ -11,11 +11,19 @@ use Magento\FunctionalTestingFramework\Test\Objects\ActionObject; use Magento\FunctionalTestingFramework\Test\Util\ActionMergeUtil; use Magento\FunctionalTestingFramework\Test\Util\ActionObjectExtractor; -use PHPUnit\Framework\TestCase; +use Magento\FunctionalTestingFramework\Util\MagentoTestCase; use tests\unit\Util\DataObjectHandlerReflectionUtil; -class ActionMergeUtilTest extends TestCase +class ActionMergeUtilTest extends MagentoTestCase { + /** + * Teardown for removing AspectMock Double References + */ + protected function tearDown() + { + AspectMock::clean(); + } + /** * Test to validate actions are properly ordered during a merge. * diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Util/ActionObjectExtractorTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Util/ActionObjectExtractorTest.php index 873e622f7..c7dfaa8ba 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Util/ActionObjectExtractorTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Util/ActionObjectExtractorTest.php @@ -7,9 +7,9 @@ use Magento\FunctionalTestingFramework\Test\Objects\ActionObject; use Magento\FunctionalTestingFramework\Test\Util\ActionObjectExtractor; -use PHPUnit\Framework\TestCase; +use Magento\FunctionalTestingFramework\Util\MagentoTestCase; -class ActionObjectExtractorTest extends TestCase +class ActionObjectExtractorTest extends MagentoTestCase { /** @var ActionObjectExtractor */ private $testActionObjectExtractor; diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php index ea670c4a6..3d965b1b5 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php @@ -12,9 +12,9 @@ use Magento\FunctionalTestingFramework\ObjectManager; use Magento\FunctionalTestingFramework\ObjectManagerFactory; use Magento\FunctionalTestingFramework\Util\ModuleResolver; -use PHPUnit\Framework\TestCase; +use Magento\FunctionalTestingFramework\Util\MagentoTestCase; -class ModuleResolverTest extends TestCase +class ModuleResolverTest extends MagentoTestCase { /** * remove all registered test doubles diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Util/Sorter/ParallelGroupSorterTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Util/Sorter/ParallelGroupSorterTest.php index 1acd31522..6c6efe8ea 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Util/Sorter/ParallelGroupSorterTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Util/Sorter/ParallelGroupSorterTest.php @@ -11,9 +11,9 @@ use Magento\FunctionalTestingFramework\Test\Handlers\TestObjectHandler; use Magento\FunctionalTestingFramework\Test\Objects\TestObject; use Magento\FunctionalTestingFramework\Util\Sorter\ParallelGroupSorter; -use PHPUnit\Framework\TestCase; +use Magento\FunctionalTestingFramework\Util\MagentoTestCase; -class ParallelGroupSorterTest extends TestCase +class ParallelGroupSorterTest extends MagentoTestCase { /** * Test a basic sort of available tests based on size diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Util/Validation/NameValidationUtilTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Util/Validation/NameValidationUtilTest.php index 595033012..28d75b1ad 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Util/Validation/NameValidationUtilTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Util/Validation/NameValidationUtilTest.php @@ -8,9 +8,9 @@ use Magento\FunctionalTestingFramework\Exceptions\XmlException; use Magento\FunctionalTestingFramework\Util\Validation\NameValidationUtil; -use PHPUnit\Framework\TestCase; +use Magento\FunctionalTestingFramework\Util\MagentoTestCase; -class NameValidationUtilTest extends TestCase +class NameValidationUtilTest extends MagentoTestCase { /** * Validate name with curly braces throws exception diff --git a/dev/tests/unit/Util/MagentoTestCase.php b/dev/tests/unit/Util/MagentoTestCase.php new file mode 100644 index 000000000..df77ee592 --- /dev/null +++ b/dev/tests/unit/Util/MagentoTestCase.php @@ -0,0 +1,24 @@ +amGoingTo("create entity that has the stepKey: simpleDataKey"); + $extendParentData = DataObjectHandler::getInstance()->getObject("extendParentData"); + $simpleDataKey = new DataPersistenceHandler($extendParentData, []); + $simpleDataKey->createEntity(); + $I->searchAndMultiSelectOption("#selector", ["otherName"]); + $I->searchAndMultiSelectOption("#selector", ["extendName"]); + $I->searchAndMultiSelectOption("#selector", ["item"]); + $I->searchAndMultiSelectOption("#selector", [msq("extendParentData") . "prename"]); + $I->searchAndMultiSelectOption("#selector", ["postnameExtend" . msq("extendParentData")]); + } +} diff --git a/dev/tests/verification/TestModule/Data/ExtendedData.xml b/dev/tests/verification/TestModule/Data/ExtendedData.xml new file mode 100644 index 000000000..c9df0bddb --- /dev/null +++ b/dev/tests/verification/TestModule/Data/ExtendedData.xml @@ -0,0 +1,23 @@ + + + + + + name + prename + postname + + + otherName + extendName + item + postnameExtend + value + + diff --git a/dev/tests/verification/TestModule/Data/ParameterArrayData.xml b/dev/tests/verification/TestModule/Data/ParameterArrayData.xml index 58e0866c6..3b45aedf7 100644 --- a/dev/tests/verification/TestModule/Data/ParameterArrayData.xml +++ b/dev/tests/verification/TestModule/Data/ParameterArrayData.xml @@ -18,8 +18,4 @@ originalValue originalValue3 - - otherName - extendName - diff --git a/dev/tests/verification/TestModule/Test/ExtendedDataTest.xml b/dev/tests/verification/TestModule/Test/ExtendedDataTest.xml new file mode 100644 index 000000000..21f06eb3a --- /dev/null +++ b/dev/tests/verification/TestModule/Test/ExtendedDataTest.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + diff --git a/dev/tests/verification/TestModule/Test/ParameterArrayTest.xml b/dev/tests/verification/TestModule/Test/ParameterArrayTest.xml index 857f91040..2d91671cb 100644 --- a/dev/tests/verification/TestModule/Test/ParameterArrayTest.xml +++ b/dev/tests/verification/TestModule/Test/ParameterArrayTest.xml @@ -28,10 +28,4 @@ - - - - - - diff --git a/dev/tests/verification/Tests/ExtendedDataTest.php b/dev/tests/verification/Tests/ExtendedDataTest.php new file mode 100644 index 000000000..291b6cb7f --- /dev/null +++ b/dev/tests/verification/Tests/ExtendedDataTest.php @@ -0,0 +1,22 @@ +generateAndCompareTest('ExtendParentDataTest'); + } +} diff --git a/dev/tests/verification/Tests/ParameterArrayTest.php b/dev/tests/verification/Tests/ParameterArrayTest.php index be01ff6c5..c65027d42 100644 --- a/dev/tests/verification/Tests/ParameterArrayTest.php +++ b/dev/tests/verification/Tests/ParameterArrayTest.php @@ -19,15 +19,4 @@ public function testParameterArrayGeneration() { $this->generateAndCompareTest('ParameterArrayTest'); } - - /** - * Tests flat generation of a hardcoded test file with no external references. - * - * @throws \Exception - * @throws \Magento\FunctionalTestingFramework\Exceptions\TestReferenceException - */ - public function testExtendedParameterArrayGeneration() - { - $this->generateAndCompareTest('ExtendedParameterArrayTest'); - } } diff --git a/src/Magento/FunctionalTestingFramework/DataGenerator/Handlers/DataObjectHandler.php b/src/Magento/FunctionalTestingFramework/DataGenerator/Handlers/DataObjectHandler.php index a35f33724..c43bc37a9 100644 --- a/src/Magento/FunctionalTestingFramework/DataGenerator/Handlers/DataObjectHandler.php +++ b/src/Magento/FunctionalTestingFramework/DataGenerator/Handlers/DataObjectHandler.php @@ -93,7 +93,6 @@ public static function getInstance() public function getObject($name) { if (array_key_exists($name, $this->entityDataObjects)) { - $item = $this->extendDataObject($this->entityDataObjects[$name]); return $this->extendDataObject($this->entityDataObjects[$name]); } @@ -135,6 +134,7 @@ private function processParserOutput($parserOutput) $linkedEntities = []; $uniquenessData = []; $vars = []; + $parentEntity = null; if (array_key_exists(self::_DATA, $rawEntity)) { $data = $this->processDataElements($rawEntity); @@ -157,7 +157,19 @@ private function processParserOutput($parserOutput) $vars = $this->processVarElements($rawEntity); } - $entityDataObject = new EntityDataObject($name, $type, $data, $linkedEntities, $uniquenessData, $vars); + if (array_key_exists(self::_EXTENDS, $rawEntity)) { + $parentEntity = $rawEntity[self::_EXTENDS]; + } + + $entityDataObject = new EntityDataObject( + $name, + $type, + $data, + $linkedEntities, + $uniquenessData, + $vars, + $parentEntity + ); $entityDataObjects[$entityDataObject->getName()] = $entityDataObject; } diff --git a/src/Magento/FunctionalTestingFramework/DataGenerator/Util/DataExtensionUtil.php b/src/Magento/FunctionalTestingFramework/DataGenerator/Util/DataExtensionUtil.php index a3e08b06d..7b92fdd79 100644 --- a/src/Magento/FunctionalTestingFramework/DataGenerator/Util/DataExtensionUtil.php +++ b/src/Magento/FunctionalTestingFramework/DataGenerator/Util/DataExtensionUtil.php @@ -31,9 +31,8 @@ public function __construct() public function extendEntity($entityObject) { // Check to see if the parent test exists - try { - $parentEntity = DataObjectHandler::getInstance()->getObject($entityObject->getParentName()); - } catch (XmlException $error) { + $parentEntity = DataObjectHandler::getInstance()->getObject($entityObject->getParentName()); + if ($parentEntity == null) { throw new XmlException( "Parent Entity " . $entityObject->getParentName() . @@ -47,29 +46,50 @@ public function extendEntity($entityObject) // Check to see if the parent test is already an extended test if ($parentEntity->getParentName() !== null) { throw new XmlException( - "Cannot extend an entity that already extends another entity. Entity: " . $parentEntity->getName() + "Cannot extend an entity that already extends another entity. Entity: " . + $parentEntity->getName() . + "." . + PHP_EOL ); } if (MftfApplicationConfig::getConfig()->verboseEnabled()) { - echo("Extending Test: " . $parentEntity->getName() . " => " . $entityObject->getName() . PHP_EOL); + echo("Extending Data: " . $parentEntity->getName() . " => " . $entityObject->getName() . PHP_EOL); } // Get all data for both parent and child and merge - $referencedTestSteps = $parentEntity->getAllData(); - $newData = array_merge($referencedTestSteps, $entityObject->getAllData()); + $referencedData = $parentEntity->getAllData(); + $newData = array_merge($referencedData, $entityObject->getAllData()); + + // Get all linked references for both parent and child and merge + $referencedLinks = $parentEntity->getLinkedEntities(); + $newLinkedReferences = array_merge($referencedLinks, $entityObject->getLinkedEntities()); + + // Get all unique references for both parent and child and merge + $referencedUniqueData = $parentEntity->getUniquenessData(); + $newUniqueReferences = array_merge($referencedUniqueData, $entityObject->getUniquenessData()); // Get all var references for both parent and child and merge - $referencedTestSteps = $parentEntity->getVarReferences(); - $newVarReferences = array_merge($referencedTestSteps, $entityObject->getVarReferences()); + $referencedVars = $parentEntity->getVarReferences(); + $newVarReferences = array_merge($referencedVars, $entityObject->getVarReferences()); + // Remove unique references for objects that are replaced without such reference + $unmatchedUniqueReferences = array_diff_key($referencedUniqueData, $entityObject->getUniquenessData()); + foreach ($unmatchedUniqueReferences as $uniqueKey => $uniqueData) { + if (array_key_exists($uniqueKey, $entityObject->getAllData())) { + unset($newUniqueReferences[$uniqueKey]); + } + } + + // Create new Test object to return // Create new Test object to return $extendedEntity = new EntityDataObject( $entityObject->getName(), $parentEntity->getType(), $newData, - $parentEntity->getLinkedEntities(), - $parentEntity->getUniquenessData(), - $newVarReferences + $newLinkedReferences, + $newUniqueReferences, + $newVarReferences, + $entityObject->getParentName() ); return $extendedEntity; } diff --git a/src/Magento/FunctionalTestingFramework/DataGenerator/Util/OperationElementExtractor.php b/src/Magento/FunctionalTestingFramework/DataGenerator/Util/OperationElementExtractor.php index 1345649f2..6f2e3e447 100644 --- a/src/Magento/FunctionalTestingFramework/DataGenerator/Util/OperationElementExtractor.php +++ b/src/Magento/FunctionalTestingFramework/DataGenerator/Util/OperationElementExtractor.php @@ -17,7 +17,6 @@ class OperationElementExtractor const OPERATION_OBJECT_ENTRY = 'field'; const OPERATION_OBJECT_OBJ_NAME = 'object'; const OPERATION_OBJECT_ARRAY_VALUE = 'value'; - const OPERATION_OBJECT_EXTENDS = 'extends'; /** * OperationElementExtractor constructor. @@ -44,11 +43,6 @@ public function extractOperationElement($operationElementArray) $operationElements = []; $nestedOperationElements = []; - $operationExtends = null; - - if (array_key_exists(OperationElementExtractor::OPERATION_OBJECT_EXTENDS, $operationElementArray)) { - $operationExtends = $operationElementArray[OperationElementExtractor::OPERATION_OBJECT_EXTENDS]; - } // extract nested entries if (array_key_exists(OperationElementExtractor::OPERATION_OBJECT_ENTRY, $operationElementArray)) { @@ -85,8 +79,7 @@ public function extractOperationElement($operationElementArray) OperationElementExtractor::OPERATION_OBJECT_OBJ_NAME, $operationElementArray[OperationDefinitionObjectHandler::ENTITY_OPERATION_REQUIRED] ?? null, $nestedOperationElements, - $operationElements, - $operationExtends + $operationElements ); } From a61358c608b1e5ee2fdff3d7c4625634b7d2f7ab Mon Sep 17 00:00:00 2001 From: aljcalandra Date: Mon, 21 May 2018 13:20:37 -0500 Subject: [PATCH 3/6] MQE-231: Allow data to extend other data - Removed unused references - Removed references to teardown outside of MagentoTestCase --- .../Persist/OperationDataArrayResolverTest.php | 8 -------- .../DataGenerator/Util/DataExtensionUtilTest.php | 8 -------- .../Test/Objects/ActionGroupObjectTest.php | 8 -------- .../Test/Objects/ActionObjectTest.php | 8 -------- .../Test/Util/ActionMergeUtilTest.php | 8 -------- .../DataGenerator/Handlers/DataObjectHandler.php | 1 - 6 files changed, 41 deletions(-) diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Persist/OperationDataArrayResolverTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Persist/OperationDataArrayResolverTest.php index 1c3a7c011..584c173a9 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Persist/OperationDataArrayResolverTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Persist/OperationDataArrayResolverTest.php @@ -35,14 +35,6 @@ class OperationDataArrayResolverTest extends MagentoTestCase ] ]]; - /** - * Teardown for removing AspectMock Double References - */ - protected function tearDown() - { - AspectMock::clean(); - } - /** * Test a basic metadata resolve between primitive values and a primitive data set * diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Util/DataExtensionUtilTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Util/DataExtensionUtilTest.php index 7542f66ae..b81499a6f 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Util/DataExtensionUtilTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Util/DataExtensionUtilTest.php @@ -18,14 +18,6 @@ */ class EntityDataExtensionTest extends MagentoTestCase { - /** - * Teardown for removing AspectMock Double References - */ - protected function tearDown() - { - AspectMock::clean(); - } - public function testNoParentData() { $extendedDataObject = [ diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionGroupObjectTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionGroupObjectTest.php index c12c8c839..0d3ef4f7f 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionGroupObjectTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionGroupObjectTest.php @@ -23,14 +23,6 @@ class ActionGroupObjectTest extends MagentoTestCase { const ACTION_GROUP_MERGE_KEY = 'TestKey'; - /** - * Teardown for removing AspectMock Double References - */ - protected function tearDown() - { - AspectMock::clean(); - } - /** * Tests a string literal in an action group */ diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionObjectTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionObjectTest.php index 98ee6676c..2dc4aa040 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionObjectTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionObjectTest.php @@ -22,14 +22,6 @@ */ class ActionObjectTest extends MagentoTestCase { - /** - * Teardown for removing AspectMock Double References - */ - protected function tearDown() - { - AspectMock::clean(); - } - /** * The order offset should be 0 when the action is instantiated with 'before' */ diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Util/ActionMergeUtilTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Util/ActionMergeUtilTest.php index 0c9b360ab..2cec536a6 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Util/ActionMergeUtilTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Util/ActionMergeUtilTest.php @@ -16,14 +16,6 @@ class ActionMergeUtilTest extends MagentoTestCase { - /** - * Teardown for removing AspectMock Double References - */ - protected function tearDown() - { - AspectMock::clean(); - } - /** * Test to validate actions are properly ordered during a merge. * diff --git a/src/Magento/FunctionalTestingFramework/DataGenerator/Handlers/DataObjectHandler.php b/src/Magento/FunctionalTestingFramework/DataGenerator/Handlers/DataObjectHandler.php index c43bc37a9..5dc9293c2 100644 --- a/src/Magento/FunctionalTestingFramework/DataGenerator/Handlers/DataObjectHandler.php +++ b/src/Magento/FunctionalTestingFramework/DataGenerator/Handlers/DataObjectHandler.php @@ -6,7 +6,6 @@ namespace Magento\FunctionalTestingFramework\DataGenerator\Handlers; -use Magento\FunctionalTestingFramework\Config\Data; use Magento\FunctionalTestingFramework\DataGenerator\Objects\EntityDataObject; use Magento\FunctionalTestingFramework\DataGenerator\Parsers\DataProfileSchemaParser; use Magento\FunctionalTestingFramework\Exceptions\XmlException; From a4e751201d9ba2a631f9b65df14bc95183528cee Mon Sep 17 00:00:00 2001 From: aljcalandra Date: Mon, 21 May 2018 14:06:09 -0500 Subject: [PATCH 4/6] MQE-231: Allow data to extend other data - Missed a clean reference --- .../FunctionalTestFramework/Util/ModuleResolverTest.php | 8 -------- 1 file changed, 8 deletions(-) diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php index 3d965b1b5..8ea0ea237 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php @@ -16,14 +16,6 @@ class ModuleResolverTest extends MagentoTestCase { - /** - * remove all registered test doubles - */ - protected function tearDown() - { - AspectMock::clean(); - } - /** * Validate that Paths that are already set are returned * @throws \Exception From be4f574a0c17684b95e757be0d300d42ddaa7cdc Mon Sep 17 00:00:00 2001 From: Alex Calandra Date: Tue, 29 May 2018 16:15:34 -0500 Subject: [PATCH 5/6] MQE-231: Allow data to extend other data - Added support to overwrite parent type or take parent type if null --- dev/tests/verification/TestModule/Data/ExtendedData.xml | 2 +- .../DataGenerator/Util/DataExtensionUtil.php | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/dev/tests/verification/TestModule/Data/ExtendedData.xml b/dev/tests/verification/TestModule/Data/ExtendedData.xml index c9df0bddb..74fa921d0 100644 --- a/dev/tests/verification/TestModule/Data/ExtendedData.xml +++ b/dev/tests/verification/TestModule/Data/ExtendedData.xml @@ -13,7 +13,7 @@ prename postname - + otherName extendName item diff --git a/src/Magento/FunctionalTestingFramework/DataGenerator/Util/DataExtensionUtil.php b/src/Magento/FunctionalTestingFramework/DataGenerator/Util/DataExtensionUtil.php index 7b92fdd79..50398d797 100644 --- a/src/Magento/FunctionalTestingFramework/DataGenerator/Util/DataExtensionUtil.php +++ b/src/Magento/FunctionalTestingFramework/DataGenerator/Util/DataExtensionUtil.php @@ -56,6 +56,9 @@ public function extendEntity($entityObject) echo("Extending Data: " . $parentEntity->getName() . " => " . $entityObject->getName() . PHP_EOL); } + //get parent entity type if child does not have a type + $newType = $entityObject->getType() ?? $parentEntity->getType(); + // Get all data for both parent and child and merge $referencedData = $parentEntity->getAllData(); $newData = array_merge($referencedData, $entityObject->getAllData()); @@ -84,7 +87,7 @@ public function extendEntity($entityObject) // Create new Test object to return $extendedEntity = new EntityDataObject( $entityObject->getName(), - $parentEntity->getType(), + $newType, $newData, $newLinkedReferences, $newUniqueReferences, From cb490455fd5d9adf3b1a76073dae008d8a99d4ca Mon Sep 17 00:00:00 2001 From: Alex Calandra Date: Thu, 31 May 2018 15:59:56 -0500 Subject: [PATCH 6/6] MQE-231: Allow data to extend other data - Fixed comments referring to tests --- .../DataGenerator/Util/DataExtensionUtil.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Magento/FunctionalTestingFramework/DataGenerator/Util/DataExtensionUtil.php b/src/Magento/FunctionalTestingFramework/DataGenerator/Util/DataExtensionUtil.php index 50398d797..53f0a6e6c 100644 --- a/src/Magento/FunctionalTestingFramework/DataGenerator/Util/DataExtensionUtil.php +++ b/src/Magento/FunctionalTestingFramework/DataGenerator/Util/DataExtensionUtil.php @@ -30,7 +30,7 @@ public function __construct() */ public function extendEntity($entityObject) { - // Check to see if the parent test exists + // Check to see if the parent entity exists $parentEntity = DataObjectHandler::getInstance()->getObject($entityObject->getParentName()); if ($parentEntity == null) { throw new XmlException( @@ -43,7 +43,7 @@ public function extendEntity($entityObject) ); } - // Check to see if the parent test is already an extended test + // Check to see if the parent entity is already an extended entity if ($parentEntity->getParentName() !== null) { throw new XmlException( "Cannot extend an entity that already extends another entity. Entity: " . @@ -83,8 +83,7 @@ public function extendEntity($entityObject) } } - // Create new Test object to return - // Create new Test object to return + // Create new entity object to return $extendedEntity = new EntityDataObject( $entityObject->getName(), $newType,