Skip to content

Commit c37ba96

Browse files
authored
Merge pull request #616 from magento/MQE-2016
MQE-2016: Add warning for test materials that violate naming convention
2 parents bedde57 + 6aaa2f0 commit c37ba96

File tree

7 files changed

+214
-9
lines changed

7 files changed

+214
-9
lines changed

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

Lines changed: 33 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,19 @@ 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->validatePascalCase(
154+
$name,
155+
NameValidationUtil::DATA_ENTITY_NAME,
156+
$filename
157+
);
135158
$type = $rawEntity[self::_TYPE] ?? null;
136159
$data = [];
137160
$deprecated = null;
138161
$linkedEntities = [];
139162
$uniquenessData = [];
140163
$vars = [];
141164
$parentEntity = null;
142-
$filename = $rawEntity[self::_FILENAME] ?? null;
143165

144166
if (array_key_exists(self::_DATA, $rawEntity)) {
145167
$data = $this->processDataElements($rawEntity);
@@ -188,7 +210,8 @@ private function processParserOutput($parserOutput)
188210

189211
$entityDataObjects[$entityDataObject->getName()] = $entityDataObject;
190212
}
191-
213+
$this->entityNameValidator->summarize(NameValidationUtil::DATA_ENTITY_NAME);
214+
$this->entityKeyValidator->summarize(NameValidationUtil::DATA_ENTITY_KEY);
192215
return $entityDataObjects;
193216
}
194217

@@ -220,7 +243,14 @@ private function processDataElements($entityData)
220243
{
221244
$dataValues = [];
222245
foreach ($entityData[self::_DATA] as $dataElement) {
223-
$dataElementKey = strtolower($dataElement[self::_KEY]);
246+
$originalDataElementKey = $dataElement[self::_KEY];
247+
$filename = $entityData[self::_FILENAME] ?? null;
248+
$this->entityKeyValidator->validateCamelCase(
249+
$originalDataElementKey,
250+
NameValidationUtil::DATA_ENTITY_KEY,
251+
$filename
252+
);
253+
$dataElementKey = strtolower($originalDataElementKey);
224254
$dataElementValue = $dataElement[self::_VALUE] ?? "";
225255
$dataValues[$dataElementKey] = $dataElementValue;
226256
}

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

Lines changed: 9 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,14 @@ 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->validatePascalCase(
144+
$dataDefName,
145+
NameValidationUtil::METADATA_OPERATION_NAME
146+
);
147+
140148
$operation = $opDefArray[OperationDefinitionObjectHandler::ENTITY_OPERATION_TYPE];
141149
$dataType = $opDefArray[OperationDefinitionObjectHandler::ENTITY_OPERATION_DATA_TYPE];
142150
$url = $opDefArray[OperationDefinitionObjectHandler::ENTITY_OPERATION_URL] ?? null;
@@ -230,6 +238,7 @@ private function initialize()
230238
$deprecated
231239
);
232240
}
241+
$operationNameValidator->summarize(NameValidationUtil::METADATA_OPERATION_NAME);
233242
}
234243

235244
/**

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

Lines changed: 6 additions & 0 deletions
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->validateAffixes($pageName, NameValidationUtil::PAGE, $filename);
6166
$area = $pageData[self::AREA] ?? null;
6267
$url = $pageData[self::URL] ?? null;
6368

@@ -82,6 +87,7 @@ private function __construct()
8287
$this->pageObjects[$pageName] =
8388
new PageObject($pageName, $url, $module, $sectionNames, $parameterized, $area, $filename, $deprecated);
8489
}
90+
$pageNameValidator->summarize(NameValidationUtil::PAGE . " name");
8591
}
8692

8793
/**

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

Lines changed: 14 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,29 @@ 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->validateAffixes($sectionName, NameValidationUtil::SECTION, $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->validateCamelCase(
80+
$elementName,
81+
NameValidationUtil::SECTION_ELEMENT_NAME,
82+
$filename
83+
);
7384
$elementType = $elementData[SectionObjectHandler::TYPE] ?? null;
7485
$elementSelector = $elementData[SectionObjectHandler::SELECTOR] ?? null;
7586
$elementLocatorFunc = $elementData[SectionObjectHandler::LOCATOR_FUNCTION] ?? null;
@@ -96,7 +107,6 @@ private function __construct()
96107
throw new XmlException($exception->getMessage() . " in Section '{$sectionName}'");
97108
}
98109

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

102112
if ($sectionDeprecated !== null) {
@@ -113,6 +123,8 @@ private function __construct()
113123
$sectionDeprecated
114124
);
115125
}
126+
$sectionNameValidator->summarize(NameValidationUtil::SECTION . " name");
127+
$elementNameValidator->summarize(NameValidationUtil::SECTION_ELEMENT_NAME);
116128
}
117129

118130
/**

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

Lines changed: 13 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,25 @@ 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->validatePascalCase(
119+
$actionGroupName,
120+
NameValidationUtil::ACTION_GROUP_NAME,
121+
$filename
122+
);
123+
}
124+
114125
if (!is_array($actionGroupData)) {
115126
continue;
116127
}
117128

118129
$this->actionGroups[$actionGroupName] =
119130
$actionGroupObjectExtractor->extractActionGroup($actionGroupData);
120131
}
132+
$actionGroupNameValidator->summarize(NameValidationUtil::ACTION_GROUP_NAME);
121133
}
122134

123135
/**

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->validatePascalCase($testName, NameValidationUtil::TEST_NAME, $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(NameValidationUtil::TEST_NAME);
157160
$testObjectExtractor->getAnnotationExtractor()->validateStoryTitleUniqueness();
158161
$testObjectExtractor->getAnnotationExtractor()->validateTestCaseIdTitleUniqueness();
159162
}

0 commit comments

Comments
 (0)