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 ab6d52135..0545fe455 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;
use tests\unit\Util\TestLoggingUtil;
/**
@@ -33,7 +33,7 @@ function msqs($id = null)
/**
* Class EntityDataObjectTest
*/
-class EntityDataObjectTest extends TestCase
+class EntityDataObjectTest extends MagentoTestCase
{
/**
* Before test functionality
diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Persist/OperationDataArrayResolverTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Persist/OperationDataArrayResolverTest.php
index ea873c2e9..9e425e020 100644
--- a/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Persist/OperationDataArrayResolverTest.php
+++ b/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Persist/OperationDataArrayResolverTest.php
@@ -9,13 +9,13 @@
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;
use tests\unit\Util\TestLoggingUtil;
-class OperationDataArrayResolverTest extends TestCase
+class OperationDataArrayResolverTest extends MagentoTestCase
{
const NESTED_METADATA_EXPECTED_RESULT = ["parentType" => [
"name" => "Hopper",
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..e72c15b31
--- /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 a45ec9f32..7bef700ab 100644
--- a/dev/tests/unit/Magento/FunctionalTestFramework/Suite/SuiteGeneratorTest.php
+++ b/dev/tests/unit/Magento/FunctionalTestFramework/Suite/SuiteGeneratorTest.php
@@ -16,12 +16,12 @@
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;
use tests\unit\Util\TestLoggingUtil;
-class SuiteGeneratorTest extends TestCase
+class SuiteGeneratorTest extends MagentoTestCase
{
/**
@@ -76,7 +76,7 @@ public function testGenerateSuite()
TestLoggingUtil::getInstance()->validateMockLogStatement(
'info',
"suite generated",
- ['suite' => 'basicTestSuite', 'relative_path' => "_generated/basicTestSuite"]
+ ['suite' => 'basicTestSuite', 'relative_path' => "_generated" . DIRECTORY_SEPARATOR . "basicTestSuite"]
);
}
@@ -105,7 +105,7 @@ public function testGenerateAllSuites()
$this->setMockTestAndSuiteParserOutput($mockTestData, $mockData);
// parse and retrieve suite object with mocked data
- $exampleTestManifest = new DefaultTestManifest([], "sample/path");
+ $exampleTestManifest = new DefaultTestManifest([], "sample" . DIRECTORY_SEPARATOR . "path");
$mockSuiteGenerator = SuiteGenerator::getInstance();
$mockSuiteGenerator->generateAllSuites($exampleTestManifest);
@@ -113,7 +113,7 @@ public function testGenerateAllSuites()
TestLoggingUtil::getInstance()->validateMockLogStatement(
'info',
"suite generated",
- ['suite' => 'basicTestSuite', 'relative_path' => "_generated/basicTestSuite"]
+ ['suite' => 'basicTestSuite', 'relative_path' => "_generated" . DIRECTORY_SEPARATOR . "basicTestSuite"]
);
}
@@ -206,5 +206,6 @@ private function setMockTestAndSuiteParserOutput($testData, $suiteData)
public static function tearDownAfterClass()
{
TestLoggingUtil::getInstance()->clearMockLoggingUtil();
+ parent::tearDownAfterClass();
}
}
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 54458cd3e..d368d5fa1 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 a057ba074..4844ca684 100644
--- a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionGroupObjectTest.php
+++ b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionGroupObjectTest.php
@@ -15,12 +15,12 @@
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;
use tests\unit\Util\TestLoggingUtil;
-class ActionGroupObjectTest extends TestCase
+class ActionGroupObjectTest extends MagentoTestCase
{
const ACTION_GROUP_MERGE_KEY = 'TestKey';
diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionObjectTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionObjectTest.php
index 35339eb93..9ad8a01aa 100644
--- a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionObjectTest.php
+++ b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionObjectTest.php
@@ -15,13 +15,13 @@
use Magento\FunctionalTestingFramework\Test\Objects\ActionObject;
use Magento\FunctionalTestingFramework\Page\Handlers\SectionObjectHandler;
use Magento\FunctionalTestingFramework\Page\Objects\SectionObject;
-use PHPUnit\Framework\TestCase;
use tests\unit\Util\TestLoggingUtil;
+use Magento\FunctionalTestingFramework\Util\MagentoTestCase;
/**
* Class ActionObjectTest
*/
-class ActionObjectTest extends TestCase
+class ActionObjectTest extends MagentoTestCase
{
/**
* Before test functionality
diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Util/ActionMergeUtilTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Util/ActionMergeUtilTest.php
index 5bec686da..7a9c6c8c9 100644
--- a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Util/ActionMergeUtilTest.php
+++ b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Util/ActionMergeUtilTest.php
@@ -11,11 +11,11 @@
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;
use tests\unit\Util\TestLoggingUtil;
-class ActionMergeUtilTest extends TestCase
+class ActionMergeUtilTest extends MagentoTestCase
{
/**
* Before test functionality
diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Util/ActionObjectExtractorTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Util/ActionObjectExtractorTest.php
index f52d279eb..7872b3a02 100644
--- a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Util/ActionObjectExtractorTest.php
+++ b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Util/ActionObjectExtractorTest.php
@@ -7,10 +7,10 @@
use Magento\FunctionalTestingFramework\Test\Objects\ActionObject;
use Magento\FunctionalTestingFramework\Test\Util\ActionObjectExtractor;
-use PHPUnit\Framework\TestCase;
+use Magento\FunctionalTestingFramework\Util\MagentoTestCase;
use tests\unit\Util\TestLoggingUtil;
-class ActionObjectExtractorTest extends TestCase
+class ActionObjectExtractorTest extends MagentoTestCase
{
/** @var ActionObjectExtractor */
private $testActionObjectExtractor;
diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModulePathExtractorTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModulePathExtractorTest.php
index d22d0babf..5efa6384b 100644
--- a/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModulePathExtractorTest.php
+++ b/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModulePathExtractorTest.php
@@ -11,6 +11,42 @@
class ModulePathExtractorTest extends TestCase
{
+ const EXTENSION_PATH = "app"
+ . DIRECTORY_SEPARATOR
+ . "code"
+ . DIRECTORY_SEPARATOR
+ . "TestExtension"
+ . DIRECTORY_SEPARATOR
+ . "[Analytics]"
+ . DIRECTORY_SEPARATOR
+ . "Test"
+ . DIRECTORY_SEPARATOR
+ . "Mftf"
+ . DIRECTORY_SEPARATOR
+ . "Test"
+ . DIRECTORY_SEPARATOR
+ . "SomeText.xml";
+
+ const MAGENTO_PATH = "dev"
+ . DIRECTORY_SEPARATOR
+ . "tests"
+ . DIRECTORY_SEPARATOR
+ . "acceptance"
+ . DIRECTORY_SEPARATOR
+ . "tests"
+ . DIRECTORY_SEPARATOR
+ . "functional"
+ . DIRECTORY_SEPARATOR
+ . "Magento"
+ . DIRECTORY_SEPARATOR
+ . "FunctionalTest"
+ . DIRECTORY_SEPARATOR
+ . "[Analytics]"
+ . DIRECTORY_SEPARATOR
+ . "Test"
+ . DIRECTORY_SEPARATOR
+ . "SomeText.xml";
+
/**
* Validate correct module is returned for dev/tests path
* @throws \Exception
@@ -21,7 +57,7 @@ public function testGetMagentoModule()
$this->assertEquals(
'[Analytics]',
$modulePathExtractor->extractModuleName(
- "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/[Analytics]/Test/SomeText.xml"
+ self::MAGENTO_PATH
)
);
}
@@ -36,7 +72,7 @@ public function testGetExtensionModule()
$this->assertEquals(
'[Analytics]',
$modulePathExtractor->extractModuleName(
- "app/code/Magento/[Analytics]/Test/Mftf/Test/SomeText.xml"
+ self::EXTENSION_PATH
)
);
}
@@ -51,7 +87,7 @@ public function testMagentoModulePath()
$this->assertEquals(
'Magento',
$modulePathExtractor->getExtensionPath(
- "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/[Analytics]/Test/SomeText.xml"
+ self::MAGENTO_PATH
)
);
}
@@ -66,7 +102,7 @@ public function testExtensionModulePath()
$this->assertEquals(
'TestExtension',
$modulePathExtractor->getExtensionPath(
- "app/code/TestExtension/[Analytics]/Test/Mftf/Test/SomeText.xml"
+ self::EXTENSION_PATH
)
);
}
diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php
index 0623d47a5..85f09d325 100644
--- a/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php
+++ b/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php
@@ -13,10 +13,10 @@
use Magento\FunctionalTestingFramework\ObjectManagerFactory;
use Magento\FunctionalTestingFramework\Util\Logger\LoggingUtil;
use Magento\FunctionalTestingFramework\Util\ModuleResolver;
-use PHPUnit\Framework\TestCase;
+use Magento\FunctionalTestingFramework\Util\MagentoTestCase;
use tests\unit\Util\TestLoggingUtil;
-class ModuleResolverTest extends TestCase
+class ModuleResolverTest extends MagentoTestCase
{
/**
* Before test functionality
@@ -27,14 +27,6 @@ public function setUp()
TestLoggingUtil::getInstance()->setMockLoggingUtil();
}
- /**
- * remove all registered test doubles
- */
- protected function tearDown()
- {
- AspectMock::clean();
- }
-
/**
* After class functionality
* @return void
@@ -52,8 +44,8 @@ public function testGetModulePathsAlreadySet()
{
$this->setMockResolverClass();
$resolver = ModuleResolver::getInstance();
- $this->setMockResolverProperties($resolver, ["example/paths"]);
- $this->assertEquals(["example/paths"], $resolver->getModulesPath());
+ $this->setMockResolverProperties($resolver, ["example" . DIRECTORY_SEPARATOR . "paths"]);
+ $this->assertEquals(["example" . DIRECTORY_SEPARATOR . "paths"], $resolver->getModulesPath());
}
/**
@@ -62,11 +54,15 @@ public function testGetModulePathsAlreadySet()
*/
public function testGetModulePathsAggregate()
{
- $this->setMockResolverClass(false, null, null, null, ['example/paths']);
+ $this->setMockResolverClass(false, null, null, null, ["example" . DIRECTORY_SEPARATOR . "paths"]);
$resolver = ModuleResolver::getInstance();
$this->setMockResolverProperties($resolver, null, null);
$this->assertEquals(
- ['example/paths', 'example/paths', 'example/paths'],
+ [
+ "example" . DIRECTORY_SEPARATOR . "paths",
+ "example" . DIRECTORY_SEPARATOR . "paths",
+ "example" . DIRECTORY_SEPARATOR . "paths"
+ ],
$resolver->getModulesPath()
);
}
@@ -77,11 +73,21 @@ public function testGetModulePathsAggregate()
*/
public function testGetModulePathsLocations()
{
- $mockResolver = $this->setMockResolverClass(false, null, null, null, ['example/paths']);
+ $mockResolver = $this->setMockResolverClass(
+ false,
+ null,
+ null,
+ null,
+ ["example" . DIRECTORY_SEPARATOR . "paths"]
+ );
$resolver = ModuleResolver::getInstance();
$this->setMockResolverProperties($resolver, null, null);
$this->assertEquals(
- ['example/paths', 'example/paths', 'example/paths'],
+ [
+ "example" . DIRECTORY_SEPARATOR . "paths",
+ "example" . DIRECTORY_SEPARATOR . "paths",
+ "example" . DIRECTORY_SEPARATOR . "paths"
+ ],
$resolver->getModulesPath()
);
@@ -100,8 +106,14 @@ public function testGetModulePathsLocations()
. 'vendor' . DIRECTORY_SEPARATOR;
$mockResolver->verifyInvoked('globRelevantPaths', [$modulePath, '']);
- $mockResolver->verifyInvoked('globRelevantPaths', [$appCodePath, '/Test/Mftf']);
- $mockResolver->verifyInvoked('globRelevantPaths', [$vendorCodePath, '/Test/Mftf']);
+ $mockResolver->verifyInvoked(
+ 'globRelevantPaths',
+ [$appCodePath, DIRECTORY_SEPARATOR . 'Test' . DIRECTORY_SEPARATOR .'Mftf']
+ );
+ $mockResolver->verifyInvoked(
+ 'globRelevantPaths',
+ [$vendorCodePath, DIRECTORY_SEPARATOR . 'Test' . DIRECTORY_SEPARATOR .'Mftf']
+ );
}
/**
@@ -159,10 +171,10 @@ function ($arg1, $arg2) {
*/
public function testGetModulePathsNoAdminToken()
{
- $this->setMockResolverClass(false, null, ["example/paths"], []);
+ $this->setMockResolverClass(false, null, ["example" . DIRECTORY_SEPARATOR . "paths"], []);
$resolver = ModuleResolver::getInstance();
$this->setMockResolverProperties($resolver, null, null);
- $this->assertEquals(["example/paths"], $resolver->getModulesPath());
+ $this->assertEquals(["example" . DIRECTORY_SEPARATOR . "paths"], $resolver->getModulesPath());
}
/**
@@ -247,4 +259,13 @@ private function setMockResolverProperties($instance, $mockPaths = null, $mockMo
$property->setAccessible(true);
$property->setValue($instance, $mockBlacklist);
}
+
+ /**
+ * After method functionality
+ * @return void
+ */
+ protected function tearDown()
+ {
+ AspectMock::clean();
+ }
}
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..eafb5ee31
--- /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/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/ExtendedData.xml b/dev/tests/verification/TestModule/Data/ExtendedData.xml
new file mode 100644
index 000000000..74fa921d0
--- /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/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/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/SuiteGenerationTest.php b/dev/tests/verification/Tests/SuiteGenerationTest.php
index 0dd7017c0..52b34b3ef 100644
--- a/dev/tests/verification/Tests/SuiteGenerationTest.php
+++ b/dev/tests/verification/Tests/SuiteGenerationTest.php
@@ -50,7 +50,15 @@ public function setUp()
// copy config yml file to test dir
$fileSystem = new \Symfony\Component\Filesystem\Filesystem();
$fileSystem->copy(
- realpath(FW_BP . '/etc/config/codeception.dist.yml'),
+ realpath(
+ FW_BP
+ . DIRECTORY_SEPARATOR
+ . 'etc'
+ . DIRECTORY_SEPARATOR
+ . 'config'
+ . DIRECTORY_SEPARATOR
+ . 'codeception.dist.yml'
+ ),
self::CONFIG_YML_FILE
);
@@ -78,7 +86,7 @@ public function testSuiteGeneration1()
TestLoggingUtil::getInstance()->validateMockLogStatement(
'info',
"suite generated",
- ['suite' => $groupName, 'relative_path' => "_generated/$groupName"]
+ ['suite' => $groupName, 'relative_path' => "_generated" . DIRECTORY_SEPARATOR . $groupName]
);
self::$TEST_GROUPS[] = $groupName;
@@ -134,7 +142,7 @@ public function testSuiteGenerationParallel()
TestLoggingUtil::getInstance()->validateMockLogStatement(
'info',
"suite generated",
- ['suite' => $expectedGroup, 'relative_path' => "_generated/$expectedGroup"]
+ ['suite' => $expectedGroup, 'relative_path' => "_generated" . DIRECTORY_SEPARATOR . $expectedGroup]
);
self::$TEST_GROUPS[] = $groupName;
@@ -176,7 +184,7 @@ public function testSuiteGenerationHooks()
TestLoggingUtil::getInstance()->validateMockLogStatement(
'info',
"suite generated",
- ['suite' => $groupName, 'relative_path' => "_generated/$groupName"]
+ ['suite' => $groupName, 'relative_path' => "_generated" . DIRECTORY_SEPARATOR . $groupName]
);
self::$TEST_GROUPS[] = $groupName;
@@ -244,7 +252,7 @@ public function testSuiteGenerationSingleRun()
TestLoggingUtil::getInstance()->validateMockLogStatement(
'info',
"suite generated",
- ['suite' => $groupName, 'relative_path' => "_generated/$groupName"]
+ ['suite' => $groupName, 'relative_path' => "_generated" . DIRECTORY_SEPARATOR . $groupName]
);
self::$TEST_GROUPS[] = $groupName;
@@ -264,7 +272,15 @@ public function testSuiteGenerationSingleRun()
$this->assertTrue(in_array($expectedFile, $dirContents));
}
- $expectedManifest = "verification/_generated/default/" . PHP_EOL . "-g functionalSuite2" . PHP_EOL;
+ $expectedManifest = "verification"
+ . DIRECTORY_SEPARATOR
+ . "_generated"
+ . DIRECTORY_SEPARATOR
+ . "default"
+ . DIRECTORY_SEPARATOR
+ . PHP_EOL
+ . "-g functionalSuite2"
+ . PHP_EOL;
$this->assertEquals($expectedManifest, file_get_contents(self::getManifestFilePath()));
}
diff --git a/src/Magento/FunctionalTestingFramework/DataGenerator/Handlers/DataObjectHandler.php b/src/Magento/FunctionalTestingFramework/DataGenerator/Handlers/DataObjectHandler.php
index 0e79bcac1..5dc9293c2 100644
--- a/src/Magento/FunctionalTestingFramework/DataGenerator/Handlers/DataObjectHandler.php
+++ b/src/Magento/FunctionalTestingFramework/DataGenerator/Handlers/DataObjectHandler.php
@@ -11,12 +11,14 @@
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 +48,13 @@ class DataObjectHandler implements ObjectHandlerInterface
*/
private $entityDataObjects = [];
+ /**
+ * Instance of DataExtensionUtil class
+ *
+ * @var DataExtensionUtil
+ */
+ private $extendUtil;
+
/**
* Constructor
*/
@@ -57,6 +66,7 @@ private function __construct()
return;
}
$this->entityDataObjects = $this->processParserOutput($parserOutput);
+ $this->extendUtil = new DataExtensionUtil();
}
/**
@@ -81,10 +91,8 @@ 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)) {
+ return $this->extendDataObject($this->entityDataObjects[$name]);
}
return null;
@@ -97,6 +105,9 @@ public function getObject($name)
*/
public function getAllObjects()
{
+ foreach ($this->entityDataObjects as $entityName => $entityObject) {
+ $this->entityDataObjects[$entityName] = $this->extendDataObject($entityObject);
+ }
return $this->entityDataObjects;
}
@@ -122,6 +133,7 @@ private function processParserOutput($parserOutput)
$linkedEntities = [];
$uniquenessData = [];
$vars = [];
+ $parentEntity = null;
if (array_key_exists(self::_DATA, $rawEntity)) {
$data = $this->processDataElements($rawEntity);
@@ -144,7 +156,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;
}
@@ -239,4 +263,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 74e232145..736f76e01 100644
--- a/src/Magento/FunctionalTestingFramework/DataGenerator/Objects/EntityDataObject.php
+++ b/src/Magento/FunctionalTestingFramework/DataGenerator/Objects/EntityDataObject.php
@@ -65,6 +65,13 @@ class EntityDataObject
*/
private $uniquenessData = [];
+ /**
+ * String of parent Entity
+ *
+ * @var string
+ */
+ private $parentEntity;
+
/**
* Constructor
*
@@ -74,8 +81,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;
@@ -86,6 +94,7 @@ public function __construct($name, $type, $data, $linkedEntities, $uniquenessDat
}
$this->vars = $vars;
+ $this->parentEntity = $parentEntity;
}
/**
@@ -153,6 +162,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..53f0a6e6c
--- /dev/null
+++ b/src/Magento/FunctionalTestingFramework/DataGenerator/Util/DataExtensionUtil.php
@@ -0,0 +1,98 @@
+getObject($entityObject->getParentName());
+ if ($parentEntity == null) {
+ throw new XmlException(
+ "Parent Entity " .
+ $entityObject->getParentName() .
+ " not defined for Entity " .
+ $entityObject->getName() .
+ "." .
+ PHP_EOL
+ );
+ }
+
+ // 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: " .
+ $parentEntity->getName() .
+ "." .
+ PHP_EOL
+ );
+ }
+ if (MftfApplicationConfig::getConfig()->verboseEnabled()) {
+ 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());
+
+ // 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
+ $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 entity object to return
+ $extendedEntity = new EntityDataObject(
+ $entityObject->getName(),
+ $newType,
+ $newData,
+ $newLinkedReferences,
+ $newUniqueReferences,
+ $newVarReferences,
+ $entityObject->getParentName()
+ );
+ return $extendedEntity;
+ }
+}
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.
+
+
+