3
3
* Copyright © Magento, Inc. All rights reserved.
4
4
* See COPYING.txt for license details.
5
5
*/
6
+ declare (strict_types=1 );
7
+
6
8
namespace Magento \Sales \Service \V1 ;
7
9
10
+ use Magento \Sales \Model \Order ;
8
11
use Magento \TestFramework \TestCase \WebapiAbstract ;
9
12
use Magento \Sales \Api \Data \OrderInterface ;
10
13
13
16
*/
14
17
class OrderUpdateTest extends WebapiAbstract
15
18
{
16
- const RESOURCE_PATH = '/V1/orders ' ;
19
+ private const RESOURCE_PATH = '/V1/orders ' ;
17
20
18
- const SERVICE_NAME = 'salesOrderRepositoryV1 ' ;
21
+ private const SERVICE_NAME = 'salesOrderRepositoryV1 ' ;
19
22
20
- const SERVICE_VERSION = 'V1 ' ;
23
+ private const SERVICE_VERSION = 'V1 ' ;
21
24
22
- const ORDER_INCREMENT_ID = '100000001 ' ;
25
+ private const ORDER_INCREMENT_ID = '100000001 ' ;
23
26
24
27
/**
25
28
* @var \Magento\Framework\ObjectManagerInterface
26
29
*/
27
- protected $ objectManager ;
30
+ private $ objectManager ;
28
31
29
32
/**
30
33
* @inheritDoc
@@ -41,11 +44,104 @@ protected function setUp()
41
44
*/
42
45
public function testOrderUpdate ()
43
46
{
44
- /** @var \Magento\Sales\Model\Order $order */
45
- $ order = $ this ->objectManager ->get (\Magento \Sales \Model \Order::class)
47
+ /** @var Order $order */
48
+ $ order = $ this ->objectManager ->get (Order::class)->loadByIncrementId (self ::ORDER_INCREMENT_ID );
49
+ $ serviceInfo = [
50
+ 'rest ' => [
51
+ 'resourcePath ' => self ::RESOURCE_PATH ,
52
+ 'httpMethod ' => \Magento \Framework \Webapi \Rest \Request::HTTP_METHOD_POST ,
53
+ ],
54
+ 'soap ' => [
55
+ 'service ' => self ::SERVICE_NAME ,
56
+ 'serviceVersion ' => self ::SERVICE_VERSION ,
57
+ 'operation ' => self ::SERVICE_NAME . 'save ' ,
58
+ ],
59
+ ];
60
+ $ result = $ this ->_webApiCall ($ serviceInfo , ['entity ' => $ this ->getOrderData ($ order )]);
61
+ $ this ->assertGreaterThan (1 , count ($ result ));
62
+ /** @var Order $actualOrder */
63
+ $ actualOrder = $ this ->objectManager ->get (Order::class)->load ($ order ->getId ());
64
+ $ this ->assertEquals (
65
+ $ order ->getData (OrderInterface::INCREMENT_ID ),
66
+ $ actualOrder ->getData (OrderInterface::INCREMENT_ID )
67
+ );
68
+
69
+ //Ship the order and check increment id.
70
+ $ serviceInfo = [
71
+ 'rest ' => [
72
+ 'resourcePath ' => '/V1/order/ ' . $ order ->getId () . '/ship ' ,
73
+ 'httpMethod ' => \Magento \Framework \Webapi \Rest \Request::HTTP_METHOD_POST ,
74
+ ],
75
+ 'soap ' => [
76
+ 'service ' => 'salesShipOrderV1 ' ,
77
+ 'serviceVersion ' => self ::SERVICE_VERSION ,
78
+ 'operation ' => 'salesShipOrderV1 ' . 'execute ' ,
79
+ ],
80
+ ];
81
+ $ shipmentId = $ this ->_webApiCall ($ serviceInfo , $ this ->getDataForShipment ($ order ));
82
+ $ this ->assertNotEmpty ($ shipmentId );
83
+ $ actualOrder = $ this ->objectManager ->get (Order::class)->load ($ order ->getId ());
84
+ $ this ->assertEquals (
85
+ $ order ->getData (OrderInterface::INCREMENT_ID ),
86
+ $ actualOrder ->getData (OrderInterface::INCREMENT_ID )
87
+ );
88
+
89
+ //Invoice the order and check increment id.
90
+ $ serviceInfo = [
91
+ 'rest ' => [
92
+ 'resourcePath ' => '/V1/invoices ' ,
93
+ 'httpMethod ' => \Magento \Framework \Webapi \Rest \Request::HTTP_METHOD_POST ,
94
+ ],
95
+ 'soap ' => [
96
+ 'service ' => 'salesInvoiceRepositoryV1 ' ,
97
+ 'serviceVersion ' => self ::SERVICE_VERSION ,
98
+ 'operation ' => 'salesInvoiceRepositoryV1 ' . 'save ' ,
99
+ ],
100
+ ];
101
+
102
+ $ result = $ this ->_webApiCall ($ serviceInfo , ['entity ' => $ this ->getDataForInvoice ($ order )]);
103
+ $ this ->assertNotEmpty ($ result );
104
+ $ actualOrder = $ this ->objectManager ->get (Order::class)->load ($ order ->getId ());
105
+ $ this ->assertEquals (
106
+ $ order ->getData (OrderInterface::INCREMENT_ID ),
107
+ $ actualOrder ->getData (OrderInterface::INCREMENT_ID )
108
+ );
109
+
110
+ //Create creditmemo for the order and check increment id.
111
+ $ serviceInfo = [
112
+ 'rest ' => [
113
+ 'resourcePath ' => '/V1/creditmemo ' ,
114
+ 'httpMethod ' => \Magento \Framework \Webapi \Rest \Request::HTTP_METHOD_POST ,
115
+ ],
116
+ 'soap ' => [
117
+ 'service ' => 'salesCreditmemoRepositoryV1 ' ,
118
+ 'serviceVersion ' => self ::SERVICE_VERSION ,
119
+ 'operation ' => 'salesCreditmemoRepositoryV1 ' . 'save ' ,
120
+ ],
121
+ ];
122
+ $ result = $ this ->_webApiCall ($ serviceInfo , ['entity ' => $ this ->getDataForCreditmemo ($ order )]);
123
+ $ this ->assertNotEmpty ($ result );
124
+ $ actualOrder = $ this ->objectManager ->get (Order::class)->load ($ order ->getId ());
125
+ $ this ->assertEquals (
126
+ $ order ->getData (OrderInterface::INCREMENT_ID ),
127
+ $ actualOrder ->getData (OrderInterface::INCREMENT_ID )
128
+ );
129
+ }
130
+
131
+ /**
132
+ * Check order increment id after updating via webapi
133
+ *
134
+ * @magentoApiDataFixture Magento/Sales/_files/order.php
135
+ */
136
+ public function testOrderStatusUpdate ()
137
+ {
138
+ /** @var Order $order */
139
+ $ order = $ this ->objectManager ->get (Order::class)
46
140
->loadByIncrementId (self ::ORDER_INCREMENT_ID );
47
141
48
142
$ entityData = $ this ->getOrderData ($ order );
143
+ $ entityData [OrderInterface::STATE ] = 'complete ' ;
144
+ $ entityData [OrderInterface::STATUS ] = 'complete ' ;
49
145
50
146
$ requestData = ['entity ' => $ entityData ];
51
147
@@ -63,8 +159,8 @@ public function testOrderUpdate()
63
159
$ result = $ this ->_webApiCall ($ serviceInfo , $ requestData );
64
160
$ this ->assertGreaterThan (1 , count ($ result ));
65
161
66
- /** @var \Magento\Sales\Model\ Order $actualOrder */
67
- $ actualOrder = $ this ->objectManager ->get (\ Magento \ Sales \ Model \ Order::class)->load ($ order ->getId ());
162
+ /** @var Order $actualOrder */
163
+ $ actualOrder = $ this ->objectManager ->get (Order::class)->load ($ order ->getId ());
68
164
$ this ->assertEquals (
69
165
$ order ->getData (OrderInterface::INCREMENT_ID ),
70
166
$ actualOrder ->getData (OrderInterface::INCREMENT_ID )
@@ -74,10 +170,10 @@ public function testOrderUpdate()
74
170
/**
75
171
* Prepare order data for request
76
172
*
77
- * @param \Magento\Sales\Model\ Order $order
173
+ * @param Order $order
78
174
* @return array
79
175
*/
80
- private function getOrderData (\ Magento \ Sales \ Model \ Order $ order )
176
+ private function getOrderData (Order $ order )
81
177
{
82
178
if (TESTS_WEB_API_ADAPTER == self ::ADAPTER_SOAP ) {
83
179
$ entityData = $ order ->getData ();
@@ -116,4 +212,191 @@ private function getOrderData(\Magento\Sales\Model\Order $order)
116
212
}
117
213
return $ orderData ;
118
214
}
215
+
216
+ /**
217
+ * Get data for invoice from order.
218
+ *
219
+ * @param Order $order
220
+ * @return array
221
+ */
222
+ private function getDataForInvoice (Order $ order ): array
223
+ {
224
+ $ orderItems = $ order ->getAllItems ();
225
+ return [
226
+ 'order_id ' => $ order ->getId (),
227
+ 'base_currency_code ' => null ,
228
+ 'base_discount_amount ' => null ,
229
+ 'base_grand_total ' => null ,
230
+ 'base_discount_tax_compensation_amount ' => null ,
231
+ 'base_shipping_amount ' => null ,
232
+ 'base_shipping_discount_tax_compensation_amnt ' => null ,
233
+ 'base_shipping_incl_tax ' => null ,
234
+ 'base_shipping_tax_amount ' => null ,
235
+ 'base_subtotal ' => null ,
236
+ 'base_subtotal_incl_tax ' => null ,
237
+ 'base_tax_amount ' => null ,
238
+ 'base_total_refunded ' => null ,
239
+ 'base_to_global_rate ' => null ,
240
+ 'base_to_order_rate ' => null ,
241
+ 'billing_address_id ' => null ,
242
+ 'can_void_flag ' => null ,
243
+ 'created_at ' => null ,
244
+ 'discount_amount ' => null ,
245
+ 'discount_description ' => null ,
246
+ 'email_sent ' => null ,
247
+ 'entity_id ' => null ,
248
+ 'global_currency_code ' => null ,
249
+ 'grand_total ' => null ,
250
+ 'discount_tax_compensation_amount ' => null ,
251
+ 'increment_id ' => null ,
252
+ 'is_used_for_refund ' => null ,
253
+ 'order_currency_code ' => null ,
254
+ 'shipping_address_id ' => null ,
255
+ 'shipping_amount ' => null ,
256
+ 'shipping_discount_tax_compensation_amount ' => null ,
257
+ 'shipping_incl_tax ' => null ,
258
+ 'shipping_tax_amount ' => null ,
259
+ 'state ' => null ,
260
+ 'store_currency_code ' => null ,
261
+ 'store_id ' => null ,
262
+ 'store_to_base_rate ' => null ,
263
+ 'store_to_order_rate ' => null ,
264
+ 'subtotal ' => null ,
265
+ 'subtotal_incl_tax ' => null ,
266
+ 'tax_amount ' => null ,
267
+ 'total_qty ' => '1 ' ,
268
+ 'transaction_id ' => null ,
269
+ 'updated_at ' => null ,
270
+ 'items ' => [
271
+ [
272
+ 'orderItemId ' => $ orderItems [0 ]->getId (),
273
+ 'qty ' => 2 ,
274
+ 'additionalData ' => null ,
275
+ 'baseCost ' => null ,
276
+ 'baseDiscountAmount ' => null ,
277
+ 'baseDiscountTaxCompensationAmount ' => null ,
278
+ 'basePrice ' => null ,
279
+ 'basePriceInclTax ' => null ,
280
+ 'baseRowTotal ' => null ,
281
+ 'baseRowTotalInclTax ' => null ,
282
+ 'baseTaxAmount ' => null ,
283
+ 'description ' => null ,
284
+ 'discountAmount ' => null ,
285
+ 'discountTaxCompensationAmount ' => null ,
286
+ 'name ' => null ,
287
+ 'entity_id ' => null ,
288
+ 'parentId ' => null ,
289
+ 'price ' => null ,
290
+ 'priceInclTax ' => null ,
291
+ 'productId ' => null ,
292
+ 'rowTotal ' => null ,
293
+ 'rowTotalInclTax ' => null ,
294
+ 'sku ' => 'sku ' . uniqid (),
295
+ 'taxAmount ' => null ,
296
+ ],
297
+ ],
298
+ ];
299
+ }
300
+
301
+ /**
302
+ * Get data for creditmemo.
303
+ *
304
+ * @param Order $order
305
+ * @return array
306
+ */
307
+ private function getDataForCreditmemo (Order $ order ): array
308
+ {
309
+ $ orderItem = current ($ order ->getAllItems ());
310
+ $ items = [
311
+ $ orderItem ->getId () => ['order_item_id ' => $ orderItem ->getId (), 'qty ' => $ orderItem ->getQtyInvoiced ()],
312
+ ];
313
+ return [
314
+ 'adjustment ' => null ,
315
+ 'adjustment_negative ' => null ,
316
+ 'adjustment_positive ' => null ,
317
+ 'base_adjustment ' => null ,
318
+ 'base_adjustment_negative ' => null ,
319
+ 'base_adjustment_positive ' => null ,
320
+ 'base_currency_code ' => null ,
321
+ 'base_discount_amount ' => null ,
322
+ 'base_grand_total ' => null ,
323
+ 'base_discount_tax_compensation_amount ' => null ,
324
+ 'base_shipping_amount ' => null ,
325
+ 'base_shipping_discount_tax_compensation_amnt ' => null ,
326
+ 'base_shipping_incl_tax ' => null ,
327
+ 'base_shipping_tax_amount ' => null ,
328
+ 'base_subtotal ' => null ,
329
+ 'base_subtotal_incl_tax ' => null ,
330
+ 'base_tax_amount ' => null ,
331
+ 'base_to_global_rate ' => null ,
332
+ 'base_to_order_rate ' => null ,
333
+ 'billing_address_id ' => null ,
334
+ 'created_at ' => null ,
335
+ 'creditmemo_status ' => null ,
336
+ 'discount_amount ' => null ,
337
+ 'discount_description ' => null ,
338
+ 'email_sent ' => null ,
339
+ 'entity_id ' => null ,
340
+ 'global_currency_code ' => null ,
341
+ 'grand_total ' => null ,
342
+ 'discount_tax_compensation_amount ' => null ,
343
+ 'increment_id ' => null ,
344
+ 'invoice_id ' => null ,
345
+ 'order_currency_code ' => null ,
346
+ 'order_id ' => $ order ->getId (),
347
+ 'shipping_address_id ' => null ,
348
+ 'shipping_amount ' => null ,
349
+ 'shipping_discount_tax_compensation_amount ' => null ,
350
+ 'shipping_incl_tax ' => null ,
351
+ 'shipping_tax_amount ' => null ,
352
+ 'state ' => null ,
353
+ 'store_currency_code ' => null ,
354
+ 'store_id ' => null ,
355
+ 'store_to_base_rate ' => null ,
356
+ 'store_to_order_rate ' => null ,
357
+ 'subtotal ' => null ,
358
+ 'subtotal_incl_tax ' => null ,
359
+ 'tax_amount ' => null ,
360
+ 'transaction_id ' => null ,
361
+ 'updated_at ' => null ,
362
+ 'items ' => $ items ,
363
+ ];
364
+ }
365
+
366
+ /**
367
+ * Get data for shipment.
368
+ *
369
+ * @param Order $order
370
+ * @return array
371
+ */
372
+ private function getDataForShipment (Order $ order ): array
373
+ {
374
+ $ requestShipData = [
375
+ 'orderId ' => $ order ->getId (),
376
+ 'items ' => [],
377
+ 'comment ' => [
378
+ 'comment ' => 'Test Comment ' ,
379
+ 'is_visible_on_front ' => 1 ,
380
+ ],
381
+ 'tracks ' => [
382
+ [
383
+ 'track_number ' => 'TEST_TRACK_0001 ' ,
384
+ 'title ' => 'Simple shipment track ' ,
385
+ 'carrier_code ' => 'UPS '
386
+ ]
387
+ ]
388
+ ];
389
+
390
+ foreach ($ order ->getAllItems () as $ item ) {
391
+ if ($ item ->getProductType () == 'simple ' ) {
392
+ $ requestShipData ['items ' ][] = [
393
+ 'order_item_id ' => $ item ->getItemId (),
394
+ 'qty ' => $ item ->getQtyOrdered (),
395
+ ];
396
+ break ;
397
+ }
398
+ }
399
+
400
+ return $ requestShipData ;
401
+ }
119
402
}
0 commit comments