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. + + +