Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
DataExtensionUtilTest.php
Go to the documentation of this file.
1 <?php
8 
14 use AspectMock\Test as AspectMock;
15 
20 {
25  protected function setUp()
26  {
27  AspectMock::clean();
28  }
29 
30  public function testNoParentData()
31  {
32  $extendedDataObject = [
33  'entity' => [
34  'extended' => [
35  'type' => 'testType',
36  'extends' => "parent",
37  'data' => [
38  0 => [
39  'key' => 'testKey',
40  'value' => 'testValue'
41  ]
42  ]
43  ]
44  ]
45  ];
46 
47  $this->setMockEntities($extendedDataObject);
48 
49  $this->expectExceptionMessage("Parent Entity parent not defined for Entity extended.");
50  DataObjectHandler::getInstance()->getObject("extended");
51  }
52 
54  {
55  $extendedDataObjects = [
56  'entity' => [
57  'extended' => [
58  'type' => 'testType',
59  'extends' => "parent"
60  ],
61  'parent' => [
62  'type' => 'type',
63  'extends' => "grandparent"
64  ],
65  'grandparent' => [
66  'type' => 'grand'
67  ]
68  ]
69  ];
70 
71  $this->setMockEntities($extendedDataObjects);
72 
73  $this->expectExceptionMessage(
74  "Cannot extend an entity that already extends another entity. Entity: parent." . PHP_EOL
75  );
76  DataObjectHandler::getInstance()->getObject("extended");
77  }
78 
79  public function testExtendedVarGetter()
80  {
81  $extendedDataObjects = [
82  'entity' => [
83  'extended' => [
84  'type' => 'testType',
85  'extends' => "parent"
86  ],
87  'parent' => [
88  'type' => 'type',
89  'var' => [
90  'someOtherEntity' => [
91  'entityType' => 'someOtherEntity',
92  'entityKey' => 'id',
93  'key' => 'someOtherEntity'
94  ]
95  ]
96  ]
97  ]
98  ];
99 
100  $this->setMockEntities($extendedDataObjects);
101  $resultextendedDataObject = DataObjectHandler::getInstance()->getObject("extended");
102  // Perform Asserts
103  $this->assertEquals("someOtherEntity->id", $resultextendedDataObject->getVarReference("someOtherEntity"));
104  }
105 
106  public function testGetLinkedEntities()
107  {
108  $extendedDataObjects = [
109  'entity' => [
110  'extended' => [
111  'type' => 'testType',
112  'extends' => "parent"
113  ],
114  'parent' => [
115  'type' => 'type',
116  'requiredEntity' => [
117  'linkedEntity1' => [
118  'type' => 'linkedEntityType',
119  'value' => 'linkedEntity1'
120  ],
121  'linkedEntity2' => [
122  'type' => 'otherEntityType',
123  'value' => 'linkedEntity2'
124  ],
125  ]
126  ]
127  ]
128  ];
129 
130  $this->setMockEntities($extendedDataObjects);
131  // Perform Asserts
132  $resultextendedDataObject = DataObjectHandler::getInstance()->getObject("extended");
133  $this->assertEquals("linkedEntity1", $resultextendedDataObject->getLinkedEntitiesOfType("linkedEntityType")[0]);
134  $this->assertEquals("linkedEntity2", $resultextendedDataObject->getLinkedEntitiesOfType("otherEntityType")[0]);
135  }
136 
137  private function setMockEntities($mockEntityData)
138  {
139  $property = new \ReflectionProperty(DataObjectHandler::class, 'INSTANCE');
140  $property->setAccessible(true);
141  $property->setValue(null);
142 
143  $mockDataProfileSchemaParser = AspectMock::double(DataProfileSchemaParser::class, [
144  'readDataProfiles' => $mockEntityData
145  ])->make();
146 
147  $mockObjectManager = AspectMock::double(ObjectManager::class, [
148  'create' => $mockDataProfileSchemaParser
149  ])->make();
150 
151  AspectMock::double(ObjectManagerFactory::class, [
152  'getObjectManager' => $mockObjectManager
153  ]);
154  }
155 }