@@ -73,6 +73,85 @@ public function testImproperInitialization()
7373 new PaymentMethod ($ this ->getWrongData ());
7474 }
7575
76+ /**
77+ * Test support manual capture from current API format
78+ */
79+ public function testSupportsManualCaptureFromRootLevelData ()
80+ {
81+ $ data = $ this ->getValidData ();
82+ $ data [PaymentMethod::MANUAL_CAPTURE_KEY ] = [
83+ PaymentMethod::IS_ENABLED_KEY => true ,
84+ PaymentMethod::SUPPORTED_KEY => true ,
85+ ];
86+
87+ $ paymentMethod = new PaymentMethod ($ data );
88+
89+ $ this ->assertTrue ($ paymentMethod ->supportsManualCapture ());
90+ }
91+
92+ /**
93+ * Test manual capture defaults to false when field is missing
94+ */
95+ public function testSupportsManualCaptureReturnsFalseWithoutManualCapture ()
96+ {
97+ $ paymentMethod = new PaymentMethod ($ this ->getValidData ());
98+
99+ $ this ->assertFalse ($ paymentMethod ->supportsManualCapture ());
100+ }
101+
102+ /**
103+ * Test manual capture is false when one of required flags is false
104+ *
105+ * @dataProvider getManualCaptureFalseValues
106+ */
107+ public function testSupportsManualCaptureReturnsFalseWithFalseValues (array $ manualCapture )
108+ {
109+ $ data = $ this ->getValidData ();
110+ $ data [PaymentMethod::MANUAL_CAPTURE_KEY ] = $ manualCapture ;
111+
112+ $ paymentMethod = new PaymentMethod ($ data );
113+
114+ $ this ->assertFalse ($ paymentMethod ->supportsManualCapture ());
115+ }
116+
117+ /**
118+ * Test invalid manual capture payload fails initialization
119+ *
120+ * @dataProvider getWrongManualCaptureData
121+ */
122+ public function testImproperInitializationWithInvalidManualCapture ($ manualCapture , string $ expectedErrorMessage )
123+ {
124+ $ this ->expectException (InvalidDataInitializationException::class);
125+ $ this ->expectExceptionMessage ($ expectedErrorMessage );
126+
127+ $ data = $ this ->getValidData ();
128+ $ data [PaymentMethod::MANUAL_CAPTURE_KEY ] = $ manualCapture ;
129+
130+ new PaymentMethod ($ data );
131+ }
132+
133+ /**
134+ * Test getData includes manual_capture structure when enabled
135+ */
136+ public function testGetDataIncludesManualCaptureWhenEnabled ()
137+ {
138+ $ data = $ this ->getValidData ();
139+ $ data [PaymentMethod::MANUAL_CAPTURE_KEY ] = [
140+ PaymentMethod::IS_ENABLED_KEY => true ,
141+ PaymentMethod::SUPPORTED_KEY => true ,
142+ ];
143+
144+ $ paymentMethod = new PaymentMethod ($ data );
145+ $ result = $ paymentMethod ->getData ();
146+
147+ $ this ->assertArrayHasKey (PaymentMethod::MANUAL_CAPTURE_KEY , $ result );
148+ $ this ->assertIsArray ($ result [PaymentMethod::MANUAL_CAPTURE_KEY ]);
149+ $ this ->assertArrayHasKey (PaymentMethod::IS_ENABLED_KEY , $ result [PaymentMethod::MANUAL_CAPTURE_KEY ]);
150+ $ this ->assertArrayHasKey (PaymentMethod::SUPPORTED_KEY , $ result [PaymentMethod::MANUAL_CAPTURE_KEY ]);
151+ $ this ->assertTrue ($ result [PaymentMethod::MANUAL_CAPTURE_KEY ][PaymentMethod::IS_ENABLED_KEY ]);
152+ $ this ->assertTrue ($ result [PaymentMethod::MANUAL_CAPTURE_KEY ][PaymentMethod::SUPPORTED_KEY ]);
153+ }
154+
76155 /**
77156 * @return array
78157 */
@@ -81,4 +160,94 @@ private function getWrongData(): array
81160 $ this ->wrongData ['id ' ] = '' ;
82161 return $ this ->wrongData ;
83162 }
163+
164+ /**
165+ * @return array
166+ */
167+ private function getValidData (): array
168+ {
169+ return [
170+ PaymentMethod::ID_KEY => 'VISA ' ,
171+ PaymentMethod::NAME_KEY => 'Visa ' ,
172+ PaymentMethod::TYPE_KEY => PaymentMethod::PAYMENT_METHOD_TYPE ,
173+ PaymentMethod::ALLOWED_AMOUNT_KEY => [
174+ PaymentMethod::ALLOWED_MIN_AMOUNT_KEY => 0 ,
175+ PaymentMethod::ALLOWED_MAX_AMOUNT_KEY => null ,
176+ ],
177+ PaymentMethod::ALLOWED_COUNTRIES_KEY => [],
178+ PaymentMethod::BRANDS_KEY => [],
179+ PaymentMethod::PREFERRED_COUNTRIES_KEY => [],
180+ PaymentMethod::REQUIRED_CUSTOMER_DATA_KEY => [],
181+ PaymentMethod::SHOPPING_CART_REQUIRED_KEY => false ,
182+ PaymentMethod::TOKENIZATION_KEY => [
183+ PaymentMethod::IS_ENABLED_KEY => true ,
184+ PaymentMethod::TOKENIZATION_MODELS_KEY => [
185+ PaymentMethod::RECURRING_MODEL_CARD_ON_FILE_KEY => true ,
186+ PaymentMethod::RECURRING_MODEL_SUBSCRIPTION_KEY => true ,
187+ PaymentMethod::RECURRING_MODEL_UNSCHEDULED_KEY => true ,
188+ ],
189+ ],
190+ PaymentMethod::APPS_KEY => [
191+ PaymentMethod::PAYMENT_COMPONENT_KEY => [
192+ PaymentMethod::PAYMENT_COMPONENT_HAS_FIELDS_KEY => true ,
193+ PaymentMethod::IS_ENABLED_KEY => true ,
194+ PaymentMethod::PAYMENT_COMPONENT_QR_KEY => [
195+ PaymentMethod::SUPPORTED_KEY => false ,
196+ ],
197+ ],
198+ PaymentMethod::FAST_CHECKOUT_KEY => [
199+ PaymentMethod::IS_ENABLED_KEY => true ,
200+ ],
201+ ],
202+ PaymentMethod::ICON_URLS_KEY => [
203+ PaymentMethod::ICON_URLS_LARGE_KEY => 'https://example.com/visa-large.png ' ,
204+ PaymentMethod::ICON_URLS_MEDIUM_KEY => 'https://example.com/visa-medium.png ' ,
205+ PaymentMethod::ICON_URLS_VECTOR_KEY => 'https://example.com/visa.svg ' ,
206+ ],
207+ PaymentMethod::ALLOWED_CURRENCIES_KEY => ['EUR ' ],
208+ ];
209+ }
210+
211+ /**
212+ * @return array
213+ */
214+ public function getManualCaptureFalseValues (): array
215+ {
216+ return [
217+ [[
218+ PaymentMethod::IS_ENABLED_KEY => false ,
219+ PaymentMethod::SUPPORTED_KEY => true ,
220+ ]],
221+ [[
222+ PaymentMethod::IS_ENABLED_KEY => true ,
223+ PaymentMethod::SUPPORTED_KEY => false ,
224+ ]],
225+ [[
226+ PaymentMethod::IS_ENABLED_KEY => false ,
227+ PaymentMethod::SUPPORTED_KEY => false ,
228+ ]],
229+ ];
230+ }
231+
232+ /**
233+ * @return array
234+ */
235+ public function getWrongManualCaptureData (): array
236+ {
237+ return [
238+ ['' , 'Manual capture is not an array ' ],
239+ [
240+ [
241+ PaymentMethod::SUPPORTED_KEY => true ,
242+ ],
243+ 'No Manual Capture has "is_enabled" field ' ,
244+ ],
245+ [
246+ [
247+ PaymentMethod::IS_ENABLED_KEY => true ,
248+ ],
249+ 'No Manual Capture has "supported" field ' ,
250+ ],
251+ ];
252+ }
84253}
0 commit comments