Skip to content

Commit ac48cf0

Browse files
manjusha729Manjusha.S
and
Manjusha.S
authored
Mqe 3371 : Added unit test for unused entity static check and added ignore tag (#180)
* static check * unused entity * made changes * Added ignore tag and unit test * Added ignore tag and unit test * Updated Section in devdocs with unused entity tag Co-authored-by: Manjusha.S <manjusha.s@BLR1-LMC-N71373.local>
1 parent 0faa3a0 commit ac48cf0

File tree

3 files changed

+218
-50
lines changed

3 files changed

+218
-50
lines changed

dev/tests/functional/tests/MFTF/DevDocs/Section/ContentSection.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
*/
77
-->
88

9+
<!--@Ignore(Unused_Entity_Check)-->
10+
911
<sections xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
1012
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Page/etc/SectionObject.xsd">
1113
<section name="contentSection">
Lines changed: 190 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,190 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace tests\unit\Magento\FunctionalTestFramework\Util;
9+
10+
use Exception;
11+
use Magento\FunctionalTestingFramework\Config\MftfApplicationConfig;
12+
use Magento\FunctionalTestingFramework\Exceptions\TestReferenceException;
13+
use tests\unit\Util\MagentoTestCase;
14+
use tests\unit\Util\TestLoggingUtil;
15+
use Magento\FunctionalTestingFramework\StaticCheck\UnusedEntityCheck;
16+
use Magento\FunctionalTestingFramework\Util\Script\ScriptUtil;
17+
18+
class UnusedEntityCheckTest extends MagentoTestCase
19+
{
20+
21+
public function testUnusedEntityFilesCheck()
22+
{
23+
$unusedEntityCheck = new UnusedEntityCheck();
24+
$result = $unusedEntityCheck->unusedEntities();
25+
$this->assertIsArray($result);
26+
}
27+
28+
public function testUnusedActiongroupFiles()
29+
{
30+
$unusedEntityCheck = new UnusedEntityCheck();
31+
$domDocument = new \DOMDocument();
32+
$actionGroupFiles = ['DeprecationCheckActionGroup' =>
33+
'/verification/DeprecationCheckModule/ActionGroup/DeprecationCheckActionGroup.xml',
34+
'ActionGroupWithMultiplePausesActionGroup'=>
35+
'/verification/PauseCheckModule/ActionGroup/ActionGroupWithMultiplePausesActionGroup.xml',
36+
'ActionGroupWithNoPauseActionGroup'=>
37+
'/verification/PauseCheckModule/ActionGroup/ActionGroupWithNoPauseActionGroup.xml'];
38+
$result = $unusedEntityCheck->unusedActionEntity($domDocument, [], [], $actionGroupFiles, []);
39+
$this->assertIsArray($result);
40+
$this->assertCount(3, $result);
41+
}
42+
43+
public function testUnusedActiongroupFilesReturnedWhenActionXmlFilesAreNotEmpty()
44+
{
45+
$this->scriptUtil = new ScriptUtil();
46+
$unusedEntityCheck = new UnusedEntityCheck();
47+
$domDocument = new \DOMDocument();
48+
$modulePaths = $this->scriptUtil->getAllModulePaths();
49+
$actionGroupXmlFiles = $this->scriptUtil->getModuleXmlFilesByScope($modulePaths, "ActionGroup");
50+
$actionGroupFiles = ['DeprecationCheckActionGroup' =>
51+
'/verification/DeprecationCheckModule/ActionGroup/DeprecationCheckActionGroup.xml',
52+
'ActionGroupWithMultiplePausesActionGroup'=>
53+
'/verification/PauseCheckModule/ActionGroup/ActionGroupWithMultiplePausesActionGroup.xml',
54+
'ActionGroupWithNoPauseActionGroup' =>
55+
'/verification/PauseCheckModule/ActionGroup/ActionGroupWithNoPauseActionGroup.xml'];
56+
$result = $unusedEntityCheck->unusedActionEntity(
57+
$domDocument,
58+
$actionGroupXmlFiles,
59+
[],
60+
$actionGroupFiles,
61+
[]
62+
);
63+
$this->assertIsArray($result);
64+
$this->assertCount(3, $result);
65+
}
66+
67+
public function testUnusedSectionFiles()
68+
{
69+
$unusedEntityCheck = new UnusedEntityCheck();
70+
$domDocument = new \DOMDocument();
71+
$section = [
72+
'DeprecationCheckSection' => '/verification/DeprecationCheckModule/Section/DeprecationCheckSection.xml',
73+
'DeprecatedSection' => '/verification/TestModule/Section/DeprecatedSection.xml',
74+
'LocatorFunctionSection' => '/verification/TestModule/Section/LocatorFunctionSection.xml',
75+
'SampleSection' => '/verification/TestModuleMerged/Section/MergeSection.xml'
76+
];
77+
$result=$unusedEntityCheck->unusedSectionEntity($domDocument, [], [], [], $section, []);
78+
$this->assertIsArray($result);
79+
$this->assertCount(4, $result);
80+
}
81+
82+
public function testUnusedSectionFilesReturnedWhenSectionXmlFilesAreNotEmpty()
83+
{
84+
$unusedEntityCheck = new UnusedEntityCheck();
85+
$this->scriptUtil = new ScriptUtil();
86+
$modulePaths = $this->scriptUtil->getAllModulePaths();
87+
$sectionXmlFiles = $this->scriptUtil->getModuleXmlFilesByScope($modulePaths, "Section");
88+
89+
$domDocument = new \DOMDocument();
90+
$section = [
91+
'DeprecationCheckSection' => '/verification/DeprecationCheckModule/Section/DeprecationCheckSection.xml',
92+
'DeprecatedSection' => '/verification/TestModule/Section/DeprecatedSection.xml',
93+
'LocatorFunctionSection' => '/verification/TestModule/Section/LocatorFunctionSection.xml',
94+
'SampleSection' => '/verification/TestModuleMerged/Section/MergeSection.xml'
95+
];
96+
$result = $unusedEntityCheck->unusedSectionEntity($domDocument, $sectionXmlFiles, [], [], $section, []);
97+
$this->assertIsArray($result);
98+
$this->assertCount(4, $result);
99+
}
100+
101+
public function testUnusedPageFiles()
102+
{
103+
$unusedEntityCheck = new UnusedEntityCheck();
104+
$domDocument = new \DOMDocument();
105+
$page = [
106+
'DeprecationCheckPage' => '/verification/DeprecationCheckModule/Page/DeprecationCheckPage.xml',
107+
'DeprecatedPage' => '/verification/TestModule/Page/DeprecatedPage.xml',
108+
'AdminOneParamPage' => '/verification/TestModule/Page/SamplePage/AdminOneParamPage.xml',
109+
'AdminPage' => '/verification/TestModule/Page/SamplePage/AdminPage.xml',
110+
'ExternalPage' => '/verification/TestModule/Page/SamplePage/ExternalPage.xml',
111+
'NoParamPage' => '/verification/TestModule/Page/SamplePage/NoParamPage.xml'
112+
];
113+
$result = $unusedEntityCheck->unusedPageEntity($domDocument, [], [], $page, []);
114+
$this->assertIsArray($result);
115+
$this->assertCount(6, $result);
116+
}
117+
118+
public function testUnusedPageFilesReturnedWhenPageXmlFilesPassedAreNotEmpty()
119+
{
120+
$unusedEntityCheck = new UnusedEntityCheck();
121+
$domDocument = new \DOMDocument();
122+
$this->scriptUtil = new ScriptUtil();
123+
$modulePaths = $this->scriptUtil->getAllModulePaths();
124+
$pageXmlFiles = $this->scriptUtil->getModuleXmlFilesByScope($modulePaths, "Page");
125+
$page = [
126+
'DeprecationCheckPage' => '/verification/DeprecationCheckModule/Page/DeprecationCheckPage.xml',
127+
'DeprecatedPage' => '/verification/TestModule/Page/DeprecatedPage.xml',
128+
'AdminOneParamPage' => '/verification/TestModule/Page/SamplePage/AdminOneParamPage.xml',
129+
'AdminPage' => '/verification/TestModule/Page/SamplePage/AdminPage.xml',
130+
'ExternalPage' => '/verification/TestModule/Page/SamplePage/ExternalPage.xml',
131+
'NoParamPage' => '/verification/TestModule/Page/SamplePage/NoParamPage.xml'
132+
];
133+
$result = $unusedEntityCheck->unusedPageEntity($domDocument, $pageXmlFiles, [], $page, []);
134+
$this->assertIsArray($result);
135+
$this->assertCount(6, $result);
136+
}
137+
138+
public function testUnusedData()
139+
{
140+
$unusedEntityCheck = new UnusedEntityCheck();
141+
$domDocument = new \DOMDocument();
142+
$data = [
143+
"simpleData" =>
144+
[
145+
"dataFilePath" => "/verification/TestModule/Data/ReplacementData.xml"
146+
],
147+
148+
"uniqueData" => [
149+
150+
"dataFilePath" => "/verification/TestModule/Data/ReplacementData.xml"
151+
],
152+
153+
"offset"=>
154+
[
155+
"dataFilePath" => "/verification/TestModule/Data/ReplacementData.xml"
156+
]
157+
];
158+
$result=$unusedEntityCheck->unusedPageEntity($domDocument, [], [], $data, []);
159+
$this->assertIsArray($result);
160+
$this->assertCount(3, $result);
161+
}
162+
163+
public function testUnusedDataReturnedWhenCreateDataEntityAreNotEmpty()
164+
{
165+
$unusedEntityCheck = new UnusedEntityCheck();
166+
$domDocument = new \DOMDocument();
167+
$this->scriptUtil = new ScriptUtil();
168+
$modulePaths = $this->scriptUtil->getAllModulePaths();
169+
$dataXmlFiles = $this->scriptUtil->getModuleXmlFilesByScope($modulePaths, "Data");
170+
$data = [
171+
"simpleData" =>
172+
[
173+
"dataFilePath" => "/verification/TestModule/Data/ReplacementData.xml"
174+
],
175+
176+
"uniqueData" => [
177+
178+
"dataFilePath" => "/verification/TestModule/Data/ReplacementData.xml"
179+
],
180+
181+
"offset" =>
182+
[
183+
"dataFilePath" => "/verification/TestModule/Data/ReplacementData.xml"
184+
]
185+
];
186+
$result = $unusedEntityCheck->unusedPageEntity($domDocument, $dataXmlFiles, [], $data, []);
187+
$this->assertIsArray($result);
188+
$this->assertCount(3, $result);
189+
}
190+
}

src/Magento/FunctionalTestingFramework/StaticCheck/UnusedEntityCheck.php

Lines changed: 26 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -46,24 +46,7 @@ class UnusedEntityCheck implements StaticCheckInterface
4646
*/
4747
public function execute(InputInterface $input)
4848
{
49-
$this->scriptUtil = new ScriptUtil();
50-
$domDocument = new \DOMDocument();
51-
$modulePaths = $this->scriptUtil->getAllModulePaths();
52-
$testXmlFiles = $this->scriptUtil->getModuleXmlFilesByScope($modulePaths, "Test");
53-
$actionGroupXmlFiles = $this->scriptUtil->getModuleXmlFilesByScope($modulePaths, "ActionGroup");
54-
$dataXmlFiles = $this->scriptUtil->getModuleXmlFilesByScope($modulePaths, "Data");
55-
$pageXmlFiles = $this->scriptUtil->getModuleXmlFilesByScope($modulePaths, "Page");
56-
$sectionXmlFiles = $this->scriptUtil->getModuleXmlFilesByScope($modulePaths, "Section");
57-
$suiteXmlFiles = $this->scriptUtil->getModuleXmlFilesByScope($modulePaths, 'Suite');
58-
$this->errors = $this->unusedEntities(
59-
$domDocument,
60-
$dataXmlFiles,
61-
$actionGroupXmlFiles,
62-
$sectionXmlFiles,
63-
$pageXmlFiles,
64-
$testXmlFiles,
65-
$suiteXmlFiles
66-
);
49+
$this->errors = $this->unusedEntities();
6750
$this->output = $this->scriptUtil->printErrorsToFile(
6851
$this->errors,
6952
StaticChecksList::getErrorFilesPath() . DIRECTORY_SEPARATOR . self::ERROR_LOG_FILENAME . '.txt',
@@ -73,26 +56,19 @@ public function execute(InputInterface $input)
7356

7457
/**
7558
* Centralized method to get unused Entities
76-
*
77-
* @param DOMDocument $domDocument
78-
* @param ScriptUtil $dataXmlFiles
79-
* @param ScriptUtil $actionGroupXmlFiles
80-
* @param ScriptUtil $sectionXmlFiles
81-
* @param ScriptUtil $pageXmlFiles
82-
* @param ScriptUtil $testXmlFiles
83-
* @param ScriptUtil $suiteXmlFiles
8459
* @return array
85-
* @throws Exception
8660
*/
87-
private function unusedEntities(
88-
$domDocument,
89-
$dataXmlFiles,
90-
$actionGroupXmlFiles,
91-
$sectionXmlFiles,
92-
$pageXmlFiles,
93-
$testXmlFiles,
94-
$suiteXmlFiles
95-
) {
61+
public function unusedEntities()
62+
{
63+
$this->scriptUtil = new ScriptUtil();
64+
$domDocument = new \DOMDocument();
65+
$modulePaths = $this->scriptUtil->getAllModulePaths();
66+
$testXmlFiles = $this->scriptUtil->getModuleXmlFilesByScope($modulePaths, "Test");
67+
$actionGroupXmlFiles = $this->scriptUtil->getModuleXmlFilesByScope($modulePaths, "ActionGroup");
68+
$dataXmlFiles = $this->scriptUtil->getModuleXmlFilesByScope($modulePaths, "Data");
69+
$pageXmlFiles = $this->scriptUtil->getModuleXmlFilesByScope($modulePaths, "Page");
70+
$sectionXmlFiles = $this->scriptUtil->getModuleXmlFilesByScope($modulePaths, "Section");
71+
$suiteXmlFiles = $this->scriptUtil->getModuleXmlFilesByScope($modulePaths, 'Suite');
9672
foreach ($dataXmlFiles as $filePath) {
9773
$domDocument->load($filePath);
9874
$entityResult = $this->getAttributesFromDOMNodeList(
@@ -101,7 +77,7 @@ private function unusedEntities(
10177
);
10278
foreach ($entityResult as $entitiesResultData) {
10379
$dataNames[$entitiesResultData[key($entitiesResultData)]] = [
104-
"dataFilePath"=>StaticChecksList::getFilePath($filePath->getRealPath())
80+
"dataFilePath"=>$filePath->getRealPath()
10581
];
10682
}
10783
}
@@ -112,21 +88,18 @@ private function unusedEntities(
11288
continue;
11389
}
11490
$allActionGroupFileNames[$actionGroupName ] =
115-
StaticChecksList::getFilePath($filePath->getRealPath());
91+
$filePath->getRealPath();
11692
}
11793

11894
foreach ($sectionXmlFiles as $filePath) {
11995
$domDocument->load($filePath);
12096
$sectionName = $domDocument->getElementsByTagName("section")->item(0)->getAttribute("name");
121-
$sectionFileNames[$sectionName] = StaticChecksList::getFilePath($filePath->getRealPath());
97+
$sectionFileNames[$sectionName] = $filePath->getRealPath();
12298
}
123-
12499
foreach ($pageXmlFiles as $filePath) {
125100
$domDocument->load($filePath);
126101
$pageName = $domDocument->getElementsByTagName("page")->item(0)->getAttribute("name");
127-
$pageFiles[$pageName] = StaticChecksList::getFilePath(
128-
$filePath->getRealPath()
129-
);
102+
$pageFiles[$pageName] = $filePath->getRealPath();
130103
}
131104
$actionGroupReferences = $this->unusedActionEntity(
132105
$domDocument,
@@ -166,6 +139,7 @@ private function unusedEntities(
166139
)
167140
);
168141
}
142+
169143
/**
170144
* Setting error message
171145
*
@@ -176,9 +150,11 @@ private function setErrorOutput($unusedFilePath)
176150
{
177151
$testErrors = [];
178152
foreach ($unusedFilePath as $files) {
179-
$errorOutput = " Unused Entity File Path ";
180-
$errorOutput .= "\n\t".$files."\t\n";
181-
$testErrors[$files][] = $errorOutput;
153+
$contents = file_get_contents($files);
154+
$file = fopen($files, 'a');
155+
if (!str_contains($contents, '<!--@Ignore(Unused_Entity_Check)-->')) {
156+
fwrite($file, '<!--@Ignore(Unused_Entity_Check)-->');
157+
}
182158
}
183159
return $testErrors;
184160
}
@@ -194,7 +170,7 @@ private function setErrorOutput($unusedFilePath)
194170
* @return array
195171
* @throws Exception
196172
*/
197-
private function unusedActionEntity(
173+
public function unusedActionEntity(
198174
$domDocument,
199175
$actionGroupXmlFiles,
200176
$testXmlFiles,
@@ -244,7 +220,7 @@ private function unusedActionEntity(
244220
* @return array
245221
* @throws Exception
246222
*/
247-
private function unusedPageEntity($domDocument, $actionGroupXmlFiles, $testXmlFiles, $pageNames, $suiteXmlFiles)
223+
public function unusedPageEntity($domDocument, $actionGroupXmlFiles, $testXmlFiles, $pageNames, $suiteXmlFiles)
248224
{
249225

250226
foreach ($suiteXmlFiles as $filePath) {
@@ -366,7 +342,7 @@ private function entityReferencePatternCheck($domDocument, $fileNames, $contents
366342
* @return array
367343
* @throws Exception
368344
*/
369-
private function unusedSectionEntity(
345+
public function unusedSectionEntity(
370346
$domDocument,
371347
$actionGroupXmlFiles,
372348
$testXmlFiles,
@@ -504,7 +480,7 @@ private function getUnusedSectionEntitiesReferenceInActionGroupAndTestFiles(
504480
* @param DOMDocument $domDocument
505481
* @return array
506482
*/
507-
private function unusedData(
483+
public function unusedData(
508484
$domDocument,
509485
$actionGroupXmlFiles,
510486
$testXmlFiles,

0 commit comments

Comments
 (0)