Skip to content

Commit 1efdb22

Browse files
committed
MQE-2016: Add warning for test materials that violate naming convention
1 parent 5ecf5be commit 1efdb22

File tree

7 files changed

+322
-10
lines changed

7 files changed

+322
-10
lines changed

src/Magento/FunctionalTestingFramework/DataGenerator/Handlers/DataObjectHandler.php

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Magento\FunctionalTestingFramework\ObjectManagerFactory;
1515
use Magento\FunctionalTestingFramework\DataGenerator\Util\DataExtensionUtil;
1616
use Magento\FunctionalTestingFramework\Util\Logger\LoggingUtil;
17+
use Magento\FunctionalTestingFramework\Util\Validation\NameValidationUtil;
1718

1819
class DataObjectHandler implements ObjectHandlerInterface
1920
{
@@ -58,6 +59,20 @@ class DataObjectHandler implements ObjectHandlerInterface
5859
*/
5960
private $extendUtil;
6061

62+
/**
63+
* Validates and keeps track of entity name violations.
64+
*
65+
* @var NameValidationUtil
66+
*/
67+
private $entityNameValidator;
68+
69+
/**
70+
* Validates and keeps track of entity key violations.
71+
*
72+
* @var NameValidationUtil
73+
*/
74+
private $entityKeyValidator;
75+
6176
/**
6277
* Constructor
6378
*/
@@ -68,6 +83,8 @@ private function __construct()
6883
if (!$parserOutput) {
6984
return;
7085
}
86+
$this->entityNameValidator = new NameValidationUtil();
87+
$this->entityKeyValidator = new NameValidationUtil();
7188
$this->entityDataObjects = $this->processParserOutput($parserOutput);
7289
$this->extendUtil = new DataExtensionUtil();
7390
}
@@ -132,14 +149,15 @@ private function processParserOutput($parserOutput)
132149
throw new XmlException(sprintf(self::DATA_NAME_ERROR_MSG, $name));
133150
}
134151

152+
$filename = $rawEntity[self::_FILENAME] ?? null;
153+
$this->entityNameValidator->validateDataEntityName($name, $filename);
135154
$type = $rawEntity[self::_TYPE] ?? null;
136155
$data = [];
137156
$deprecated = null;
138157
$linkedEntities = [];
139158
$uniquenessData = [];
140159
$vars = [];
141160
$parentEntity = null;
142-
$filename = $rawEntity[self::_FILENAME] ?? null;
143161

144162
if (array_key_exists(self::_DATA, $rawEntity)) {
145163
$data = $this->processDataElements($rawEntity);
@@ -188,7 +206,8 @@ private function processParserOutput($parserOutput)
188206

189207
$entityDataObjects[$entityDataObject->getName()] = $entityDataObject;
190208
}
191-
209+
$this->entityNameValidator->summarize("data entity name");
210+
$this->entityKeyValidator->summarize("data entity key");
192211
return $entityDataObjects;
193212
}
194213

@@ -220,7 +239,10 @@ private function processDataElements($entityData)
220239
{
221240
$dataValues = [];
222241
foreach ($entityData[self::_DATA] as $dataElement) {
223-
$dataElementKey = strtolower($dataElement[self::_KEY]);
242+
$originalDataElementKey = $dataElement[self::_KEY];
243+
$filename = $entityData[self::_FILENAME] ?? null;
244+
$this->entityKeyValidator->validateDataEntityKey($originalDataElementKey, $filename);
245+
$dataElementKey = strtolower($originalDataElementKey);
224246
$dataElementValue = $dataElement[self::_VALUE] ?? "";
225247
$dataValues[$dataElementKey] = $dataElementValue;
226248
}

src/Magento/FunctionalTestingFramework/DataGenerator/Handlers/OperationDefinitionObjectHandler.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use Magento\FunctionalTestingFramework\ObjectManager\ObjectHandlerInterface;
1313
use Magento\FunctionalTestingFramework\ObjectManagerFactory;
1414
use Magento\FunctionalTestingFramework\Util\Logger\LoggingUtil;
15+
use Magento\FunctionalTestingFramework\Util\Validation\NameValidationUtil;
1516

1617
class OperationDefinitionObjectHandler implements ObjectHandlerInterface
1718
{
@@ -136,7 +137,11 @@ private function initialize()
136137
$objectManager = ObjectManagerFactory::getObjectManager();
137138
$parser = $objectManager->create(OperationDefinitionParser::class);
138139
$parserOutput = $parser->readOperationMetadata()[OperationDefinitionObjectHandler::ENTITY_OPERATION_ROOT_TAG];
140+
141+
$operationNameValidator = new NameValidationUtil();
139142
foreach ($parserOutput as $dataDefName => $opDefArray) {
143+
$operationNameValidator->validateMetadataOperationName($dataDefName);
144+
140145
$operation = $opDefArray[OperationDefinitionObjectHandler::ENTITY_OPERATION_TYPE];
141146
$dataType = $opDefArray[OperationDefinitionObjectHandler::ENTITY_OPERATION_DATA_TYPE];
142147
$url = $opDefArray[OperationDefinitionObjectHandler::ENTITY_OPERATION_URL] ?? null;
@@ -230,6 +235,7 @@ private function initialize()
230235
$deprecated
231236
);
232237
}
238+
$operationNameValidator->summarize("metadata operation name");
233239
}
234240

235241
/**

src/Magento/FunctionalTestingFramework/Page/Handlers/PageObjectHandler.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use Magento\FunctionalTestingFramework\ObjectManagerFactory;
1111
use Magento\FunctionalTestingFramework\Page\Objects\PageObject;
1212
use Magento\FunctionalTestingFramework\Util\Logger\LoggingUtil;
13+
use Magento\FunctionalTestingFramework\Util\Validation\NameValidationUtil;
1314
use Magento\FunctionalTestingFramework\XmlParser\PageParser;
1415
use Magento\FunctionalTestingFramework\Exceptions\XmlException;
1516

@@ -54,10 +55,14 @@ private function __construct()
5455
return;
5556
}
5657

58+
$pageNameValidator = new NameValidationUtil();
5759
foreach ($parserOutput as $pageName => $pageData) {
5860
if (preg_match('/[^a-zA-Z0-9_]/', $pageName)) {
5961
throw new XmlException(sprintf(self::NAME_BLACKLIST_ERROR_MSG, $pageName));
6062
}
63+
64+
$filename = $pageData[self::FILENAME] ?? null;
65+
$pageNameValidator->validatePageName($pageName, $filename);
6166
$area = $pageData[self::AREA] ?? null;
6267
$url = $pageData[self::URL] ?? null;
6368

@@ -68,7 +73,6 @@ private function __construct()
6873
$module = $pageData[self::MODULE] ?? null;
6974
$sectionNames = array_keys($pageData[self::SECTION] ?? []);
7075
$parameterized = $pageData[self::PARAMETERIZED] ?? false;
71-
$filename = $pageData[self::FILENAME] ?? null;
7276
$deprecated = $pageData[self::OBJ_DEPRECATED] ?? null;
7377

7478
if ($deprecated !== null) {
@@ -81,6 +85,7 @@ private function __construct()
8185
$this->pageObjects[$pageName] =
8286
new PageObject($pageName, $url, $module, $sectionNames, $parameterized, $area, $filename, $deprecated);
8387
}
88+
$pageNameValidator->summarize("page name");
8489
}
8590

8691
/**

src/Magento/FunctionalTestingFramework/Page/Handlers/SectionObjectHandler.php

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
use Magento\FunctionalTestingFramework\ObjectManagerFactory;
1111
use Magento\FunctionalTestingFramework\Page\Objects\ElementObject;
1212
use Magento\FunctionalTestingFramework\Page\Objects\SectionObject;
13-
use Magento\FunctionalTestingFramework\Test\Util\TestObjectExtractor;
1413
use Magento\FunctionalTestingFramework\Util\Logger\LoggingUtil;
14+
use Magento\FunctionalTestingFramework\Util\Validation\NameValidationUtil;
1515
use Magento\FunctionalTestingFramework\XmlParser\SectionParser;
1616
use Magento\FunctionalTestingFramework\Exceptions\XmlException;
1717

@@ -58,18 +58,25 @@ private function __construct()
5858
return;
5959
}
6060

61+
$sectionNameValidator = new NameValidationUtil();
62+
$elementNameValidator = new NameValidationUtil();
6163
foreach ($parserOutput as $sectionName => $sectionData) {
6264
$elements = [];
6365

6466
if (preg_match('/[^a-zA-Z0-9_]/', $sectionName)) {
6567
throw new XmlException(sprintf(self::SECTION_NAME_ERROR_MSG, $sectionName));
6668
}
6769

70+
$filename = $sectionData[self::FILENAME] ?? null;
71+
$sectionNameValidator->validateSectionName($sectionName, $filename);
72+
6873
try {
6974
foreach ($sectionData[SectionObjectHandler::ELEMENT] as $elementName => $elementData) {
7075
if (preg_match('/[^a-zA-Z0-9_]/', $elementName)) {
7176
throw new XmlException(sprintf(self::ELEMENT_NAME_ERROR_MSG, $elementName, $sectionName));
7277
}
78+
79+
$elementNameValidator->validateElementName($elementName, $filename);
7380
$elementType = $elementData[SectionObjectHandler::TYPE] ?? null;
7481
$elementSelector = $elementData[SectionObjectHandler::SELECTOR] ?? null;
7582
$elementLocatorFunc = $elementData[SectionObjectHandler::LOCATOR_FUNCTION] ?? null;
@@ -96,7 +103,6 @@ private function __construct()
96103
throw new XmlException($exception->getMessage() . " in Section '{$sectionName}'");
97104
}
98105

99-
$filename = $sectionData[self::FILENAME] ?? null;
100106
$sectionDeprecated = $sectionData[self::OBJ_DEPRECATED] ?? null;
101107

102108
if ($sectionDeprecated !== null) {
@@ -113,6 +119,8 @@ private function __construct()
113119
$sectionDeprecated
114120
);
115121
}
122+
$sectionNameValidator->summarize("section name");
123+
$elementNameValidator->summarize("element name");
116124
}
117125

118126
/**

src/Magento/FunctionalTestingFramework/Test/Handlers/ActionGroupObjectHandler.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@
99
use Magento\FunctionalTestingFramework\ObjectManager\ObjectHandlerInterface;
1010
use Magento\FunctionalTestingFramework\ObjectManagerFactory;
1111
use Magento\FunctionalTestingFramework\Test\Objects\ActionGroupObject;
12-
use Magento\FunctionalTestingFramework\Test\Objects\TestObject;
1312
use Magento\FunctionalTestingFramework\Test\Parsers\ActionGroupDataParser;
1413
use Magento\FunctionalTestingFramework\Test\Util\ActionGroupObjectExtractor;
1514
use Magento\FunctionalTestingFramework\Test\Util\ObjectExtensionUtil;
15+
use Magento\FunctionalTestingFramework\Util\Validation\NameValidationUtil;
1616

1717
/**
1818
* Class ActionGroupObjectHandler
@@ -22,6 +22,7 @@ class ActionGroupObjectHandler implements ObjectHandlerInterface
2222
const BEFORE_AFTER_ERROR_MSG = "Merge Error - Steps cannot have both before and after attributes.\tTestStep='%s'";
2323
const ACTION_GROUP_ROOT = 'actionGroups';
2424
const ACTION_GROUP = 'actionGroup';
25+
const ACTION_GROUP_FILENAME_ATTRIBUTE = 'filename';
2526

2627
/**
2728
* Single instance of class var
@@ -110,14 +111,21 @@ private function initActionGroups()
110111
$actionGroupObjectExtractor = new ActionGroupObjectExtractor();
111112
$neededActionGroup = $parsedActionGroups[ActionGroupObjectHandler::ACTION_GROUP_ROOT];
112113

114+
$actionGroupNameValidator = new NameValidationUtil();
113115
foreach ($neededActionGroup as $actionGroupName => $actionGroupData) {
116+
if (!in_array($actionGroupName, ["nodeName", "xsi:noNamespaceSchemaLocation"])) {
117+
$filename = $actionGroupData[ActionGroupObjectHandler::ACTION_GROUP_FILENAME_ATTRIBUTE];
118+
$actionGroupNameValidator->validateActionGroupName($actionGroupName, $filename);
119+
}
120+
114121
if (!is_array($actionGroupData)) {
115122
continue;
116123
}
117124

118125
$this->actionGroups[$actionGroupName] =
119126
$actionGroupObjectExtractor->extractActionGroup($actionGroupData);
120127
}
128+
$actionGroupNameValidator->summarize("action group name");
121129
}
122130

123131
/**

src/Magento/FunctionalTestingFramework/Test/Handlers/TestObjectHandler.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,16 @@
1515
use Magento\FunctionalTestingFramework\Test\Parsers\TestDataParser;
1616
use Magento\FunctionalTestingFramework\Test\Util\ObjectExtensionUtil;
1717
use Magento\FunctionalTestingFramework\Test\Util\TestObjectExtractor;
18-
use Magento\FunctionalTestingFramework\Test\Util\AnnotationExtractor;
1918
use Magento\FunctionalTestingFramework\Util\Logger\LoggingUtil;
20-
use PHP_CodeSniffer\Tokenizers\PHP;
19+
use Magento\FunctionalTestingFramework\Util\Validation\NameValidationUtil;
2120

2221
/**
2322
* Class TestObjectHandler
2423
*/
2524
class TestObjectHandler implements ObjectHandlerInterface
2625
{
2726
const XML_ROOT = 'tests';
27+
const TEST_FILENAME_ATTRIBUTE = 'filename';
2828

2929
/**
3030
* Test Object Handler
@@ -142,7 +142,10 @@ private function initTestData()
142142
}
143143

144144
$exceptionCollector = new ExceptionCollector();
145+
$testNameValidator = new NameValidationUtil();
145146
foreach ($parsedTestArray as $testName => $testData) {
147+
$filename = $testData[TestObjectHandler::TEST_FILENAME_ATTRIBUTE];
148+
$testNameValidator->validateTestName($testName, $filename);
146149
if (!is_array($testData)) {
147150
continue;
148151
}
@@ -153,7 +156,7 @@ private function initTestData()
153156
}
154157
}
155158
$exceptionCollector->throwException();
156-
159+
$testNameValidator->summarize("test name");
157160
$testObjectExtractor->getAnnotationExtractor()->validateStoryTitleUniqueness();
158161
$testObjectExtractor->getAnnotationExtractor()->validateTestCaseIdTitleUniqueness();
159162
}

0 commit comments

Comments
 (0)