@@ -26,6 +26,11 @@ class DataObjectProcessorTest extends TestCase
2626 */
2727 private $ dataObjectProcessor ;
2828
29+ /**
30+ * @var MethodsMap
31+ */
32+ private $ methodsMapProcessor ;
33+
2934 /**
3035 * @var ExtensionAttributesProcessor|MockObject
3136 */
@@ -34,7 +39,7 @@ class DataObjectProcessorTest extends TestCase
3439 protected function setUp (): void
3540 {
3641 $ objectManager = new ObjectManager ($ this );
37- $ methodsMapProcessor = $ objectManager ->getObject (
42+ $ this -> methodsMapProcessor = $ objectManager ->getObject (
3843 MethodsMap::class,
3944 [
4045 'fieldNamer ' => $ objectManager ->getObject (FieldNamer::class),
@@ -48,35 +53,40 @@ protected function setUp(): void
4853 ->willReturn (['unserializedData ' ]);
4954
5055 $ objectManager ->setBackwardCompatibleProperty (
51- $ methodsMapProcessor ,
56+ $ this -> methodsMapProcessor ,
5257 'serializer ' ,
5358 $ serializerMock
5459 );
5560
5661 $ this ->extensionAttributesProcessorMock = $ this ->getMockBuilder (ExtensionAttributesProcessor::class)
5762 ->disableOriginalConstructor ()
5863 ->getMock ();
64+ }
65+
66+ /**
67+ * @param array $extensionAttributes
68+ * @param array $excludedMethodsClassMap
69+ * @param array $expectedOutput
70+ * @dataProvider buildOutputDataArrayDataProvider
71+ */
72+ public function testBuildOutputDataArray (
73+ array $ extensionAttributes ,
74+ array $ excludedMethodsClassMap ,
75+ array $ expectedOutput
76+ ) {
77+ $ objectManager = new ObjectManager ($ this );
5978
6079 $ this ->dataObjectProcessor = $ objectManager ->getObject (
6180 DataObjectProcessor::class,
6281 [
63- 'methodsMapProcessor ' => $ methodsMapProcessor ,
82+ 'methodsMapProcessor ' => $ this -> methodsMapProcessor ,
6483 'typeCaster ' => $ objectManager ->getObject (TypeCaster::class),
6584 'fieldNamer ' => $ objectManager ->getObject (FieldNamer::class),
66- 'extensionAttributesProcessor ' => $ this ->extensionAttributesProcessorMock
85+ 'extensionAttributesProcessor ' => $ this ->extensionAttributesProcessorMock ,
86+ 'excludedMethodsClassMap ' => $ excludedMethodsClassMap ,
6787 ]
6888 );
69- }
7089
71- /**
72- * @param array $extensionAttributes
73- * @param array $expectedOutputDataArray
74- *
75- * @dataProvider buildOutputDataArrayDataProvider
76- */
77- public function testBuildOutputDataArray ($ extensionAttributes , $ expectedOutputDataArray )
78- {
79- $ objectManager = new ObjectManager ($ this );
8090 /** @var TestDataObject $testDataObject */
8191 $ testDataObject = $ objectManager ->getObject (
8292 TestDataObject::class,
@@ -87,40 +97,70 @@ public function testBuildOutputDataArray($extensionAttributes, $expectedOutputDa
8797 ]
8898 );
8999
90- $ this ->extensionAttributesProcessorMock ->expects ($ this ->once ())
100+ if (in_array ('getExtensionAttributes ' , $ excludedMethodsClassMap [TestDataInterface::class] ?? [])) {
101+ $ expectedTimes = $ this ->never ();
102+ } else {
103+ $ expectedTimes = $ this ->once ();
104+ }
105+
106+ $ this ->extensionAttributesProcessorMock ->expects ($ expectedTimes )
91107 ->method ('buildOutputDataArray ' )
92108 ->willReturn ($ extensionAttributes );
93109
94110 $ outputData = $ this ->dataObjectProcessor
95111 ->buildOutputDataArray ($ testDataObject , TestDataInterface::class);
96- $ this ->assertEquals ($ expectedOutputDataArray , $ outputData );
112+ $ this ->assertEquals ($ expectedOutput , $ outputData );
97113 }
98114
99115 /**
100116 * @return array
101117 */
102118 public function buildOutputDataArrayDataProvider ()
103119 {
104- $ expectedOutputDataArray = [
120+ $ expectedOutput = [
105121 'id ' => '1 ' ,
106122 'address ' => 'someAddress ' ,
107123 'default_shipping ' => 'true ' ,
108124 'required_billing ' => 'false ' ,
109125 ];
110- $ extensionAttributeArray = [
126+
127+ $ extensionAttributes = [
111128 'attribute1 ' => 'value1 ' ,
112- 'attribute2 ' => 'value2 '
129+ 'attribute2 ' => 'value2 ' ,
113130 ];
114131
115132 return [
116- 'No Attributes ' => [[], $ expectedOutputDataArray ],
117- 'With Attributes ' => [
118- $ extensionAttributeArray ,
133+ 'No Extension Attributes or Excluded Methods ' => [
134+ [],
135+ [],
136+ $ expectedOutput ,
137+ ],
138+ 'With Extension Attributes ' => [
139+ $ extensionAttributes ,
140+ [],
119141 array_merge (
120- $ expectedOutputDataArray ,
121- ['extension_attributes ' => $ extensionAttributeArray ]
122- )
123- ]
142+ $ expectedOutput ,
143+ ['extension_attributes ' => $ extensionAttributes ]
144+ ),
145+ ],
146+ 'With Excluded Method ' => [
147+ [],
148+ [
149+ TestDataInterface::class => [
150+ 'getAddress ' ,
151+ ],
152+ ],
153+ array_diff_key ($ expectedOutput , array_flip (['address ' ])),
154+ ],
155+ 'With getExtensionAttributes as Excluded Method ' => [
156+ $ extensionAttributes ,
157+ [
158+ TestDataInterface::class => [
159+ 'getExtensionAttributes ' ,
160+ ],
161+ ],
162+ $ expectedOutput ,
163+ ],
124164 ];
125165 }
126166}
0 commit comments