Skip to content

Commit 63ddca9

Browse files
authored
Merge branch 'develop' into MQE-1761
2 parents eb68e89 + e344c6f commit 63ddca9

File tree

6 files changed

+111
-3
lines changed

6 files changed

+111
-3
lines changed

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,24 @@ public function testThreeTestOneSuiteOneGroupMix()
156156
$this->assertEquals($expected, $actual);
157157
}
158158

159+
public function testSuiteToTestSyntax()
160+
{
161+
$testOne = new TestObject('Test1', [], [], []);
162+
$suiteOne = new SuiteObject(
163+
'Suite1',
164+
['Test1' => $testOne],
165+
[],
166+
[]
167+
);
168+
169+
$testArray = ['Test1' => $testOne];
170+
$suiteArray = ['Suite1' => $suiteOne];
171+
$this->mockHandlers($testArray, $suiteArray);
172+
$actual = json_decode($this->callTestConfig(['Suite1:Test1']), true);
173+
$expected = ['tests' => null, 'suites' => ['Suite1' => ['Test1']]];
174+
$this->assertEquals($expected, $actual);
175+
}
176+
159177
/**
160178
* Mock handlers to skip parsing
161179
* @param array $testArray

dev/tests/unit/Magento/FunctionalTestFramework/Suite/SuiteGeneratorTest.php

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
namespace Tests\unit\Magento\FunctionalTestFramework\Suite;
77

88
use AspectMock\Test as AspectMock;
9+
use Magento\FunctionalTestingFramework\Exceptions\TestReferenceException;
910
use Magento\FunctionalTestingFramework\ObjectManager\ObjectManager;
1011
use Magento\FunctionalTestingFramework\ObjectManagerFactory;
1112
use Magento\FunctionalTestingFramework\Suite\SuiteGenerator;
@@ -17,6 +18,7 @@
1718
use Magento\FunctionalTestingFramework\Test\Parsers\TestDataParser;
1819
use Magento\FunctionalTestingFramework\Util\Manifest\DefaultTestManifest;
1920
use Magento\FunctionalTestingFramework\Util\MagentoTestCase;
21+
use Magento\FunctionalTestingFramework\Util\Manifest\TestManifestFactory;
2022
use tests\unit\Util\SuiteDataArrayBuilder;
2123
use tests\unit\Util\TestDataArrayBuilder;
2224
use tests\unit\Util\TestLoggingUtil;
@@ -143,6 +145,73 @@ public function testGenerateEmptySuite()
143145
$mockSuiteGenerator->generateSuite("basicTestSuite");
144146
}
145147

148+
public function testInvalidSuiteTestPair()
149+
{
150+
// Mock Suite1 => Test1 and Suite2 => Test2
151+
$suiteDataArrayBuilder = new SuiteDataArrayBuilder();
152+
$mockData = $suiteDataArrayBuilder
153+
->withName('Suite1')
154+
->includeGroups(['group1'])
155+
->build();
156+
$suiteDataArrayBuilder = new SuiteDataArrayBuilder();
157+
$mockData2 = $suiteDataArrayBuilder
158+
->withName('Suite2')
159+
->includeGroups(['group2'])
160+
->build();
161+
$mockSuiteData = array_merge_recursive($mockData, $mockData2);
162+
163+
$testDataArrayBuilder = new TestDataArrayBuilder();
164+
$mockSimpleTest = $testDataArrayBuilder
165+
->withName('Test1')
166+
->withAnnotations(['group' => [['value' => 'group1']]])
167+
->withTestActions()
168+
->build();
169+
$testDataArrayBuilder = new TestDataArrayBuilder();
170+
$mockSimpleTest2 = $testDataArrayBuilder
171+
->withName('Test2')
172+
->withAnnotations(['group' => [['value' => 'group2']]])
173+
->withTestActions()
174+
->build();
175+
$mockTestData = ['tests' => array_merge($mockSimpleTest, $mockSimpleTest2)];
176+
$this->setMockTestAndSuiteParserOutput($mockTestData, $mockSuiteData);
177+
178+
// Make invalid manifest
179+
$suiteConfig = ['Suite2' => ['Test1']];
180+
$manifest = TestManifestFactory::makeManifest('default', $suiteConfig);
181+
182+
// Set up Expected Exception
183+
$this->expectException(TestReferenceException::class);
184+
$this->expectExceptionMessageRegExp('(Suite: "Suite2" Tests: "Test1")');
185+
186+
// parse and generate suite object with mocked data and manifest
187+
$mockSuiteGenerator = SuiteGenerator::getInstance();
188+
$mockSuiteGenerator->generateAllSuites($manifest);
189+
}
190+
191+
public function testNonExistentSuiteTestPair()
192+
{
193+
$testDataArrayBuilder = new TestDataArrayBuilder();
194+
$mockSimpleTest = $testDataArrayBuilder
195+
->withName('Test1')
196+
->withAnnotations(['group' => [['value' => 'group1']]])
197+
->withTestActions()
198+
->build();
199+
$mockTestData = ['tests' => array_merge($mockSimpleTest)];
200+
$this->setMockTestAndSuiteParserOutput($mockTestData, []);
201+
202+
// Make invalid manifest
203+
$suiteConfig = ['Suite3' => ['Test1']];
204+
$manifest = TestManifestFactory::makeManifest('default', $suiteConfig);
205+
206+
// Set up Expected Exception
207+
$this->expectException(TestReferenceException::class);
208+
$this->expectExceptionMessageRegExp('#Suite3 is not defined#');
209+
210+
// parse and generate suite object with mocked data and manifest
211+
$mockSuiteGenerator = SuiteGenerator::getInstance();
212+
$mockSuiteGenerator->generateAllSuites($manifest);
213+
}
214+
146215
/**
147216
* Function used to set mock for parser return and force init method to run between tests.
148217
*

docs/commands/mftf.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@ vendor/bin/mftf generate:tests
4242
vendor/bin/mftf generate:tests AdminLoginTest StorefrontPersistedCustomerLoginTest
4343
```
4444

45+
### Generate test by test and suite name
46+
47+
```bash
48+
vendor/bin/mftf generate:tests LoginSuite:AdminLoginTest
49+
```
50+
4551
### Generate and run the tests for a specified group
4652

4753
```bash
@@ -58,6 +64,14 @@ vendor/bin/mftf run:test AdminLoginTest StorefrontPersistedCustomerLoginTest -r
5864

5965
This command cleans up the previously generated tests; generates and runs the `LoginAsAdminTest` and `LoginAsCustomerTest` tests.
6066

67+
### Generate and run particular test in a specific suite's context
68+
69+
```bash
70+
vendor/bin/mftf run:test LoginSuite:AdminLoginTest -r
71+
```
72+
73+
This command cleans up previously generated tests; generates and run `AdminLoginTest` within the context of the `LoginSuite`.
74+
6175
### Generate and run a testManifest.txt file
6276

6377
```bash

src/Magento/FunctionalTestingFramework/Console/BaseGenerateCommand.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,10 @@ protected function getTestAndSuiteConfiguration(array $tests)
8787
$suiteToTestPair = [];
8888

8989
foreach($tests as $test) {
90+
if (strpos($test, ':') !== false) {
91+
$suiteToTestPair[] = $test;
92+
continue;
93+
}
9094
if (array_key_exists($test, $testsReferencedInSuites)) {
9195
$suites = $testsReferencedInSuites[$test];
9296
foreach ($suites as $suite) {

src/Magento/FunctionalTestingFramework/Suite/Handlers/SuiteObjectHandler.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*/
66
namespace Magento\FunctionalTestingFramework\Suite\Handlers;
77

8+
use Magento\FunctionalTestingFramework\Exceptions\TestReferenceException;
89
use Magento\FunctionalTestingFramework\Exceptions\XmlException;
910
use Magento\FunctionalTestingFramework\ObjectManager\ObjectHandlerInterface;
1011
use Magento\FunctionalTestingFramework\ObjectManagerFactory;
@@ -73,7 +74,7 @@ public static function getInstance(): ObjectHandlerInterface
7374
public function getObject($objectName): SuiteObject
7475
{
7576
if (!array_key_exists($objectName, $this->suiteObjects)) {
76-
trigger_error("Suite ${objectName} is not defined.", E_USER_ERROR);
77+
throw new TestReferenceException("Suite ${objectName} is not defined in xml.");
7778
}
7879
return $this->suiteObjects[$objectName];
7980
}

src/Magento/FunctionalTestingFramework/Suite/SuiteGenerator.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,12 +178,14 @@ private function validateTestsReferencedInSuite($suiteName, $testsReferenced, $o
178178
{
179179
$suiteRef = $originalSuiteName ?? $suiteName;
180180
$possibleTestRef = SuiteObjectHandler::getInstance()->getObject($suiteRef)->getTests();
181-
$errorMsg = "Cannot reference tests whcih are not declared as part of suite.";
181+
$errorMsg = "Cannot reference tests which are not declared as part of suite";
182182

183183
$invalidTestRef = array_diff($testsReferenced, array_keys($possibleTestRef));
184184

185185
if (!empty($invalidTestRef)) {
186-
throw new TestReferenceException($errorMsg, ['suite' => $suiteRef, 'test' => $invalidTestRef]);
186+
$testList = implode("\", \"", $invalidTestRef);
187+
$fullError = $errorMsg . " (Suite: \"{$suiteRef}\" Tests: \"{$testList}\")";
188+
throw new TestReferenceException($fullError, ['suite' => $suiteRef, 'test' => $invalidTestRef]);
187189
}
188190
}
189191

0 commit comments

Comments
 (0)