Skip to content

Commit 499fe9a

Browse files
authored
Merge pull request #190 from magento-gl/MQE-3096
MQE-3096 : unit tests for GenerateTestFailedCommandTest and RunTestFailed
2 parents 0e422eb + d9cc611 commit 499fe9a

File tree

3 files changed

+212
-4
lines changed

3 files changed

+212
-4
lines changed

dev/tests/unit/Magento/FunctionalTestFramework/Console/GenerateTestFailedCommandTest.php

Lines changed: 126 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
class GenerateTestFailedCommandTest extends BaseGenerateCommandTest
1717
{
18-
public function testSingleTestNoSuite(): void
18+
public function testSingleTestWithNoSuite(): void
1919
{
2020
$testFileReturn = [
2121
"tests/functional/tests/MFTF/_generated/default/SingleTestNoSuiteTest.php:SingleTestNoSuiteTest"
@@ -38,4 +38,129 @@ public function testSingleTestNoSuite(): void
3838
$configuration = $stub->getFailedTestList("", "");
3939
$this->assertEquals($expectedConfiguration, $configuration);
4040
}
41+
42+
public function testMultipleTestsWithSuites(): void
43+
{
44+
$testFileReturn = [
45+
"tests/functional/tests/MFTF/_generated/SomeSpecificSuite/FirstTestSuiteTest.php:SingleTestSuiteTest",
46+
"tests/functional/tests/MFTF/_generated/SomeSpecificSuite/SecondTestNoSuiteTest.php:SingleTestNoSuiteTest"
47+
];
48+
$expectedConfiguration =
49+
'{"tests":null,"suites":{"SomeSpecificSuite":["SingleTestSuiteTest","SingleTestNoSuiteTest"]}}';
50+
51+
// Create a stub for the SomeClass class.
52+
$stub = $this->getMockBuilder(GenerateTestFailedCommand::class)
53+
->onlyMethods(["readFailedTestFile", "writeFailedTestToFile"])
54+
->getMock();
55+
// Configure the stub.
56+
$stub
57+
->method('readFailedTestFile')
58+
->willReturn($testFileReturn);
59+
$stub
60+
->method('writeFailedTestToFile')
61+
->willReturn(null);
62+
63+
// Run the real code
64+
$configuration = $stub->getFailedTestList("", "");
65+
$this->assertEquals($expectedConfiguration, $configuration);
66+
}
67+
68+
public function testMultipleTestFailureWithNoSuites(): void
69+
{
70+
$testFileReturn = [
71+
"tests/functional/tests/MFTF/_generated/default/SingleTestNoSuiteTest.php:SingleTestNoSuiteTest",
72+
"tests/functional/tests/MFTF/_generated/default/FirstTestSuiteTest.php:SingleTestSuiteTest"
73+
];
74+
$expectedConfiguration = '{"tests":["SingleTestNoSuiteTest","SingleTestSuiteTest"],"suites":null}';
75+
76+
// Create a stub for the SomeClass class.
77+
$stub = $this->getMockBuilder(GenerateTestFailedCommand::class)
78+
->onlyMethods(["readFailedTestFile", "writeFailedTestToFile"])
79+
->getMock();
80+
// Configure the stub.
81+
$stub
82+
->method('readFailedTestFile')
83+
->willReturn($testFileReturn);
84+
$stub
85+
->method('writeFailedTestToFile')
86+
->willReturn(null);
87+
88+
// Run the real code
89+
$configuration = $stub->getFailedTestList("", "");
90+
$this->assertEquals($expectedConfiguration, $configuration);
91+
}
92+
93+
public function testSingleSuiteAndNoTest(): void
94+
{
95+
$testFileReturn = [
96+
"tests/functional/tests/MFTF/_generated/SomeSpecificSuite/",
97+
];
98+
$expectedConfiguration = '{"tests":null,"suites":{"SomeSpecificSuite":[[]]}}';
99+
100+
// Create a stub for the SomeClass class.
101+
$stub = $this->getMockBuilder(GenerateTestFailedCommand::class)
102+
->onlyMethods(["readFailedTestFile", "writeFailedTestToFile"])
103+
->getMock();
104+
// Configure the stub.
105+
$stub
106+
->method('readFailedTestFile')
107+
->willReturn($testFileReturn);
108+
$stub
109+
->method('writeFailedTestToFile')
110+
->willReturn(null);
111+
112+
// Run the real code
113+
$configuration = $stub->getFailedTestList("", "");
114+
$this->assertEquals($expectedConfiguration, $configuration);
115+
}
116+
117+
public function testSingleSuiteWithTest(): void
118+
{
119+
$testFileReturn = [
120+
"tests/functional/tests/MFTF/_generated/SomeSpecificSuite/FirstTestSuiteTest.php:SingleTestSuiteTest",
121+
];
122+
$expectedConfiguration = '{"tests":null,"suites":{"SomeSpecificSuite":["SingleTestSuiteTest"]}}';
123+
124+
// Create a stub for the SomeClass class.
125+
$stub = $this->getMockBuilder(GenerateTestFailedCommand::class)
126+
->onlyMethods(["readFailedTestFile", "writeFailedTestToFile"])
127+
->getMock();
128+
// Configure the stub.
129+
$stub
130+
->method('readFailedTestFile')
131+
->willReturn($testFileReturn);
132+
$stub
133+
->method('writeFailedTestToFile')
134+
->willReturn(null);
135+
136+
// Run the real code
137+
$configuration = $stub->getFailedTestList("", "");
138+
$this->assertEquals($expectedConfiguration, $configuration);
139+
}
140+
141+
public function testMultipleSuitesWithNoTests(): void
142+
{
143+
$testFileReturn = [
144+
"tests/functional/tests/MFTF/_generated/SomeSpecificSuite/",
145+
"tests/functional/tests/MFTF/_generated/SomeSpecificSuite1/",
146+
147+
];
148+
$expectedConfiguration = '{"tests":null,"suites":{"SomeSpecificSuite":[[]],"SomeSpecificSuite1":[[]]}}';
149+
150+
// Create a stub for the SomeClass class.
151+
$stub = $this->getMockBuilder(GenerateTestFailedCommand::class)
152+
->onlyMethods(["readFailedTestFile", "writeFailedTestToFile"])
153+
->getMock();
154+
// Configure the stub.
155+
$stub
156+
->method('readFailedTestFile')
157+
->willReturn($testFileReturn);
158+
$stub
159+
->method('writeFailedTestToFile')
160+
->willReturn(null);
161+
162+
// Run the real code
163+
$configuration = $stub->getFailedTestList("", "");
164+
$this->assertEquals($expectedConfiguration, $configuration);
165+
}
41166
}

dev/tests/unit/Magento/FunctionalTestFramework/Console/RunTestFailedCommandTest.php

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,83 @@ private function invokePrivateMethod(&$object, $methodName, array $parameters =
5050
$method->setAccessible(true);
5151
return $method->invokeArgs($object, $parameters);
5252
}
53+
54+
public function testSingleTestNoSuite(): void
55+
{
56+
$testFailedFile = [
57+
"tests/functional/tests/MFTF/_generated/default/SingleTestNoSuiteTest.php:SingleTestNoSuiteTest"
58+
];
59+
60+
$expectedResult = [
61+
'tests/functional/tests/MFTF/_generated/default/SingleTestNoSuiteTest.php'
62+
];
63+
64+
$runFailed = new RunTestFailedCommand('run:failed');
65+
$filter = $this->invokePrivateMethod($runFailed, 'filterTestsForExecution', [$testFailedFile]);
66+
$this->assertEquals($expectedResult, $filter);
67+
}
68+
69+
public function testMultipleTestNoSuite(): void
70+
{
71+
$testFailedFile = [
72+
"tests/functional/tests/MFTF/_generated/default/SingleTestNoSuiteTest.php:SingleTestNoSuiteTest",
73+
"tests/functional/tests/MFTF/_generated/default/FirstTestSuiteTest.php:SingleTestSuiteTest"
74+
];
75+
76+
$expectedResult = [
77+
"tests/functional/tests/MFTF/_generated/default/SingleTestNoSuiteTest.php",
78+
"tests/functional/tests/MFTF/_generated/default/FirstTestSuiteTest.php"
79+
];
80+
81+
$runFailed = new RunTestFailedCommand('run:failed');
82+
$filter = $this->invokePrivateMethod($runFailed, 'filterTestsForExecution', [$testFailedFile]);
83+
$this->assertEquals($expectedResult, $filter);
84+
}
85+
86+
public function testSingleSuiteNoTest(): void
87+
{
88+
$testFailedFile = [
89+
"tests/functional/tests/MFTF/_generated/SomeSpecificSuite/",
90+
];
91+
92+
$expectedResult = [
93+
"-g SomeSpecificSuite"
94+
];
95+
96+
$runFailed = new RunTestFailedCommand('run:failed');
97+
$filter = $this->invokePrivateMethod($runFailed, 'filterTestsForExecution', [$testFailedFile]);
98+
$this->assertEquals($expectedResult, $filter);
99+
}
100+
101+
public function testSingleSuiteAndTest(): void
102+
{
103+
$testFailedFile = [
104+
"tests/functional/tests/MFTF/_generated/SomeSpecificSuite/FirstTestSuiteTest.php:SingleTestSuiteTest",
105+
];
106+
$expectedResult = [
107+
"-g SomeSpecificSuite",
108+
];
109+
110+
$runFailed = new RunTestFailedCommand('run:failed');
111+
$filter = $this->invokePrivateMethod($runFailed, 'filterTestsForExecution', [$testFailedFile]);
112+
$this->assertEquals($expectedResult, $filter);
113+
}
114+
115+
public function testMultipleSuitesWithNoTest(): void
116+
{
117+
$testFailedFile = [
118+
"tests/functional/tests/MFTF/_generated/SomeSpecificSuite/",
119+
"tests/functional/tests/MFTF/_generated/SomeSpecificSuite1/",
120+
"tests/functional/tests/MFTF/_generated/SomeSpecificSuite2/"
121+
];
122+
$expectedResult = [
123+
"-g SomeSpecificSuite",
124+
"-g SomeSpecificSuite1",
125+
"-g SomeSpecificSuite2",
126+
];
127+
128+
$runFailed = new RunTestFailedCommand('run:failed');
129+
$filter = $this->invokePrivateMethod($runFailed, 'filterTestsForExecution', [$testFailedFile]);
130+
$this->assertEquals($expectedResult, $filter);
131+
}
53132
}

src/Magento/FunctionalTestingFramework/Console/GenerateTestFailedCommand.php

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int
9191
* Returns a json string of tests that failed on the last run
9292
*
9393
* @return string
94+
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
9495
*/
9596
public function getFailedTestList($testsFailedFile, $testsReRunFile)
9697
{
@@ -103,9 +104,12 @@ public function getFailedTestList($testsFailedFile, $testsReRunFile)
103104
if (!empty($test)) {
104105
$this->writeFailedTestToFile($test, $testsReRunFile);
105106
$testInfo = explode(DIRECTORY_SEPARATOR, $test);
106-
$testName = explode(":", $testInfo[count($testInfo) - 1])[1];
107-
$suiteName = $testInfo[count($testInfo) - 2];
108-
107+
$testName = isset($testInfo[count($testInfo) - 1][1])
108+
? explode(":", $testInfo[count($testInfo) - 1])[1]
109+
: [];
110+
$suiteName = isset($testInfo[count($testInfo) - 2])
111+
? $testInfo[count($testInfo) - 2]
112+
: [];
109113
if ($suiteName === self::DEFAULT_TEST_GROUP) {
110114
array_push($failedTestDetails['tests'], $testName);
111115
} else {

0 commit comments

Comments
 (0)