Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
OperationDataArrayResolverTest.php
Go to the documentation of this file.
1 <?php
7 
8 use AspectMock\Test as AspectMock;
17 
19 {
20  const NESTED_METADATA_EXPECTED_RESULT = ["parentType" => [
21  "name" => "Hopper",
22  "address" => ["city" => "Hawkins", "state" => "Indiana", "zip" => 78758],
23  "isPrimary" => true,
24  "gpa" => 3.5678,
25  "phone" => 5555555
26  ]];
27 
28  const NESTED_METADATA_ARRAY_RESULT = ["parentType" => [
29  "name" => "Hopper",
30  "isPrimary" => true,
31  "gpa" => 3.5678,
32  "phone" => 5555555,
33  "address" => [
34  ["city" => "Hawkins", "state" => "Indiana", "zip" => 78758],
35  ["city" => "Austin", "state" => "Texas", "zip" => 78701],
36  ]
37  ]];
38 
43  public function setUp()
44  {
45  TestLoggingUtil::getInstance()->setMockLoggingUtil();
46  }
47 
58  {
59  // set up data object
60  $entityObjectBuilder = new EntityDataObjectBuilder();
61  $testDataObject = $entityObjectBuilder->build();
62 
63  // set up meta data operation elements
64  $operationElementBuilder = new OperationElementBuilder();
65  $operationElement = $operationElementBuilder->build();
66 
67  // resolve data object and metadata array
68  $operationDataArrayResolver = new OperationDataArrayResolver();
69  $result = $operationDataArrayResolver->resolveOperationDataArray(
70  $testDataObject,
71  [$operationElement],
72  'create'
73  );
74 
75  // assert on result
76  $expectedResult = ["testType" => [
77  "name" => "Hopper",
78  "gpa" => 3.5678,
79  "phone" => 5555555,
80  "isPrimary" => true
81  ]];
82 
83  $this->assertEquals($expectedResult, $result);
84  }
85 
93  public function testNestedMetadataResolve()
94  {
95  // set up data objects
96  $entityDataObjBuilder = new EntityDataObjectBuilder();
97  $parentDataObject = $entityDataObjBuilder
98  ->withName("parentObject")
99  ->withType("parentType")
100  ->withLinkedEntities(['childObject' => 'childType'])
101  ->build();
102 
103  $childDataObject = $entityDataObjBuilder
104  ->withName("childObject")
105  ->withType("childType")
106  ->withDataFields(["city" => "Hawkins", "state" => "Indiana", "zip" => "78758"])
107  ->build();
108 
109  // mock data object handler
110  $mockDOHInstance = AspectMock::double(DataObjectHandler::class, ['getObject' => $childDataObject])->make();
111  AspectMock::double(DataObjectHandler::class, ['getInstance' => $mockDOHInstance]);
112 
113  // set up metadata objects
114  $parentOpElementBuilder = new OperationElementBuilder();
115  $parentElement = $parentOpElementBuilder
116  ->withKey("parentType")
117  ->withType("parentType")
118  ->addFields(["address" => "childType"])
119  ->build();
120 
121  $operationDefinitionBuilder = new OperationDefinitionBuilder();
122  $childOperationDefinition = $operationDefinitionBuilder
123  ->withName("createChildType")
124  ->withOperation("create")
125  ->withType("childType")
126  ->withMetadata([
127  "city" => "string",
128  "state" => "string",
129  "zip" => "integer"
130  ])->build();
131 
132  // mock meta data object handler
133  $mockDOHInstance = AspectMock::double(
134  OperationDefinitionObjectHandler::class,
135  ['getObject' => $childOperationDefinition]
136  )->make();
137  AspectMock::double(OperationDefinitionObjectHandler::class, ['getInstance' => $mockDOHInstance]);
138 
139  // resolve data object and metadata array
140  $operationResolver = new OperationDataArrayResolver();
141  $result = $operationResolver->resolveOperationDataArray($parentDataObject, [$parentElement], "create", false);
142 
143  // assert on the result
144  $this->assertEquals(self::NESTED_METADATA_EXPECTED_RESULT, $result);
145  }
146 
156  public function testNestedMetadata()
157  {
158  // set up data objects
159  $entityDataObjectBuilder = new EntityDataObjectBuilder();
160  $parentDataObject = $entityDataObjectBuilder
161  ->withName("parentObject")
162  ->withType("parentType")
163  ->withLinkedEntities(['childObject' => 'childType'])
164  ->build();
165 
166  $childDataObject = $entityDataObjectBuilder
167  ->withName("childObject")
168  ->withType("childType")
169  ->withDataFields(["city" => "Hawkins", "state" => "Indiana", "zip" => "78758"])
170  ->build();
171 
172  // mock data object handler
173  $mockDOHInstance = AspectMock::double(DataObjectHandler::class, ['getObject' => $childDataObject])->make();
174  AspectMock::double(DataObjectHandler::class, ['getInstance' => $mockDOHInstance]);
175 
176  // set up metadata objects
177  $childOpElementBuilder = new OperationElementBuilder();
178  $childElement = $childOpElementBuilder
179  ->withKey("address")
180  ->withType("childType")
181  ->withFields(["city" => "string", "state" => "string", "zip" => "integer"])
182  ->build();
183 
184  $parentOpElementBuilder = new OperationElementBuilder();
185  $parentElement = $parentOpElementBuilder
186  ->withKey("parentType")
187  ->withType("parentType")
188  ->addElements(["address" => $childElement])
189  ->build();
190 
191  // resolve data object and metadata array
192  $operationResolver = new OperationDataArrayResolver();
193  $result = $operationResolver->resolveOperationDataArray($parentDataObject, [$parentElement], "create", false);
194 
195  // assert on the result
196  $this->assertEquals(self::NESTED_METADATA_EXPECTED_RESULT, $result);
197  }
198 
211  {
212  // set up data objects
213  $entityDataObjectBuilder = new EntityDataObjectBuilder();
214  $parentDataObject = $entityDataObjectBuilder
215  ->withName("parentObject")
216  ->withType("parentType")
217  ->withLinkedEntities(['childObject1' => 'childType', 'childObject2' => 'childType'])
218  ->build();
219 
220  // mock data object handler
221  $mockDOHInstance = AspectMock::double(DataObjectHandler::class, ["getObject" => function ($name) {
222  $entityDataObjectBuilder = new EntityDataObjectBuilder();
223 
224  if ($name == "childObject1") {
225  return $entityDataObjectBuilder
226  ->withName("childObject1")
227  ->withType("childType")
228  ->withDataFields(["city" => "Hawkins", "state" => "Indiana", "zip" => "78758"])
229  ->build();
230  }
231 
232  if ($name == "childObject2") {
233  return $entityDataObjectBuilder
234  ->withName("childObject2")
235  ->withType("childType")
236  ->withDataFields(["city" => "Austin", "state" => "Texas", "zip" => "78701"])
237  ->build();
238  }
239  }])->make();
240  AspectMock::double(DataObjectHandler::class, ['getInstance' => $mockDOHInstance]);
241 
242  // set up metadata objects
243  $childOpElementBuilder = new OperationElementBuilder();
244  $childElement = $childOpElementBuilder
245  ->withKey("childType")
246  ->withType("childType")
247  ->withFields(["city" => "string", "state" => "string", "zip" => "integer"])
248  ->build();
249 
250  $arrayOpElementBuilder = new OperationElementBuilder();
251  $arrayElement = $arrayOpElementBuilder
252  ->withKey("address")
253  ->withType("childType")
254  ->withFields([])
256  ->withNestedElements(["childType" => $childElement])
257  ->build();
258 
259  $parentOpElementBuilder = new OperationElementBuilder();
260  $parentElement = $parentOpElementBuilder
261  ->withKey("parentType")
262  ->withType("parentType")
263  ->addElements(["address" => $arrayElement])
264  ->build();
265 
266  // resolve data object and metadata array
267  $operationResolver = new OperationDataArrayResolver();
268  $result = $operationResolver->resolveOperationDataArray($parentDataObject, [$parentElement], "create", false);
269 
270  // Do assert on result here
271  $this->assertEquals(self::NESTED_METADATA_ARRAY_RESULT, $result);
272  }
273 
284  {
285  // set up data objects
286  $entityDataObjectBuilder = new EntityDataObjectBuilder();
287  $parentDataObject = $entityDataObjectBuilder
288  ->withName("parentObject")
289  ->withType("parentType")
290  ->withLinkedEntities(['childObject1' => 'childType', 'childObject2' => 'childType'])
291  ->build();
292 
293  // mock data object handler
294  $mockDOHInstance = AspectMock::double(DataObjectHandler::class, ["getObject" => function ($name) {
295  $entityDataObjectBuilder = new EntityDataObjectBuilder();
296 
297  if ($name == "childObject1") {
298  return $entityDataObjectBuilder
299  ->withName("childObject1")
300  ->withType("childType")
301  ->withDataFields(["city" => "Hawkins", "state" => "Indiana", "zip" => "78758"])
302  ->build();
303  };
304 
305  if ($name == "childObject2") {
306  return $entityDataObjectBuilder
307  ->withName("childObject2")
308  ->withType("childType")
309  ->withDataFields(["city" => "Austin", "state" => "Texas", "zip" => "78701"])
310  ->build();
311  }
312  }])->make();
313  AspectMock::double(DataObjectHandler::class, ['getInstance' => $mockDOHInstance]);
314 
315  // set up metadata objects
316  $arrayOpElementBuilder = new OperationElementBuilder();
317  $arrayElement = $arrayOpElementBuilder
318  ->withKey("address")
319  ->withType("childType")
321  ->withNestedElements([])
322  ->withFields([])
323  ->build();
324 
325  $parentOpElementBuilder = new OperationElementBuilder();
326  $parentElement = $parentOpElementBuilder
327  ->withKey("parentType")
328  ->withType("parentType")
329  ->addElements(["address" => $arrayElement])
330  ->build();
331 
332  $operationDefinitionBuilder = new OperationDefinitionBuilder();
333  $childOperationDefinition = $operationDefinitionBuilder
334  ->withName("createChildType")
335  ->withOperation("create")
336  ->withType("childType")
337  ->withMetadata([
338  "city" => "string",
339  "state" => "string",
340  "zip" => "integer"
341  ])->build();
342 
343  // mock meta data object handler
344  $mockDOHInstance = AspectMock::double(
345  OperationDefinitionObjectHandler::class,
346  ['getObject' => $childOperationDefinition]
347  )->make();
348  AspectMock::double(OperationDefinitionObjectHandler::class, ['getInstance' => $mockDOHInstance]);
349 
350  // resolve data object and metadata array
351  $operationResolver = new OperationDataArrayResolver();
352  $result = $operationResolver->resolveOperationDataArray($parentDataObject, [$parentElement], "create", false);
353 
354  // Do assert on result here
355  $this->assertEquals(self::NESTED_METADATA_ARRAY_RESULT, $result);
356  }
357 
362  public static function tearDownAfterClass()
363  {
364  TestLoggingUtil::getInstance()->clearMockLoggingUtil();
365  }
366 }
if(!isset($_GET['name'])) $name
Definition: log.php:14