diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Util/Validation/DuplicateNodeValidationUtilTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Util/Validation/DuplicateNodeValidationUtilTest.php index ad47b73ba..5dba1cb8b 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Util/Validation/DuplicateNodeValidationUtilTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Util/Validation/DuplicateNodeValidationUtilTest.php @@ -29,6 +29,7 @@ public function testTestActionValidation() '; $uniqueIdentifier = "stepKey"; $filename = "file"; + $testName = "test"; // Perform Test $dom = new \DOMDocument(); @@ -40,8 +41,7 @@ public function testTestActionValidation() $validator->validateChildUniqueness( $testNode, $filename, - $uniqueIdentifier, - $exceptionCollector + $testName ); $this->expectException(\Exception::class); $exceptionCollector->throwException(); diff --git a/src/Magento/FunctionalTestingFramework/DataGenerator/Config/Dom.php b/src/Magento/FunctionalTestingFramework/DataGenerator/Config/Dom.php index abef7390a..d4b8f7c8f 100644 --- a/src/Magento/FunctionalTestingFramework/DataGenerator/Config/Dom.php +++ b/src/Magento/FunctionalTestingFramework/DataGenerator/Config/Dom.php @@ -18,6 +18,7 @@ class Dom extends \Magento\FunctionalTestingFramework\Config\MftfDom { const DATA_FILE_NAME_ENDING = "Data"; const DATA_META_FILENAME_ATTRIBUTE = "filename"; + const DATA_META_NAME_ATTRIBUTE = "name"; /** * NodeValidationUtil @@ -74,7 +75,8 @@ public function initDom($xml, $filename = null) $entityNode->setAttribute(self::DATA_META_FILENAME_ATTRIBUTE, $filename); $this->validationUtil->validateChildUniqueness( $entityNode, - $filename + $filename, + $entityNode->getAttribute(self::DATA_META_NAME_ATTRIBUTE) ); } } diff --git a/src/Magento/FunctionalTestingFramework/DataGenerator/Config/OperationDom.php b/src/Magento/FunctionalTestingFramework/DataGenerator/Config/OperationDom.php index 98694ea47..e76289919 100644 --- a/src/Magento/FunctionalTestingFramework/DataGenerator/Config/OperationDom.php +++ b/src/Magento/FunctionalTestingFramework/DataGenerator/Config/OperationDom.php @@ -18,6 +18,7 @@ class OperationDom extends \Magento\FunctionalTestingFramework\Config\MftfDom { const METADATA_FILE_NAME_ENDING = "meta"; const METADATA_META_FILENAME_ATTRIBUTE = "filename"; + const METADATA_META_NAME_ATTRIBUTE = "name"; /** * NodeValidationUtil @@ -74,7 +75,8 @@ public function initDom($xml, $filename = null) $operationNode->setAttribute(self::METADATA_META_FILENAME_ATTRIBUTE, $filename); $this->validateOperationElements( $operationNode, - $filename + $filename, + $operationNode->getAttribute(self::METADATA_META_NAME_ATTRIBUTE) ); } } @@ -86,13 +88,15 @@ public function initDom($xml, $filename = null) * Recurse through child elements and validate uniqueKeys * @param \DOMElement $parentNode * @param string $filename + * @param string $topParent * @return void */ - public function validateOperationElements(\DOMElement $parentNode, $filename) + public function validateOperationElements(\DOMElement $parentNode, $filename, $topParent) { $this->validationUtil->validateChildUniqueness( $parentNode, - $filename + $filename, + $topParent ); $childNodes = $parentNode->childNodes; @@ -103,7 +107,8 @@ public function validateOperationElements(\DOMElement $parentNode, $filename) } $this->validateOperationElements( $currentNode, - $filename + $filename, + $topParent ); } } diff --git a/src/Magento/FunctionalTestingFramework/Page/Config/Dom.php b/src/Magento/FunctionalTestingFramework/Page/Config/Dom.php index 0d8739636..bb6d08f58 100644 --- a/src/Magento/FunctionalTestingFramework/Page/Config/Dom.php +++ b/src/Magento/FunctionalTestingFramework/Page/Config/Dom.php @@ -20,6 +20,7 @@ class Dom extends \Magento\FunctionalTestingFramework\Config\MftfDom { const PAGE_META_FILENAME_ATTRIBUTE = "filename"; + const PAGE_META_NAME_ATTRIBUTE = "name"; /** * Module Path extractor @@ -79,7 +80,11 @@ public function initDom($xml, $filename = null) $dom = parent::initDom($xml, $filename); $pagesNode = $dom->getElementsByTagName('pages')->item(0); - $this->validationUtil->validateChildUniqueness($pagesNode, $filename); + $this->validationUtil->validateChildUniqueness( + $pagesNode, + $filename, + $pagesNode->getAttribute(self::PAGE_META_NAME_ATTRIBUTE) + ); $pageNodes = $dom->getElementsByTagName('page'); $currentModule = $this->modulePathExtractor->extractModuleName($filename) . diff --git a/src/Magento/FunctionalTestingFramework/Page/Config/SectionDom.php b/src/Magento/FunctionalTestingFramework/Page/Config/SectionDom.php index c3476e7dd..b7f5d5db9 100644 --- a/src/Magento/FunctionalTestingFramework/Page/Config/SectionDom.php +++ b/src/Magento/FunctionalTestingFramework/Page/Config/SectionDom.php @@ -20,6 +20,7 @@ class SectionDom extends \Magento\FunctionalTestingFramework\Config\MftfDom { const SECTION_META_FILENAME_ATTRIBUTE = "filename"; + const SECTION_META_NAME_ATTRIBUTE = "name"; /** * NodeValidationUtil @@ -71,7 +72,11 @@ public function initDom($xml, $filename = null) $sectionNodes = $dom->getElementsByTagName('section'); foreach ($sectionNodes as $sectionNode) { $sectionNode->setAttribute(self::SECTION_META_FILENAME_ATTRIBUTE, $filename); - $this->validationUtil->validateChildUniqueness($sectionNode, $filename); + $this->validationUtil->validateChildUniqueness( + $sectionNode, + $filename, + $sectionNode->getAttribute(self::SECTION_META_NAME_ATTRIBUTE) + ); } return $dom; } diff --git a/src/Magento/FunctionalTestingFramework/Test/Config/ActionGroupDom.php b/src/Magento/FunctionalTestingFramework/Test/Config/ActionGroupDom.php index 36f7a4384..86ecc6d0d 100644 --- a/src/Magento/FunctionalTestingFramework/Test/Config/ActionGroupDom.php +++ b/src/Magento/FunctionalTestingFramework/Test/Config/ActionGroupDom.php @@ -15,6 +15,7 @@ class ActionGroupDom extends Dom { const ACTION_GROUP_FILE_NAME_ENDING = "ActionGroup.xml"; + const ACTION_GROUP_META_NAME_ATTRIBUTE = "name"; /** * Takes a dom element from xml and appends the filename based on location while also validating the action group @@ -35,22 +36,9 @@ public function initDom($xml, $filename = null) $actionGroupNode->setAttribute(self::TEST_META_FILENAME_ATTRIBUTE, $filename); $this->validationUtil->validateChildUniqueness( $actionGroupNode, - $filename + $filename, + $actionGroupNode->getAttribute(self::ACTION_GROUP_META_NAME_ATTRIBUTE) ); - $beforeNode = $actionGroupNode->getElementsByTagName('before')->item(0); - $afterNode = $actionGroupNode->getElementsByTagName('after')->item(0); - if (isset($beforeNode)) { - $this->validationUtil->validateChildUniqueness( - $beforeNode, - $filename - ); - } - if (isset($afterNode)) { - $this->validationUtil->validateChildUniqueness( - $afterNode, - $filename - ); - } if ($actionGroupNode->getAttribute(self::TEST_MERGE_POINTER_AFTER) !== "") { $this->appendMergePointerToActions( $actionGroupNode, diff --git a/src/Magento/FunctionalTestingFramework/Test/Config/Dom.php b/src/Magento/FunctionalTestingFramework/Test/Config/Dom.php index 828586b3c..2909cf2d2 100644 --- a/src/Magento/FunctionalTestingFramework/Test/Config/Dom.php +++ b/src/Magento/FunctionalTestingFramework/Test/Config/Dom.php @@ -104,7 +104,8 @@ public function initDom($xml, $filename = null) $this->validationUtil->validateChildUniqueness( $testNode, - $filename + $filename, + $testNode->getAttribute(self::TEST_META_NAME_ATTRIBUTE) ); $beforeNode = $testNode->getElementsByTagName('before')->item(0); $afterNode = $testNode->getElementsByTagName('after')->item(0); @@ -112,13 +113,15 @@ public function initDom($xml, $filename = null) if (isset($beforeNode)) { $this->validationUtil->validateChildUniqueness( $beforeNode, - $filename + $filename, + $testNode->getAttribute(self::TEST_META_NAME_ATTRIBUTE) . "/before" ); } if (isset($afterNode)) { $this->validationUtil->validateChildUniqueness( $afterNode, - $filename + $filename, + $testNode->getAttribute(self::TEST_META_NAME_ATTRIBUTE) . "/after" ); } } diff --git a/src/Magento/FunctionalTestingFramework/Util/Validation/DuplicateNodeValidationUtil.php b/src/Magento/FunctionalTestingFramework/Util/Validation/DuplicateNodeValidationUtil.php index 8508f1abe..964e68137 100644 --- a/src/Magento/FunctionalTestingFramework/Util/Validation/DuplicateNodeValidationUtil.php +++ b/src/Magento/FunctionalTestingFramework/Util/Validation/DuplicateNodeValidationUtil.php @@ -45,7 +45,7 @@ public function __construct($uniqueKey, $exceptionCollector) * @param string $filename * @return void */ - public function validateChildUniqueness(\DOMElement $parentNode, $filename) + public function validateChildUniqueness(\DOMElement $parentNode, $filename, $parentKey) { $childNodes = $parentNode->childNodes; $type = ucfirst($parentNode->tagName); @@ -69,7 +69,7 @@ public function validateChildUniqueness(\DOMElement $parentNode, $filename) $duplicates = array_diff_assoc($keyValues, $withoutDuplicates); $keyError = ""; foreach ($duplicates as $duplicateKey => $duplicateValue) { - $keyError .= "\t{$this->uniqueKey}: {$duplicateValue} is used more than once.\n"; + $keyError .= "\t{$this->uniqueKey}: {$duplicateValue} is used more than once. (Parent: {$parentKey})\n"; } $errorMsg = "{$type} cannot use {$this->uniqueKey}s more than once.\t\n{$keyError}\tin file: {$filename}";