Skip to content

Commit d622476

Browse files
committed
AC-9497: moved GraphQL specific test to appropriate class and decomposed the implementation
1 parent 41b64cd commit d622476

File tree

2 files changed

+64
-116
lines changed

2 files changed

+64
-116
lines changed

dev/tests/static/testsuite/Magento/Test/GraphQl/LiveCodeTest.php

Lines changed: 64 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -66,42 +66,76 @@ public function testCodeStyle(): void
6666
*/
6767
public function testCorrespondingGraphQlChangeExists(): void
6868
{
69-
$changedModules = PHPCodeTest::getChangedCoreModules(self::$changeCheckDir);
69+
$modulesWithViewLayerChanges = self::getModulesWithViewLayerChanges();
70+
$changedGraphQlModules = self::getChangedGraphQlModules();
7071

7172
// Check if for each module change, a graphQL module change happened
72-
foreach ($changedModules as $module => $fileStat) {
73+
foreach ($modulesWithViewLayerChanges as $module) {
74+
$this->assertArrayHasKey(
75+
$module . 'GraphQl',
76+
$changedGraphQlModules,
77+
$module . " module: Required GraphQL changes to module (". $module ."GraphQl) are not included in the pull request"
78+
);
79+
}
80+
}
81+
82+
/**
83+
* returns a array with the list of modules having view later change
84+
*
85+
* @return array
86+
*/
87+
private static function getModulesWithViewLayerChanges(): array
88+
{
89+
$whitelistFiles = PHPCodeTest::getWhitelist(['php'], '', '', '/_files/whitelist/graphql.txt');
90+
91+
$affectedModules = [];
92+
foreach ($whitelistFiles as $whitelistFile) {
93+
$changedModule = self::getChangedModuleName($whitelistFile);
94+
95+
$isGraphQlModule = str_ends_with($changedModule[1], 'GraphQl');
96+
$isGraphQlModuleExists = file_exists(self::$changeCheckDir . '/' . $changedModule[1] . 'GraphQl');
7397

74-
if (str_ends_with($module, 'GraphQl')) {
75-
continue;
98+
if (!$isGraphQlModule && $isGraphQlModuleExists &&
99+
(
100+
in_array($changedModule[2], ["Controller", "Model", "Block"]) ||
101+
(($changedModule[2] == "Ui") && in_array($changedModule[3], ["Component", "DataProvider"]))
102+
)
103+
) {
104+
$affectedModules[] = $changedModule[1];
76105
}
106+
}
107+
return $affectedModules;
108+
}
77109

78-
$fileChanged = $fileStat['filesChanged'] ||
79-
$fileStat['insertions'] ||
80-
$fileStat['deletions'] ||
81-
$fileStat['paramsChanged'];
82-
83-
// check if there is a reasonable change happened in the module
84-
if ($fileChanged) {
85-
$this->assertArrayHasKey(
86-
$module . 'GraphQl',
87-
$changedModules,
88-
$module . "'s corresponding GraphQl module change is missing"
89-
);
90-
91-
if(isset($changedModules[$module . 'GraphQl'])) {
92-
93-
// assert if there is change in graphql module
94-
$this->assertTrue(
95-
(
96-
$changedModules[$module . 'GraphQl']['filesChanged'] ||
97-
$changedModules[$module . 'GraphQl']['insertions'] ||
98-
$changedModules[$module . 'GraphQl']['deletions'] ||
99-
$changedModules[$module . 'GraphQl']['paramsChanged']
100-
),
101-
$module . "'s corresponding GraphQl module change is missing"
102-
);
103-
}
110+
/**
111+
* returns a array with the list of graphql module having changes
112+
*
113+
* @return array
114+
*/
115+
private static function getChangedGraphQlModules(): array
116+
{
117+
$whitelistFiles = PHPCodeTest::getWhitelist(['php', 'graphqls'], '', '', '/_files/whitelist/graphql.txt');
118+
119+
$affectedModules = [];
120+
foreach ($whitelistFiles as $whitelistFile) {
121+
$changedModule = self::getChangedModuleName($whitelistFile);
122+
123+
$isGraphQlModule = str_ends_with($changedModule[1], 'GraphQl');
124+
125+
if ($isGraphQlModule) {
126+
$affectedModules[] = $changedModule[1];
104127
}
105128
}
129+
return $affectedModules;
130+
}
131+
132+
/**
133+
* @param string $whitelistFile
134+
* @return array
135+
*/
136+
private static function getChangedModuleName($whitelistFile): array
137+
{
138+
$fileName = substr($whitelistFile, strlen(self::$changeCheckDir));
139+
return explode('/', $fileName);
106140
}
107141
}

dev/tests/static/testsuite/Magento/Test/Php/LiveCodeTest.php

Lines changed: 0 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -67,92 +67,6 @@ private static function getChangedFilesBaseDir()
6767
return __DIR__ . '/..';
6868
}
6969

70-
/**
71-
* returns a multi array with the list of modules with corresponding changes as
72-
* no. of files changed, insertions and deletions
73-
*
74-
* @param string $changeCheckDir
75-
* @return array
76-
* @throws \Magento\Framework\Exception\LocalizedException
77-
*/
78-
public static function getChangedCoreModules(string $changeCheckDir = ''): array
79-
{
80-
$whitelistFiles = self::getWhitelist(['php', 'graphqls'], '', '', '/_files/whitelist/graphql.txt');
81-
82-
$affectedModules = [];
83-
foreach ($whitelistFiles as $whitelistFile) {
84-
$fileName = substr($whitelistFile, strlen($changeCheckDir));
85-
$changedModule = explode('/', $fileName);
86-
87-
$isGraphQlModule = str_ends_with($changedModule[1], 'GraphQl');
88-
$isGraphQlModuleExists = file_exists($changeCheckDir . '/' . $changedModule[1] . 'GraphQl');
89-
90-
if ((!$isGraphQlModule && $isGraphQlModuleExists &&
91-
(
92-
in_array($changedModule[2], ["Controller", "Model", "Block"]) ||
93-
(($changedModule[2] == "Ui") && in_array($changedModule[3], ["Component", "DataProvider"]))
94-
)
95-
) || ($isGraphQlModule)) {
96-
$gitDiffUnifiedStat = self::getGitDiffUnifiedStat($whitelistFile);
97-
if (isset($affectedModules[$changedModule[1]])) {
98-
$affectedModules[$changedModule[1]]['filesChanged'] += $gitDiffUnifiedStat['filesChanged'];
99-
$affectedModules[$changedModule[1]]['insertions'] += $gitDiffUnifiedStat['insertions'];
100-
$affectedModules[$changedModule[1]]['deletions'] += $gitDiffUnifiedStat['deletions'];
101-
$affectedModules[$changedModule[1]]['paramsChanged'] += $gitDiffUnifiedStat['paramsChanged'];
102-
} else {
103-
$affectedModules[$changedModule[1]] = $gitDiffUnifiedStat;
104-
}
105-
}
106-
}
107-
return $affectedModules;
108-
}
109-
110-
/**
111-
* Returns the git stats of the file like
112-
* insertions, deletions and param change if any
113-
*
114-
* @param string $filename
115-
* @return array
116-
* @throws \Magento\Framework\Exception\LocalizedException
117-
*/
118-
private static function getGitDiffUnifiedStat(string $filename = ''): array
119-
{
120-
$shell = new \Magento\Framework\Shell(
121-
new \Magento\Framework\Shell\CommandRenderer()
122-
);
123-
124-
$paramChange = explode(
125-
PHP_EOL,
126-
$shell->execute('git diff --stat --unified=0 ' . $filename)
127-
);
128-
129-
$fileStatus = array_values(array_filter($paramChange, function($value) {
130-
return strpos($value, '(+)') || strpos($value, '(-)');
131-
}, ARRAY_FILTER_USE_BOTH));
132-
$paramChange = array_filter($paramChange, function($value) {
133-
return ((str_starts_with(trim($value), '+')) ||
134-
(str_starts_with(trim($value), '-'))) &&
135-
(strpos($value, '@param'));
136-
}, ARRAY_FILTER_USE_BOTH);
137-
138-
$insertions = 0;
139-
$deletions = 0;
140-
$filesChanged = 0;
141-
if ($fileStatus) {
142-
$fileChanges = explode(",", $fileStatus[0]);
143-
$filesChanged = (isset($fileChanges[0])) ? intval($fileChanges[0]) : 0;
144-
$insertions = (isset($fileChanges[1])) ? intval($fileChanges[1]) : 0;
145-
$deletions = (isset($fileChanges[2])) ? intval($fileChanges[2]) : 0;
146-
}
147-
148-
return [
149-
'filesChanged' => $filesChanged,
150-
'insertions' => $insertions,
151-
'deletions' => $deletions,
152-
'paramsChanged' => sizeof($paramChange)
153-
];
154-
}
155-
15670
/**
15771
* Returns whitelist based on blacklist and git changed files
15872
*

0 commit comments

Comments
 (0)