Skip to content

Commit 77e13bb

Browse files
committed
33293: Removed Singleton and used Object Manager
1 parent d46a66d commit 77e13bb

File tree

4 files changed

+90
-75
lines changed

4 files changed

+90
-75
lines changed

dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Handlers/PersistedObjectHandlerTest.php

+69-42
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,13 @@
99

1010
use Exception;
1111
use Magento\FunctionalTestingFramework\DataGenerator\Handlers\PersistedObjectHandler;
12+
use Magento\FunctionalTestingFramework\DataGenerator\Parsers\DataProfileSchemaParser;
1213
use Magento\FunctionalTestingFramework\DataGenerator\Persist\CurlHandler;
14+
use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException;
1315
use Magento\FunctionalTestingFramework\Exceptions\TestReferenceException;
16+
use Magento\FunctionalTestingFramework\ObjectManager;
17+
use Magento\FunctionalTestingFramework\ObjectManagerFactory;
18+
use Magento\FunctionalTestingFramework\DataGenerator\Handlers\DataObjectHandler;
1419
use ReflectionProperty;
1520
use tests\unit\Util\MagentoTestCase;
1621
use tests\unit\Util\ObjectHandlerUtil;
@@ -24,7 +29,7 @@ class PersistedObjectHandlerTest extends MagentoTestCase
2429
/**
2530
* @inheritDoc
2631
*/
27-
public function setUp(): void
32+
protected function setUp(): void
2833
{
2934
TestLoggingUtil::getInstance()->setMockLoggingUtil();
3035
}
@@ -90,9 +95,7 @@ public function testCreateSimpleEntity(): void
9095
}
9196
";
9297

93-
// Mock Classes
94-
ObjectHandlerUtil::mockDataObjectHandlerWithData($parserOutput);
95-
$this->mockCurlHandler($jsonResponse);
98+
$this->mockCurlHandler($jsonResponse, $parserOutput);
9699
$handler = PersistedObjectHandler::getInstance();
97100

98101
// Call method
@@ -140,8 +143,7 @@ public function testDeleteSimpleEntity(): void
140143
";
141144

142145
// Mock Classes
143-
ObjectHandlerUtil::mockDataObjectHandlerWithData($parserOutput);
144-
$this->mockCurlHandler($jsonResponse);
146+
$this->mockCurlHandler($jsonResponse, $parserOutput);
145147
$handler = PersistedObjectHandler::getInstance();
146148

147149
// Call method
@@ -194,8 +196,7 @@ public function testGetSimpleEntity(): void
194196
";
195197

196198
// Mock Classes
197-
ObjectHandlerUtil::mockDataObjectHandlerWithData($parserOutput);
198-
$this->mockCurlHandler($jsonResponse);
199+
$this->mockCurlHandler($jsonResponse, $parserOutput);
199200
$handler = PersistedObjectHandler::getInstance();
200201

201202
// Call method
@@ -334,7 +335,7 @@ public function testRetrieveEntityAcrossScopes(): void
334335
]
335336
]
336337
];
337-
$jsonReponseOne = "
338+
$jsonResponseOne = "
338339
{
339340
\"" . strtolower($dataKeyOne) . "\" : \"{$dataValueOne}\"
340341
}
@@ -353,22 +354,21 @@ public function testRetrieveEntityAcrossScopes(): void
353354
// Mock Classes and Create Entities
354355
$handler = PersistedObjectHandler::getInstance();
355356

356-
ObjectHandlerUtil::mockDataObjectHandlerWithData($parserOutputOne);
357-
$this->mockCurlHandler($jsonReponseOne);
357+
$this->mockCurlHandler($jsonResponseOne, $parserOutputOne);
358358
$handler->createEntity(
359359
$entityStepKeyOne,
360360
PersistedObjectHandler::TEST_SCOPE,
361361
$entityNameOne
362362
);
363363

364-
$this->mockCurlHandler($jsonReponseTwo);
364+
$this->mockCurlHandler($jsonReponseTwo, $parserOutputOne);
365365
$handler->createEntity(
366366
$entityStepKeyTwo,
367367
PersistedObjectHandler::HOOK_SCOPE,
368368
$entityNameTwo
369369
);
370370

371-
$this->mockCurlHandler($jsonReponseThree);
371+
$this->mockCurlHandler($jsonReponseThree, $parserOutputOne);
372372
$handler->createEntity(
373373
$entityStepKeyThree,
374374
PersistedObjectHandler::SUITE_SCOPE,
@@ -432,17 +432,15 @@ public function testRetrieveEntityValidField(
432432
]
433433
]
434434
];
435-
$jsonReponseOne = "
435+
$jsonResponseOne = "
436436
{
437437
\"" . strtolower($key) . "\" : \"{$value}\"
438438
}
439439
";
440440

441441
// Mock Classes and Create Entities
442442
$handler = PersistedObjectHandler::getInstance();
443-
444-
ObjectHandlerUtil::mockDataObjectHandlerWithData($parserOutputOne);
445-
$this->mockCurlHandler($jsonReponseOne);
443+
$this->mockCurlHandler($jsonResponseOne, $parserOutputOne);
446444
$handler->createEntity($stepKey, $scope, $name);
447445

448446
// Call method
@@ -463,7 +461,7 @@ public function testRetrieveEntityValidField(
463461
* @dataProvider entityDataProvider
464462
*
465463
* @return void
466-
* @throws TestReferenceException
464+
* @throws TestReferenceException|TestFrameworkException
467465
*/
468466
public function testRetrieveEntityInValidField(
469467
string $name,
@@ -490,16 +488,15 @@ public function testRetrieveEntityInValidField(
490488
]
491489
]
492490
];
493-
$jsonReponseOne = "
491+
$jsonResponseOne = "
494492
{
495493
\"" . strtolower($key) . "\" : \"{$value}\"
496494
}
497495
";
498496

499497
// Mock Classes and Create Entities
500498
$handler = PersistedObjectHandler::getInstance();
501-
ObjectHandlerUtil::mockDataObjectHandlerWithData($parserOutputOne);
502-
$this->mockCurlHandler($jsonReponseOne);
499+
$this->mockCurlHandler($jsonResponseOne, $parserOutputOne);
503500
$handler->createEntity($stepKey, $scope, $name);
504501

505502
// Call method
@@ -514,7 +511,7 @@ public function testRetrieveEntityInValidField(
514511
}
515512

516513
/**
517-
* Data provider for testRetrieveEntityField
514+
* Data provider for testRetrieveEntityField.
518515
*
519516
* @return array
520517
*/
@@ -531,45 +528,75 @@ public static function entityDataProvider(): array
531528
* Create mock curl handler.
532529
*
533530
* @param string $response
534-
* @throws Exception
531+
* @param array $parserOutput
532+
*
533+
* @return void
535534
*/
536-
public function mockCurlHandler(string $response): void
535+
public function mockCurlHandler(string $response, array $parserOutput): void
537536
{
538-
$mockCurlHandler = $this->createMock(CurlHandler::class);
539-
$mockCurlHandler->expects($this->any())
537+
$dataObjectHandler = new ReflectionProperty(DataObjectHandler::class, 'INSTANCE');
538+
$dataObjectHandler->setAccessible(true);
539+
$dataObjectHandler->setValue(null);
540+
541+
$mockDataProfileSchemaParser = $this->createMock(DataProfileSchemaParser::class);
542+
$mockDataProfileSchemaParser
543+
->method('readDataProfiles')
544+
->willReturn($parserOutput);
545+
546+
$curlHandler = $this->createMock(CurlHandler::class);
547+
$curlHandler
540548
->method('executeRequest')
541549
->willReturn($response);
542-
$mockCurlHandler->expects($this->once())
550+
$curlHandler
543551
->method('getRequestDataArray')
544552
->willReturn([]);
545-
$mockCurlHandler->expects($this->once())
553+
$curlHandler
546554
->method('isContentTypeJson')
547555
->willReturn(true);
548556

549-
$property = new ReflectionProperty(CurlHandler::class, "INSTANCE");
550-
$property->setAccessible(true);
551-
$property->setValue($mockCurlHandler);
557+
$objectManagerInstance = ObjectManagerFactory::getObjectManager();
558+
$objectManagerMockInstance = $this->createMock(ObjectManager::class);
559+
$objectManagerMockInstance->expects($this->any())
560+
->method('create')
561+
->will(
562+
$this->returnCallback(
563+
function ($class, array $arguments = []) use ($curlHandler, $objectManagerInstance, $mockDataProfileSchemaParser) {
564+
if ($class === CurlHandler::class) {
565+
return $curlHandler;
566+
}
567+
568+
if ($class === DataProfileSchemaParser::class) {
569+
return $mockDataProfileSchemaParser;
570+
}
571+
572+
return $objectManagerInstance->create($class, $arguments);
573+
}
574+
)
575+
);
576+
577+
$objectManagerProperty = new ReflectionProperty(ObjectManager::class, 'instance');
578+
$objectManagerProperty->setAccessible(true);
579+
$objectManagerProperty->setValue($objectManagerMockInstance);
552580
}
553581

554582
/**
555-
* @inheritDoc
583+
* After class functionality.
584+
*
585+
* @return void
556586
*/
557-
public function tearDown(): void
587+
public static function tearDownAfterClass(): void
558588
{
589+
parent::tearDownAfterClass();
590+
559591
// Clear out Singleton between tests
560-
$property = new ReflectionProperty(PersistedObjectHandler::class, 'INSTANCE');
592+
$property = new ReflectionProperty(PersistedObjectHandler::class, "INSTANCE");
561593
$property->setAccessible(true);
562594
$property->setValue(null);
563595

564-
parent::tearDown(); // TODO: Change the autogenerated stub
565-
}
596+
$property = new ReflectionProperty(ObjectManager::class, 'instance');
597+
$property->setAccessible(true);
598+
$property->setValue(null);
566599

567-
/**
568-
* @inheritDoc
569-
*/
570-
public static function tearDownAfterClass(): void
571-
{
572600
TestLoggingUtil::getInstance()->clearMockLoggingUtil();
573-
parent::tearDownAfterClass();
574601
}
575602
}

dev/tests/unit/Util/MagentoTestCase.php

+2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ public static function setUpBeforeClass(): void
1919
if (!self::fileExists(DOCS_OUTPUT_DIR)) {
2020
mkdir(DOCS_OUTPUT_DIR, 0755, true);
2121
}
22+
// Should be used to clean AspectMock mocking before using PHPUnit mocking and Reflection.
23+
AspectMock::clean();
2224
parent::setUpBeforeClass();
2325
}
2426

src/Magento/FunctionalTestingFramework/DataGenerator/Persist/CurlHandler.php

+1-29
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,6 @@ class CurlHandler
6363
*/
6464
private $isJson;
6565

66-
/**
67-
* Singleton CurlHandler Instance.
68-
*
69-
* @var CurlHandler
70-
*/
71-
private static $INSTANCE;
72-
7366
/**
7467
* Operation to Curl method mapping.
7568
*
@@ -89,7 +82,7 @@ class CurlHandler
8982
* @param EntityDataObject $entityObject
9083
* @param string $storeCode
9184
*/
92-
private function __construct($operation, $entityObject, $storeCode = null)
85+
public function __construct($operation, $entityObject, $storeCode = null)
9386
{
9487
$this->operation = $operation;
9588
$this->entityObject = $entityObject;
@@ -102,27 +95,6 @@ private function __construct($operation, $entityObject, $storeCode = null)
10295
$this->isJson = false;
10396
}
10497

105-
/**
106-
* Get CurlHandler instance.
107-
*
108-
* @param string $operation
109-
* @param EntityDataObject $entityObject
110-
* @param string|null $storeCode
111-
*
112-
* @return CurlHandler
113-
*/
114-
public static function getInstance(
115-
string $operation,
116-
EntityDataObject $entityObject,
117-
?string $storeCode = null
118-
) {
119-
if (self::$INSTANCE === null) {
120-
return new self($operation, $entityObject, $storeCode);
121-
}
122-
123-
return self::$INSTANCE;
124-
}
125-
12698
/**
12799
* Executes an api request based on parameters given by constructor.
128100
*

src/Magento/FunctionalTestingFramework/DataGenerator/Persist/DataPersistenceHandler.php

+18-4
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use Magento\FunctionalTestingFramework\DataGenerator\Objects\EntityDataObject;
1010
use Magento\FunctionalTestingFramework\DataGenerator\Handlers\DataObjectHandler;
1111
use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException;
12+
use Magento\FunctionalTestingFramework\ObjectManagerFactory;
1213

1314
/**
1415
* Class DataPersistenceHandler
@@ -86,7 +87,10 @@ public function createEntity($storeCode = null)
8687
if (!empty($storeCode)) {
8788
$this->storeCode = $storeCode;
8889
}
89-
$curlHandler = CurlHandler::getInstance('create', $this->entityObject, $this->storeCode);
90+
$curlHandler = ObjectManagerFactory::getObjectManager()->create(
91+
CurlHandler::class,
92+
['create', $this->entityObject, $this->storeCode]
93+
);
9094
$result = $curlHandler->executeRequest($this->dependentObjects);
9195
$this->setCreatedObject(
9296
$result,
@@ -111,7 +115,10 @@ public function updateEntity($updateDataName, $updateDependentObjects = [])
111115
$this->dependentObjects[] = $dependentObject->getCreatedObject();
112116
}
113117
$updateEntityObject = DataObjectHandler::getInstance()->getObject($updateDataName);
114-
$curlHandler = CurlHandler::getInstance('update', $updateEntityObject, $this->storeCode);
118+
$curlHandler = ObjectManagerFactory::getObjectManager()->create(
119+
CurlHandler::class,
120+
['update', $updateEntityObject, $this->storeCode]
121+
);
115122
$result = $curlHandler->executeRequest(array_merge($this->dependentObjects, [$this->createdObject]));
116123
$this->setCreatedObject(
117124
$result,
@@ -134,7 +141,10 @@ public function getEntity($index = null, $storeCode = null)
134141
if (!empty($storeCode)) {
135142
$this->storeCode = $storeCode;
136143
}
137-
$curlHandler = CurlHandler::getInstance('get', $this->entityObject, $this->storeCode);
144+
$curlHandler = ObjectManagerFactory::getObjectManager()->create(
145+
CurlHandler::class,
146+
['get', $this->entityObject, $this->storeCode]
147+
);
138148
$result = $curlHandler->executeRequest($this->dependentObjects);
139149
$this->setCreatedObject(
140150
$result,
@@ -152,7 +162,11 @@ public function getEntity($index = null, $storeCode = null)
152162
*/
153163
public function deleteEntity()
154164
{
155-
$curlHandler = CurlHandler::getInstance('delete', $this->createdObject, $this->storeCode);
165+
$curlHandler = ObjectManagerFactory::getObjectManager()->create(
166+
CurlHandler::class,
167+
['delete', $this->createdObject, $this->storeCode]
168+
);
169+
156170
$curlHandler->executeRequest($this->dependentObjects);
157171
}
158172

0 commit comments

Comments
 (0)