Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
OperationDefinitionObjectHandlerTest.php
Go to the documentation of this file.
1 <?php
8 
9 use AspectMock\Test as AspectMock;
17 
22 {
23  public function testGetMultipleObjects()
24  {
25  // Data Variables for Assertions
26  $dataType1 = "type1";
27  $operationType1 = "create";
28  $operationType2 = "update";
29 
41  "testOperationName" => [
48  0 => [
51  ],
52  ]
53  ],[
60  0 => [
63  ],
64  ]
65  ]]];
66  $this->setMockParserOutput($mockData);
67 
68  //Perform Assertions
69  $operationDefinitionManager = OperationDefinitionObjectHandler::getInstance();
70  $operations = $operationDefinitionManager->getAllObjects();
71  $this->assertArrayHasKey($operationType1 . $dataType1, $operations);
72  $this->assertArrayHasKey($operationType2 . $dataType1, $operations);
73  }
74 
75  public function testObjectCreation()
76  {
77  // Data Variables for Assertions
78  $testDataTypeName1 = "type1";
79  $testAuth = "auth";
80  $testUrl = "V1/dataType";
81  $testOperationType = "create";
82  $testMethod = "POST";
83  $testSuccessRegex = "/messages-message-success/";
84  $testContentType = "application/json";
85  $testHeaderParam = "testParameter";
86  $testHeaderValue = "testHeader";
87  // Nested Object variables
88  $nestedObjectKey = "objectKey";
89  $nestedObjectType = "objectType";
90  $nestedEntryKey1 = "id";
91  $nestedEntryValue1 = "integer";
92  $nestedEntryKey2 = "name";
93  $nestedEntryValue2 = "string";
94  $nestedEntryRequired2 = "true";
95  $nestedEntryKey3 = "active";
96  $nestedEntryValue3 = "boolean";
97 
115  "testOperationName" => [
123  0 => [
124  "value" => $testContentType
125  ]
126  ],
128  0 => [
131  ]
132  ],
134  0 => [
137  ]
138  ],
140  0 => [
144  0 => [
147  ],
148  1 => [
152  ],
153  2 => [
156  ]
157  ]
158  ]
159  ],
160  ]]];
161  // Prepare objects to compare against
163  $expectedNestedField = new OperationElement($nestedEntryKey1, $nestedEntryValue1, $field, false, [], null);
164  $expectedNestedField2 = new OperationElement(
165  $nestedEntryKey2,
166  $nestedEntryValue2,
167  $field,
168  $nestedEntryRequired2,
169  [],
170  null
171  );
172  $expectedNestedField3 = new OperationElement($nestedEntryKey3, $nestedEntryValue3, $field, false, [], null);
173  $expectedOperation = new OperationElement(
174  $nestedObjectKey,
175  $nestedObjectType,
177  false,
178  [],
179  [0 => $expectedNestedField, 1 => $expectedNestedField2, 2 =>$expectedNestedField3]
180  );
181 
182  // Set up mocked data output
183  $this->setMockParserOutput($mockData);
184 
185  // Get Operation
186  $operationDefinitionManager = OperationDefinitionObjectHandler::getInstance();
187  $operation = $operationDefinitionManager->getOperationDefinition($testOperationType, $testDataTypeName1);
188 
189  // Perform Asserts
190  $this->assertEquals(
191  [0 => "{$testHeaderParam}: {$testHeaderValue}",
192  1 => OperationDefinitionObject::HTTP_CONTENT_TYPE_HEADER . ": {$testContentType}"],
193  $operation->getHeaders()
194  );
195  $this->assertEquals($testOperationType, $operation->getOperation());
196  $this->assertEquals($testMethod, $operation->getApiMethod());
197  $this->assertEquals($testUrl, $operation->getApiUrl());
198  $this->assertEquals($testDataTypeName1, $operation->getDataType());
199  $this->assertEquals($testContentType, $operation->getContentType());
200  $this->assertEquals($testAuth, $operation->getAuth());
201  $this->assertEquals($testSuccessRegex, $operation->getSuccessRegex());
202 
203  // perform asserts on the instantiated metadata in the $createOperationByName
204  $this->assertEquals($expectedOperation, $operation->getOperationMetadata()[0]);
205  }
206 
207  public function testObjectArrayCreation()
208  {
209  // Data Variables for Assertions
210  $dataType1 = "type1";
211  $operationType1 = "create";
212  $objectArrayKey = "ObjectArray";
213  $twiceNestedObjectKey = "nestedObjectKey";
214  $twiceNestedObjectType = "nestedObjectType";
215  $twiceNestedEntryKey = "nestedFieldKey";
216  $twiceNestedEntryValue = "string";
217  // Parser Output
227  "testOperationName" => [
234  0 => [
237  0 => [
241  0 => [
243  $twiceNestedEntryKey,
245  $twiceNestedEntryValue
246  ]
247  ]
248  ]
249  ]
250  ]
251  ]]]];
252  // Prepare Objects to compare against
253  $twoLevelNestedMetadata = new OperationElement(
254  $twiceNestedEntryKey,
255  $twiceNestedEntryValue,
257  false,
258  [],
259  null
260  );
261 
262  $oneLevelNestedMetadata = new OperationElement(
263  $twiceNestedObjectKey,
264  $twiceNestedObjectType,
266  false,
267  [],
268  [0 => $twoLevelNestedMetadata]
269  );
270 
271  $expectedOperation = new OperationElement(
272  $objectArrayKey,
273  $twiceNestedObjectType,
274  $twiceNestedObjectKey,
275  false,
276  [$twiceNestedObjectKey => $oneLevelNestedMetadata],
277  null
278  );
279 
280  // Set up mocked data output
281  $this->setMockParserOutput($mockData);
282 
283  // Get Operation
284  $operationDefinitionManager = OperationDefinitionObjectHandler::getInstance();
285  $operation = $operationDefinitionManager->getOperationDefinition($operationType1, $dataType1);
286  // Make Assertions
287 
288  $this->assertEquals($expectedOperation, $operation->getOperationMetadata()[0]);
289  }
290 
291  public function testLooseJsonCreation()
292  {
293  // Data Variables for Assertions
294  $dataType = "dataType";
295  $operationType = "create";
296  $entryKey = "id";
297  $entryValue = "integer";
298  $arrayKey = "arrayKey";
299  $arrayValue = "string";
309  "testOperationName" => [
313  0 => [
316  ]
317  ],
319  0 => [
322  0 => [
324  ]
325  ]
326  ]
327  ]
328  ]
329  ]];
330  // Prepare Objects to assert against
331  $entry = new OperationElement(
332  $entryKey,
333  $entryValue,
335  false,
336  [],
337  null
338  );
339  $array = new OperationElement(
340  $arrayKey,
341  $arrayValue,
343  false,
344  [],
345  null
346  );
347 
348  // Set up mocked data output
349  $this->setMockParserOutput($mockData);
350 
351  // get Operations
352  $operationDefinitionManager = OperationDefinitionObjectHandler::getInstance();
353  $operation = $operationDefinitionManager->getOperationDefinition($operationType, $dataType);
354 
355  // Perform Assertions
356  $this->assertEquals($entry, $operation->getOperationMetadata()[0]);
357  $this->assertEquals($array, $operation->getOperationMetadata()[1]);
358  }
359 
365  private function setMockParserOutput($data)
366  {
367  // clear Operation object handler value to inject parsed content
368  $property = new \ReflectionProperty(
369  OperationDefinitionObjectHandler::class,
370  'INSTANCE'
371  );
372  $property->setAccessible(true);
373  $property->setValue(null);
374 
375  $mockOperationParser = AspectMock::double(
376  OperationDefinitionParser::class,
377  ["readOperationMetadata" => $data]
378  )->make();
379  $instance = AspectMock::double(ObjectManager::class, ['create' => $mockOperationParser])->make();
380  AspectMock::double(ObjectManagerFactory::class, ['getObjectManager' => $instance]);
381  }
382 }
$operations
Definition: bulk.php:55