Skip to content

Commit 8e67f95

Browse files
MFTF-33583: Eliminated MockModuleResolverBuilder usage
1 parent 833ca27 commit 8e67f95

File tree

5 files changed

+158
-99
lines changed

5 files changed

+158
-99
lines changed

dev/tests/unit/Magento/FunctionalTestFramework/Test/Handlers/TestObjectHandlerTest.php

Lines changed: 88 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,20 @@
88
namespace tests\unit\Magento\FunctionalTestFramework\Test\Handlers;
99

1010
use Exception;
11+
use Magento\FunctionalTestingFramework\Config\MftfApplicationConfig;
12+
use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException;
13+
use Magento\FunctionalTestingFramework\ObjectManager;
14+
use Magento\FunctionalTestingFramework\ObjectManagerFactory;
1115
use Magento\FunctionalTestingFramework\Test\Handlers\TestObjectHandler;
1216
use Magento\FunctionalTestingFramework\Test\Objects\ActionObject;
1317
use Magento\FunctionalTestingFramework\Test\Objects\TestHookObject;
1418
use Magento\FunctionalTestingFramework\Test\Objects\TestObject;
19+
use Magento\FunctionalTestingFramework\Test\Parsers\TestDataParser;
1520
use Magento\FunctionalTestingFramework\Test\Util\TestObjectExtractor;
1621
use Magento\FunctionalTestingFramework\Util\GenerationErrorHandler;
22+
use Magento\FunctionalTestingFramework\Util\ModuleResolver;
23+
use ReflectionProperty;
1724
use tests\unit\Util\MagentoTestCase;
18-
use tests\unit\Util\MockModuleResolverBuilder;
19-
use tests\unit\Util\ObjectHandlerUtil;
2025
use tests\unit\Util\TestDataArrayBuilder;
2126
use tests\unit\Util\TestLoggingUtil;
2227

@@ -51,9 +56,7 @@ public function testGetTestObject(): void
5156
->withTestActions()
5257
->build();
5358

54-
$resolverMock = new MockModuleResolverBuilder();
55-
$resolverMock->setup();
56-
ObjectHandlerUtil::mockTestObjectHandlerWitData($mockData);
59+
$this->mockTestObjectHandler($mockData);
5760

5861
// run object handler method
5962
$toh = TestObjectHandler::getInstance();
@@ -146,9 +149,7 @@ public function testGetTestsByGroup(): void
146149
->withTestActions()
147150
->build();
148151

149-
$resolverMock = new MockModuleResolverBuilder();
150-
$resolverMock->setup();
151-
ObjectHandlerUtil::mockTestObjectHandlerWitData(array_merge($includeTest, $excludeTest));
152+
$this->mockTestObjectHandler(array_merge($includeTest, $excludeTest));
152153

153154
// execute test method
154155
$toh = TestObjectHandler::getInstance();
@@ -195,10 +196,8 @@ public function testGetTestWithModuleName(): void
195196
->withFileName($file)
196197
->build();
197198

198-
$resolverMock = new MockModuleResolverBuilder();
199-
$resolverMock->setup(['Vendor_' . $moduleExpected => $filepath]);
199+
$this->mockTestObjectHandler($mockData, ['Vendor_' . $moduleExpected => $filepath]);
200200

201-
ObjectHandlerUtil::mockTestObjectHandlerWitData($mockData);
202201
// Execute Test Method
203202
$toh = TestObjectHandler::getInstance();
204203
$actualTestObject = $toh->getObject($testDataArrayBuilder->testName);
@@ -225,13 +224,11 @@ public function testGetTestObjectWithInvalidExtends(): void
225224
->withBeforeHook()
226225
->withTestActions()
227226
->build();
228-
$resolverMock = new MockModuleResolverBuilder();
229-
$resolverMock->setup();
230-
ObjectHandlerUtil::mockTestObjectHandlerWitData($testOne);
231227

232-
$toh = TestObjectHandler::getInstance();
228+
$this->mockTestObjectHandler($testOne);
233229

234-
$this->expectException(\Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException::class);
230+
$toh = TestObjectHandler::getInstance();
231+
$this->expectException(TestFrameworkException::class);
235232
$this->expectExceptionMessage("Mftf Test can not extend from itself: " . "testOne");
236233

237234
$toh->getObject('testOne');
@@ -264,9 +261,7 @@ public function testGetAllTestObjectsWithInvalidExtends(): void
264261
->withTestActions()
265262
->build();
266263

267-
$resolverMock = new MockModuleResolverBuilder();
268-
$resolverMock->setup();
269-
ObjectHandlerUtil::mockTestObjectHandlerWitData(array_merge($testOne, $testTwo));
264+
$this->mockTestObjectHandler(array_merge($testOne, $testTwo));
270265

271266
$toh = TestObjectHandler::getInstance();
272267
$toh->getAllObjects();
@@ -297,9 +292,7 @@ public function testGetTestObjectWhenEnablePause(): void
297292
->withTestActions()
298293
->build();
299294

300-
$resolverMock = new MockModuleResolverBuilder();
301-
$resolverMock->setup();
302-
ObjectHandlerUtil::mockTestObjectHandlerWitData($mockData);
295+
$this->mockTestObjectHandler($mockData);
303296

304297
// run object handler method
305298
$toh = TestObjectHandler::getInstance();
@@ -381,4 +374,77 @@ protected function tearDown(): void
381374
TestLoggingUtil::getInstance()->clearMockLoggingUtil();
382375
parent::tearDownAfterClass();
383376
}
377+
378+
/**
379+
* Mock test object handler.
380+
*
381+
* @param array $data
382+
* @param array|null $paths
383+
*
384+
* @return void
385+
*/
386+
private function mockTestObjectHandler(array $data, ?array $paths = null): void
387+
{
388+
if (!$paths) {
389+
$paths = ['Magento_Module' => '/base/path/some/other/path/Magento/Module'];
390+
}
391+
// clear test object handler value to inject parsed content
392+
$property = new ReflectionProperty(TestObjectHandler::class, 'testObjectHandler');
393+
$property->setAccessible(true);
394+
$property->setValue(null);
395+
396+
$mockDataParser = $this->createMock(TestDataParser::class);
397+
$mockDataParser
398+
->method('readTestData')
399+
->willReturn($data);
400+
401+
$mockConfig = $this->createMock(MftfApplicationConfig::class);
402+
$mockConfig
403+
->method('forceGenerateEnabled')
404+
->willReturn(false);
405+
406+
$mockResolver = $this->createMock(ModuleResolver::class);
407+
$mockResolver
408+
->method('getEnabledModules')
409+
->willReturn([]);
410+
411+
$objectManager = ObjectManagerFactory::getObjectManager();
412+
$objectManagerMockInstance = $this->createMock(ObjectManager::class);
413+
$objectManagerMockInstance
414+
->method('create')
415+
->will(
416+
$this->returnCallback(
417+
function (
418+
$class,
419+
$arguments = []
420+
) use (
421+
$objectManager,
422+
$mockDataParser,
423+
$mockConfig,
424+
$mockResolver
425+
) {
426+
if ($class === TestDataParser::class) {
427+
return $mockDataParser;
428+
}
429+
if ($class === MftfApplicationConfig::class) {
430+
return $mockConfig;
431+
}
432+
if ($class === ModuleResolver::class) {
433+
return $mockResolver;
434+
}
435+
436+
return $objectManager->create($class, $arguments);
437+
}
438+
)
439+
);
440+
441+
$objectManagerProperty = new ReflectionProperty(ObjectManager::class, 'instance');
442+
$objectManagerProperty->setAccessible(true);
443+
$objectManagerProperty->setValue($objectManagerMockInstance);
444+
445+
$resolver = ModuleResolver::getInstance();
446+
$property = new ReflectionProperty(ModuleResolver::class, 'enabledModuleNameAndPaths');
447+
$property->setAccessible(true);
448+
$property->setValue($resolver, $paths);
449+
}
384450
}

dev/tests/unit/Magento/FunctionalTestFramework/Util/ModulePathExtractorTest.php

Lines changed: 50 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,15 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
declare(strict_types=1);
67

78
namespace tests\unit\Magento\FunctionalTestFramework\Util;
89

10+
use Magento\FunctionalTestingFramework\ObjectManager;
911
use Magento\FunctionalTestingFramework\Util\ModulePathExtractor;
12+
use Magento\FunctionalTestingFramework\Util\ModuleResolver;
13+
use ReflectionProperty;
1014
use tests\unit\Util\MagentoTestCase;
11-
use tests\unit\Util\MockModuleResolverBuilder;
1215

1316
class ModulePathExtractorTest extends MagentoTestCase
1417
{
@@ -36,8 +39,7 @@ public function testGetModuleAppCode()
3639
{
3740
$mockPath = '/base/path/app/code/Magento/ModuleA/Test/Mftf/Test/SomeTest.xml';
3841

39-
$resolverMock = new MockModuleResolverBuilder();
40-
$resolverMock->setup($this->mockTestModulePaths);
42+
$this->mockModuleResolver($this->mockTestModulePaths);
4143
$extractor = new ModulePathExtractor();
4244
$this->assertEquals('ModuleA', $extractor->extractModuleName($mockPath));
4345
}
@@ -51,8 +53,7 @@ public function testGetVendorAppCode()
5153
{
5254
$mockPath = '/base/path/app/code/VendorB/ModuleB/Test/Mftf/Test/SomeTest.xml';
5355

54-
$resolverMock = new MockModuleResolverBuilder();
55-
$resolverMock->setup($this->mockTestModulePaths);
56+
$this->mockModuleResolver($this->mockTestModulePaths);
5657
$extractor = new ModulePathExtractor();
5758
$this->assertEquals('VendorB', $extractor->getExtensionPath($mockPath));
5859
}
@@ -66,8 +67,7 @@ public function testGetModuleDevTests()
6667
{
6768
$mockPath = '/base/path/dev/tests/acceptance/tests/functional/Magento/ModuleCTest/Test/SomeTest.xml';
6869

69-
$resolverMock = new MockModuleResolverBuilder();
70-
$resolverMock->setup($this->mockTestModulePaths);
70+
$this->mockModuleResolver($this->mockTestModulePaths);
7171
$extractor = new ModulePathExtractor();
7272
$this->assertEquals('ModuleC', $extractor->extractModuleName($mockPath));
7373
}
@@ -81,8 +81,7 @@ public function testGetVendorDevTests()
8181
{
8282
$mockPath = '/base/path/dev/tests/acceptance/tests/functional/VendorD/ModuleDTest/Test/SomeTest.xml';
8383

84-
$resolverMock = new MockModuleResolverBuilder();
85-
$resolverMock->setup($this->mockTestModulePaths);
84+
$this->mockModuleResolver($this->mockTestModulePaths);
8685
$extractor = new ModulePathExtractor();
8786
$this->assertEquals('VendorD', $extractor->getExtensionPath($mockPath));
8887
}
@@ -96,8 +95,7 @@ public function testGetModule()
9695
{
9796
$mockPath = '/base/path/dev/tests/acceptance/tests/functional/FunctionalTest/SomeModuleE/Test/SomeTest.xml';
9897

99-
$resolverMock = new MockModuleResolverBuilder();
100-
$resolverMock->setup($this->mockTestModulePaths);
98+
$this->mockModuleResolver($this->mockTestModulePaths);
10199
$extractor = new ModulePathExtractor();
102100
$this->assertEquals('NO MODULE DETECTED', $extractor->extractModuleName($mockPath));
103101
}
@@ -111,8 +109,7 @@ public function testGetModuleVendorDir()
111109
{
112110
$mockPath = '/base/path/vendor/magento/module-modulef/Test/Mftf/Test/SomeTest.xml';
113111

114-
$resolverMock = new MockModuleResolverBuilder();
115-
$resolverMock->setup($this->mockTestModulePaths);
112+
$this->mockModuleResolver($this->mockTestModulePaths);
116113
$extractor = new ModulePathExtractor();
117114
$this->assertEquals('ModuleF', $extractor->extractModuleName($mockPath));
118115
}
@@ -126,9 +123,47 @@ public function testGetVendorVendorDir()
126123
{
127124
$mockPath = '/base/path/vendor/vendorg/module-moduleg-test/Test/SomeTest.xml';
128125

129-
$resolverMock = new MockModuleResolverBuilder();
130-
$resolverMock->setup($this->mockTestModulePaths);
126+
$this->mockModuleResolver($this->mockTestModulePaths);
131127
$extractor = new ModulePathExtractor();
132128
$this->assertEquals('VendorG', $extractor->getExtensionPath($mockPath));
133129
}
130+
131+
/**
132+
* Mock module resolver.
133+
*
134+
* @param array $paths
135+
*
136+
* @return void
137+
*/
138+
private function mockModuleResolver(array $paths): void
139+
{
140+
$mockResolver = $this->createMock(ModuleResolver::class);
141+
$mockResolver
142+
->method('getEnabledModules')
143+
->willReturn([]);
144+
145+
$objectManagerMockInstance = $this->createMock(ObjectManager::class);
146+
$objectManagerMockInstance
147+
->method('create')
148+
->will(
149+
$this->returnCallback(
150+
function ($class) use ($mockResolver) {
151+
if ($class === ModuleResolver::class) {
152+
return $mockResolver;
153+
}
154+
155+
return null;
156+
}
157+
)
158+
);
159+
160+
$objectManagerProperty = new ReflectionProperty(ObjectManager::class, 'instance');
161+
$objectManagerProperty->setAccessible(true);
162+
$objectManagerProperty->setValue($objectManagerMockInstance);
163+
164+
$resolver = ModuleResolver::getInstance();
165+
$property = new ReflectionProperty(ModuleResolver::class, 'enabledModuleNameAndPaths');
166+
$property->setAccessible(true);
167+
$property->setValue($resolver, $paths);
168+
}
134169
}

dev/tests/unit/Magento/FunctionalTestFramework/Util/TestGeneratorTest.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use Magento\FunctionalTestingFramework\Config\MftfApplicationConfig;
1212
use Magento\FunctionalTestingFramework\Exceptions\TestReferenceException;
1313
use Magento\FunctionalTestingFramework\Filter\FilterList;
14+
use Magento\FunctionalTestingFramework\Test\Handlers\TestObjectHandler;
1415
use Magento\FunctionalTestingFramework\Test\Objects\ActionObject;
1516
use Magento\FunctionalTestingFramework\Test\Objects\TestHookObject;
1617
use Magento\FunctionalTestingFramework\Test\Objects\TestObject;
@@ -31,6 +32,10 @@ class TestGeneratorTest extends MagentoTestCase
3132
protected function setUp(): void
3233
{
3334
TestLoggingUtil::getInstance()->setMockLoggingUtil();
35+
// Used to mock initTestData method running.
36+
$shouldSkipInitTestDataProperty = new ReflectionProperty(TestObjectHandler::class, 'shouldSkipInitTestData');
37+
$shouldSkipInitTestDataProperty->setAccessible(true);
38+
$shouldSkipInitTestDataProperty->setValue(true);
3439
}
3540

3641
/**
@@ -41,6 +46,10 @@ protected function setUp(): void
4146
protected function tearDown(): void
4247
{
4348
GenerationErrorHandler::getInstance()->reset();
49+
50+
$shouldSkipInitTestDataProperty = new ReflectionProperty(TestObjectHandler::class, 'shouldSkipInitTestData');
51+
$shouldSkipInitTestDataProperty->setAccessible(true);
52+
$shouldSkipInitTestDataProperty->setValue(false);
4453
}
4554

4655
/**

dev/tests/unit/Util/MockModuleResolverBuilder.php

Lines changed: 0 additions & 61 deletions
This file was deleted.

0 commit comments

Comments
 (0)