Skip to content

Commit b9721b3

Browse files
committed
MQE-545: [Unit Test] OperationDefinitionObjectHandler.php
- Added Test cases, a lot of data definition.
1 parent 86ad181 commit b9721b3

File tree

1 file changed

+155
-2
lines changed

1 file changed

+155
-2
lines changed

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

Lines changed: 155 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,168 @@
66

77
namespace tests\unit\Magento\FunctionalTestFramework\DataGenerator\Handlers;
88

9+
use AspectMock\Test as AspectMock;
10+
use Magento\FunctionalTestingFramework\DataGenerator\Objects\OperationElement;
11+
use Magento\FunctionalTestingFramework\ObjectManager;
12+
use Magento\FunctionalTestingFramework\ObjectManagerFactory;
13+
use Magento\FunctionalTestingFramework\DataGenerator\Handlers\OperationDefinitionObjectHandler;
14+
use Magento\FunctionalTestingFramework\DataGenerator\Parsers\OperationDefinitionParser;
915
use PHPUnit\Framework\TestCase;
1016

1117
/**
1218
* Class OperationDefinitionObjectHandlerTest
1319
*/
1420
class OperationDefinitionObjectHandlerTest extends TestCase
1521
{
16-
public function testTodo()
22+
public function testGetAllObjects()
1723
{
18-
$this->markTestIncomplete('TODO');
24+
// Operation Metadata. BE CAREFUL WHEN EDITING, Objects defined below rely on values in this array.
25+
$mockData = ["operation" => [
26+
"testOperationName" => [
27+
"dataType" => "operationDataTypeName",
28+
"type" => "create",
29+
"auth" => "adminOauth",
30+
"url" => "/V1/object/",
31+
"method" => "POST",
32+
"successRegex" => "/messages-message-success/",
33+
"contentType" => [
34+
0 => [
35+
"value" => "application/json"
36+
]
37+
],
38+
"header" => [
39+
0 => [
40+
"param" => "testParameter",
41+
"value" => "testHeader"
42+
]
43+
],
44+
"param" => [
45+
0 => [
46+
"key" => "testUrlParamKey",
47+
"value" => "testUrlParamValue"
48+
]
49+
],
50+
"object" => [
51+
0 => [
52+
"key" => "object",
53+
"dataType" => "objectType",
54+
"field" => [
55+
0 => [
56+
"key" => "id",
57+
"value" => "integer"
58+
],
59+
1 => [
60+
"key" => "name",
61+
"value" => "string",
62+
"required" => "true"
63+
],
64+
2 => [
65+
"key" => "active",
66+
"value" => "boolean"
67+
]
68+
]
69+
]
70+
],
71+
"array" => [
72+
0 => [
73+
"key" => "ObjectArray",
74+
"object" => [
75+
0 => [
76+
"key" => "nestedObjectKey",
77+
"dataType" => "nestedObjectType",
78+
"field" => [
79+
0 => [
80+
"key" => "nestedFieldKey",
81+
"value" => "string"
82+
]
83+
]
84+
]
85+
]
86+
]
87+
]
88+
],
89+
"testOperationName2" => [
90+
"dataType" => "operationDataTypeName2",
91+
"type" => "create",
92+
"field" => [
93+
0 => [
94+
"key" => "id",
95+
"value" => "integer"
96+
],
97+
1 => [
98+
"key" => "name",
99+
"value" => "string"
100+
]
101+
],
102+
"array" => [
103+
0 => [
104+
"key" => "arrayKey",
105+
"value" => [
106+
0 => [
107+
"value" => "string"
108+
]
109+
]
110+
]
111+
]
112+
]
113+
]];
114+
115+
//prepare OperationElements to compare against.
116+
$expectedNestedMetadata1 = new OperationElement("id", "integer", "field", false, [], null);
117+
$expectedNestedMetadata2 = new OperationElement("name", "string", "field", true, [], null);
118+
$expectedNestedMetadata3 = new OperationElement("active", "boolean", "field", false, [], null);
119+
$expectedOperation1 = new OperationElement("object", "objectType", "object", false, [],
120+
[0 => $expectedNestedMetadata1, 1 => $expectedNestedMetadata2, 2 =>$expectedNestedMetadata3]);
121+
122+
$twoLevelNestedMetadata = new OperationElement("nestedFieldKey", "string", "field", false, [], null);
123+
$oneLevelNestedMetadata = new OperationElement("nestedObjectKey", "nestedObjectType", "object", false, [],
124+
[0 => $twoLevelNestedMetadata]);
125+
$expectedOperation2 = new OperationElement("ObjectArray", "nestedObjectType", "nestedObjectKey", false,
126+
["nestedObjectKey" => $oneLevelNestedMetadata], null);
127+
128+
// Set up mocked data output
129+
$this->setMockParserOutput($mockData);
130+
131+
// get Operations
132+
$operationDefinitionManager = OperationDefinitionObjectHandler::getInstance();
133+
$operations = $operationDefinitionManager->getAllObjects();
134+
$operationByName = $operationDefinitionManager->getOperationDefinition("create", "operationDataTypeName");
135+
136+
// perform asserts on $operations
137+
$this->assertCount(2, $operations);
138+
$this->assertArrayHasKey("createoperationDataTypeName", $operations);
139+
$this->assertArrayHasKey("createoperationDataTypeName2", $operations);
140+
141+
// perform asserts on $createOperationByName
142+
$this->assertEquals([0 => 'testParameter: testHeader', 1 => "Content-Type: application/json"], $operationByName->getHeaders());
143+
$this->assertEquals("create", $operationByName->getOperation());
144+
$this->assertEquals("POST", $operationByName->getApiMethod());
145+
$this->assertEquals("V1/object", $operationByName->getApiUrl());
146+
$this->assertEquals("operationDataTypeName", $operationByName->getDataType());
147+
$this->assertEquals("application/json", $operationByName->getContentType());
148+
$this->assertEquals("adminOauth", $operationByName->getAuth());
149+
$this->assertEquals("/messages-message-success/", $operationByName->getSuccessRegex());
150+
151+
// perform asserts on the instantiated metadata in the $createOperationByName
152+
$this->assertEquals($expectedOperation1, $operationByName->getOperationMetadata()[0]);
153+
$this->assertEquals($expectedOperation2, $operationByName->getOperationMetadata()[1]);
154+
155+
}
156+
157+
/**
158+
* Function used to set mock for parser return and force init method to run between tests.
159+
*
160+
* @param array $data
161+
*/
162+
private function setMockParserOutput($data)
163+
{
164+
// clear section object handler value to inject parsed content
165+
$property = new \ReflectionProperty(OperationDefinitionObjectHandler::class, 'DATA_DEFINITION_OBJECT_HANDLER');
166+
$property->setAccessible(true);
167+
$property->setValue(null);
168+
169+
$mockSectionParser = AspectMock::double(OperationDefinitionParser::class, ["readOperationMetadata" => $data])->make();
170+
$instance = AspectMock::double(ObjectManager::class, ['create' => $mockSectionParser])->make();
171+
AspectMock::double(ObjectManagerFactory::class, ['getObjectManager' => $instance]);
19172
}
20173
}

0 commit comments

Comments
 (0)