Skip to content

33300: Eliminated AspectMock usage from SuiteObjectHandlerTest.php #845

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,32 +3,30 @@
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);

namespace tests\unit\Magento\FunctionalTestFramework\Suite\Handlers;

use AspectMock\Test as AspectMock;
use Magento\FunctionalTestingFramework\ObjectManager\ObjectManager;
use Magento\FunctionalTestingFramework\ObjectManagerFactory;
use Exception;
use Magento\FunctionalTestingFramework\ObjectManager;
use Magento\FunctionalTestingFramework\Suite\Handlers\SuiteObjectHandler;
use Magento\FunctionalTestingFramework\Suite\Parsers\SuiteDataParser;
use Magento\FunctionalTestingFramework\Test\Handlers\TestObjectHandler;
use Magento\FunctionalTestingFramework\Test\Parsers\TestDataParser;
use ReflectionProperty;
use tests\unit\Util\MagentoTestCase;
use tests\unit\Util\SuiteDataArrayBuilder;
use tests\unit\Util\TestDataArrayBuilder;
use tests\unit\Util\MockModuleResolverBuilder;

class SuiteObjectHandlerTest extends MagentoTestCase
{
public function setUp(): void
{
$resolverMock = new MockModuleResolverBuilder();
$resolverMock->setup();
}

/**
* Tests basic parsing and accesors of suite object and suite object supporting classes
* Tests basic parsing and accessors of suite object and suite object supporting classes.
*
* @return void
* @throws Exception
*/
public function testGetSuiteObject()
public function testGetSuiteObject(): void
{
$suiteDataArrayBuilder = new SuiteDataArrayBuilder();
$mockData = $suiteDataArrayBuilder
Expand Down Expand Up @@ -82,35 +80,54 @@ public function testGetSuiteObject()
* Function used to set mock for parser return and force init method to run between tests.
*
* @param array $testData
* @throws \Exception
* @param array $suiteData
*
* @return void
* @throws Exception
*/
private function setMockTestAndSuiteParserOutput($testData, $suiteData)
private function setMockTestAndSuiteParserOutput(array $testData, array $suiteData): void
{
// clear test object handler value to inject parsed content
$property = new \ReflectionProperty(TestObjectHandler::class, 'testObjectHandler');
$property = new ReflectionProperty(TestObjectHandler::class, 'testObjectHandler');
$property->setAccessible(true);
$property->setValue(null);

// clear suite object handler value to inject parsed content
$property = new \ReflectionProperty(SuiteObjectHandler::class, 'instance');
$property = new ReflectionProperty(SuiteObjectHandler::class, 'instance');
$property->setAccessible(true);
$property->setValue(null);

$mockDataParser = AspectMock::double(TestDataParser::class, ['readTestData' => $testData])->make();
$mockSuiteDataParser = AspectMock::double(SuiteDataParser::class, ['readSuiteData' => $suiteData])->make();
$instance = AspectMock::double(
ObjectManager::class,
['create' => function ($clazz) use ($mockDataParser, $mockSuiteDataParser) {
if ($clazz == TestDataParser::class) {
return $mockDataParser;
}

if ($clazz == SuiteDataParser::class) {
return $mockSuiteDataParser;
}
}]
)->make();
// bypass the private constructor
AspectMock::double(ObjectManagerFactory::class, ['getObjectManager' => $instance]);
$mockDataParser = $this->createMock(TestDataParser::class);
$mockDataParser
->method('readTestData')
->willReturn($testData);

$mockSuiteDataParser = $this->createMock(SuiteDataParser::class);
$mockSuiteDataParser
->method('readSuiteData')
->willReturn($suiteData);

$instance = $this->createMock(ObjectManager::class);
$instance
->method('create')
->will(
$this->returnCallback(
function ($clazz) use ($mockDataParser, $mockSuiteDataParser) {
if ($clazz == TestDataParser::class) {
return $mockDataParser;
}

if ($clazz == SuiteDataParser::class) {
return $mockSuiteDataParser;
}

return null;
}
)
);

$property = new ReflectionProperty(ObjectManager::class, 'instance');
$property->setAccessible(true);
$property->setValue($instance);
}
}