@congminh1254/shopee-sdk 1.6.2 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/README.md +9 -3
  2. package/lib/__tests__/errors.test.d.ts +1 -0
  3. package/lib/__tests__/errors.test.js +49 -0
  4. package/lib/__tests__/errors.test.js.map +1 -0
  5. package/lib/__tests__/fetch.test.d.ts +1 -0
  6. package/lib/__tests__/fetch.test.js +494 -0
  7. package/lib/__tests__/fetch.test.js.map +1 -0
  8. package/lib/__tests__/integration.test.d.ts +1 -0
  9. package/lib/__tests__/integration.test.js +201 -0
  10. package/lib/__tests__/integration.test.js.map +1 -0
  11. package/lib/__tests__/managers/account-health.manager.test.d.ts +1 -0
  12. package/lib/__tests__/managers/account-health.manager.test.js +446 -0
  13. package/lib/__tests__/managers/account-health.manager.test.js.map +1 -0
  14. package/lib/__tests__/managers/add-on-deal.manager.test.d.ts +1 -0
  15. package/lib/__tests__/managers/add-on-deal.manager.test.js +636 -0
  16. package/lib/__tests__/managers/add-on-deal.manager.test.js.map +1 -0
  17. package/lib/__tests__/managers/ads.manager.test.d.ts +1 -0
  18. package/lib/__tests__/managers/ads.manager.test.js +1016 -0
  19. package/lib/__tests__/managers/ads.manager.test.js.map +1 -0
  20. package/lib/__tests__/managers/ams.manager.test.d.ts +1 -0
  21. package/lib/__tests__/managers/ams.manager.test.js +1170 -0
  22. package/lib/__tests__/managers/ams.manager.test.js.map +1 -0
  23. package/lib/__tests__/managers/auth.manager.test.d.ts +1 -0
  24. package/lib/__tests__/managers/auth.manager.test.js +193 -0
  25. package/lib/__tests__/managers/auth.manager.test.js.map +1 -0
  26. package/lib/__tests__/managers/bundle-deal.manager.test.d.ts +1 -0
  27. package/lib/__tests__/managers/bundle-deal.manager.test.js +465 -0
  28. package/lib/__tests__/managers/bundle-deal.manager.test.js.map +1 -0
  29. package/lib/__tests__/managers/discount.manager.test.d.ts +1 -0
  30. package/lib/__tests__/managers/discount.manager.test.js +615 -0
  31. package/lib/__tests__/managers/discount.manager.test.js.map +1 -0
  32. package/lib/__tests__/managers/fbs.manager.test.d.ts +1 -0
  33. package/lib/__tests__/managers/fbs.manager.test.js +349 -0
  34. package/lib/__tests__/managers/fbs.manager.test.js.map +1 -0
  35. package/lib/__tests__/managers/first-mile.manager.test.d.ts +1 -0
  36. package/lib/__tests__/managers/first-mile.manager.test.js +629 -0
  37. package/lib/__tests__/managers/first-mile.manager.test.js.map +1 -0
  38. package/lib/__tests__/managers/follow-prize.manager.test.d.ts +1 -0
  39. package/lib/__tests__/managers/follow-prize.manager.test.js +408 -0
  40. package/lib/__tests__/managers/follow-prize.manager.test.js.map +1 -0
  41. package/lib/__tests__/managers/global-product.manager.test.d.ts +1 -0
  42. package/lib/__tests__/managers/global-product.manager.test.js +1253 -0
  43. package/lib/__tests__/managers/global-product.manager.test.js.map +1 -0
  44. package/lib/__tests__/managers/livestream.manager.test.d.ts +1 -0
  45. package/lib/__tests__/managers/livestream.manager.test.js +877 -0
  46. package/lib/__tests__/managers/livestream.manager.test.js.map +1 -0
  47. package/lib/__tests__/managers/logistics.manager.test.d.ts +1 -0
  48. package/lib/__tests__/managers/logistics.manager.test.js +1125 -0
  49. package/lib/__tests__/managers/logistics.manager.test.js.map +1 -0
  50. package/lib/__tests__/managers/media-space.manager.test.d.ts +1 -0
  51. package/lib/__tests__/managers/media-space.manager.test.js +556 -0
  52. package/lib/__tests__/managers/media-space.manager.test.js.map +1 -0
  53. package/lib/__tests__/managers/media.manager.test.d.ts +1 -0
  54. package/lib/__tests__/managers/media.manager.test.js +681 -0
  55. package/lib/__tests__/managers/media.manager.test.js.map +1 -0
  56. package/lib/__tests__/managers/merchant.manager.test.d.ts +1 -0
  57. package/lib/__tests__/managers/merchant.manager.test.js +328 -0
  58. package/lib/__tests__/managers/merchant.manager.test.js.map +1 -0
  59. package/lib/__tests__/managers/order.manager.test.d.ts +1 -0
  60. package/lib/__tests__/managers/order.manager.test.js +937 -0
  61. package/lib/__tests__/managers/order.manager.test.js.map +1 -0
  62. package/lib/__tests__/managers/payment.manager.test.d.ts +1 -0
  63. package/lib/__tests__/managers/payment.manager.test.js +1167 -0
  64. package/lib/__tests__/managers/payment.manager.test.js.map +1 -0
  65. package/lib/__tests__/managers/product.manager.test.d.ts +1 -0
  66. package/lib/__tests__/managers/product.manager.test.js +2247 -0
  67. package/lib/__tests__/managers/product.manager.test.js.map +1 -0
  68. package/lib/__tests__/managers/public.manager.test.d.ts +1 -0
  69. package/lib/__tests__/managers/public.manager.test.js +209 -0
  70. package/lib/__tests__/managers/public.manager.test.js.map +1 -0
  71. package/lib/__tests__/managers/push.manager.test.d.ts +1 -0
  72. package/lib/__tests__/managers/push.manager.test.js +244 -0
  73. package/lib/__tests__/managers/push.manager.test.js.map +1 -0
  74. package/lib/__tests__/managers/returns.manager.test.d.ts +1 -0
  75. package/lib/__tests__/managers/returns.manager.test.js +783 -0
  76. package/lib/__tests__/managers/returns.manager.test.js.map +1 -0
  77. package/lib/__tests__/managers/sbs.manager.test.d.ts +1 -0
  78. package/lib/__tests__/managers/sbs.manager.test.js +492 -0
  79. package/lib/__tests__/managers/sbs.manager.test.js.map +1 -0
  80. package/lib/__tests__/managers/shop-category.manager.test.d.ts +1 -0
  81. package/lib/__tests__/managers/shop-category.manager.test.js +425 -0
  82. package/lib/__tests__/managers/shop-category.manager.test.js.map +1 -0
  83. package/lib/__tests__/managers/shop-flash-sale.manager.test.d.ts +1 -0
  84. package/lib/__tests__/managers/shop-flash-sale.manager.test.js +492 -0
  85. package/lib/__tests__/managers/shop-flash-sale.manager.test.js.map +1 -0
  86. package/lib/__tests__/managers/shop.manager.test.d.ts +1 -0
  87. package/lib/__tests__/managers/shop.manager.test.js +637 -0
  88. package/lib/__tests__/managers/shop.manager.test.js.map +1 -0
  89. package/lib/__tests__/managers/top-picks.manager.test.d.ts +1 -0
  90. package/lib/__tests__/managers/top-picks.manager.test.js +324 -0
  91. package/lib/__tests__/managers/top-picks.manager.test.js.map +1 -0
  92. package/lib/__tests__/managers/video.manager.test.d.ts +1 -0
  93. package/lib/__tests__/managers/video.manager.test.js +1039 -0
  94. package/lib/__tests__/managers/video.manager.test.js.map +1 -0
  95. package/lib/__tests__/managers/voucher.manager.test.d.ts +1 -0
  96. package/lib/__tests__/managers/voucher.manager.test.js +442 -0
  97. package/lib/__tests__/managers/voucher.manager.test.js.map +1 -0
  98. package/lib/__tests__/sdk.test.d.ts +1 -0
  99. package/lib/__tests__/sdk.test.js +316 -0
  100. package/lib/__tests__/sdk.test.js.map +1 -0
  101. package/lib/__tests__/storage/custom-token-storage.test.d.ts +1 -0
  102. package/lib/__tests__/storage/custom-token-storage.test.js +337 -0
  103. package/lib/__tests__/storage/custom-token-storage.test.js.map +1 -0
  104. package/lib/__tests__/utils/signature.test.d.ts +1 -0
  105. package/lib/__tests__/utils/signature.test.js +38 -0
  106. package/lib/__tests__/utils/signature.test.js.map +1 -0
  107. package/lib/__tests__/utils/spec-audit.test.d.ts +1 -0
  108. package/lib/__tests__/utils/spec-audit.test.js +176 -0
  109. package/lib/__tests__/utils/spec-audit.test.js.map +1 -0
  110. package/lib/errors.js +2 -0
  111. package/lib/errors.js.map +1 -1
  112. package/lib/fetch.js +1 -1
  113. package/lib/fetch.js.map +1 -1
  114. package/lib/managers/ads.manager.d.ts +1 -41
  115. package/lib/managers/ads.manager.js +0 -54
  116. package/lib/managers/ads.manager.js.map +1 -1
  117. package/lib/managers/auth.manager.d.ts +2 -1
  118. package/lib/managers/auth.manager.js +2 -5
  119. package/lib/managers/auth.manager.js.map +1 -1
  120. package/lib/managers/base.manager.js +1 -0
  121. package/lib/managers/base.manager.js.map +1 -1
  122. package/lib/managers/media.manager.d.ts +36 -1
  123. package/lib/managers/media.manager.js +68 -0
  124. package/lib/managers/media.manager.js.map +1 -1
  125. package/lib/managers/order.manager.js +1 -0
  126. package/lib/managers/order.manager.js.map +1 -1
  127. package/lib/managers/payment.manager.d.ts +13 -1
  128. package/lib/managers/payment.manager.js +26 -0
  129. package/lib/managers/payment.manager.js.map +1 -1
  130. package/lib/managers/product.manager.js +1 -1
  131. package/lib/managers/product.manager.js.map +1 -1
  132. package/lib/schemas/ads.d.ts +2 -56
  133. package/lib/schemas/ams.d.ts +92 -0
  134. package/lib/schemas/base.d.ts +2 -0
  135. package/lib/schemas/discount.d.ts +4 -0
  136. package/lib/schemas/fetch.d.ts +1 -1
  137. package/lib/schemas/livestream.d.ts +14 -0
  138. package/lib/schemas/media.d.ts +107 -0
  139. package/lib/schemas/merchant.d.ts +2 -0
  140. package/lib/schemas/order.d.ts +22 -0
  141. package/lib/schemas/payment.d.ts +96 -0
  142. package/lib/schemas/product.d.ts +253 -15
  143. package/lib/schemas/public.d.ts +3 -0
  144. package/lib/schemas/region.d.ts +9 -2
  145. package/lib/schemas/region.js +9 -2
  146. package/lib/schemas/region.js.map +1 -1
  147. package/lib/schemas/returns.d.ts +38 -1
  148. package/lib/schemas/shop.d.ts +16 -0
  149. package/lib/schemas/video.d.ts +83 -37
  150. package/lib/schemas/voucher.d.ts +2 -0
  151. package/lib/sdk.d.ts +6 -1
  152. package/lib/sdk.js +53 -6
  153. package/lib/sdk.js.map +1 -1
  154. package/lib/storage/custom-token-storage.js +2 -0
  155. package/lib/storage/custom-token-storage.js.map +1 -1
  156. package/lib/version.d.ts +1 -1
  157. package/lib/version.js +1 -1
  158. package/package.json +3 -3
@@ -0,0 +1,937 @@
1
+ import { jest } from "@jest/globals";
2
+ import { OrderManager } from "../../managers/order.manager.js";
3
+ import { ShopeeRegion } from "../../schemas/region.js";
4
+ import { ShopeeFetch } from "../../fetch.js";
5
+ import { allOptionalFields, } from "../../schemas/order.js";
6
+ // Mock ShopeeFetch.fetch static method
7
+ const mockFetch = jest.fn();
8
+ ShopeeFetch.fetch = mockFetch;
9
+ describe("OrderManager", () => {
10
+ let orderManager;
11
+ let mockConfig;
12
+ const mockShopeeFetch = mockFetch;
13
+ beforeEach(() => {
14
+ jest.clearAllMocks();
15
+ mockConfig = {
16
+ partner_id: 12345,
17
+ partner_key: "test_partner_key",
18
+ shop_id: 67890,
19
+ region: ShopeeRegion.GLOBAL,
20
+ base_url: "https://partner.test-stable.shopeemobile.com/api/v2",
21
+ };
22
+ orderManager = new OrderManager(mockConfig);
23
+ });
24
+ describe("getOrderList", () => {
25
+ it("should get order list with required parameters", async () => {
26
+ const mockResponse = {
27
+ request_id: "test-request-id",
28
+ error: "",
29
+ message: "",
30
+ response: {
31
+ more: false,
32
+ next_cursor: "",
33
+ order_list: [
34
+ {
35
+ order_sn: "220101000000001",
36
+ order_status: "READY_TO_SHIP",
37
+ },
38
+ {
39
+ order_sn: "220101000000002",
40
+ order_status: "COMPLETED",
41
+ },
42
+ ],
43
+ },
44
+ };
45
+ mockShopeeFetch.mockResolvedValue(mockResponse);
46
+ const result = await orderManager.getOrderList({
47
+ time_range_field: "create_time",
48
+ time_from: 1640908800,
49
+ time_to: 1640995200,
50
+ page_size: 20,
51
+ cursor: "",
52
+ });
53
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/order/get_order_list", {
54
+ method: "GET",
55
+ auth: true,
56
+ params: {
57
+ time_range_field: "create_time",
58
+ time_from: 1640908800,
59
+ time_to: 1640995200,
60
+ page_size: 20,
61
+ cursor: "",
62
+ },
63
+ });
64
+ expect(result).toEqual(mockResponse);
65
+ });
66
+ it("should get order list with status filter", async () => {
67
+ const mockResponse = {
68
+ request_id: "test-request-id",
69
+ error: "",
70
+ message: "",
71
+ response: {
72
+ more: false,
73
+ next_cursor: "",
74
+ order_list: [
75
+ {
76
+ order_sn: "220101000000003",
77
+ order_status: "READY_TO_SHIP",
78
+ update_time: 1640995200,
79
+ },
80
+ ],
81
+ },
82
+ };
83
+ mockShopeeFetch.mockResolvedValue(mockResponse);
84
+ const result = await orderManager.getOrderList({
85
+ time_range_field: "update_time",
86
+ time_from: 1640908800,
87
+ time_to: 1640995200,
88
+ page_size: 10,
89
+ cursor: "",
90
+ order_status: "READY_TO_SHIP",
91
+ });
92
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/order/get_order_list", {
93
+ method: "GET",
94
+ auth: true,
95
+ params: {
96
+ time_range_field: "update_time",
97
+ time_from: 1640908800,
98
+ time_to: 1640995200,
99
+ page_size: 10,
100
+ cursor: "",
101
+ order_status: "READY_TO_SHIP",
102
+ },
103
+ });
104
+ expect(result).toEqual(mockResponse);
105
+ });
106
+ });
107
+ describe("getOrdersDetail", () => {
108
+ it("should get orders detail for multiple orders", async () => {
109
+ const mockResponse = {
110
+ request_id: "test-request-id",
111
+ error: "",
112
+ message: "",
113
+ response: {
114
+ order_list: [
115
+ {
116
+ order_sn: "220101000000001",
117
+ pending_terms: [],
118
+ message_to_seller: "",
119
+ pickup_done_time: 0,
120
+ order_status: "READY_TO_SHIP",
121
+ region: "SG",
122
+ currency: "SGD",
123
+ cod: false,
124
+ total_amount: 25.5,
125
+ create_time: 1640995200,
126
+ update_time: 1640995300,
127
+ days_to_ship: 3,
128
+ ship_by_date: 1641259200,
129
+ buyer_user_id: 123456,
130
+ buyer_username: "testbuyer",
131
+ estimated_shipping_fee: 2.5,
132
+ recipient_address: {
133
+ name: "John Doe",
134
+ phone: "+6512345678",
135
+ full_address: "123 Test Street, Singapore 123456",
136
+ district: "Central",
137
+ city: "Singapore",
138
+ state: "Singapore",
139
+ zipcode: "123456",
140
+ town: "Test Town",
141
+ region: "SG",
142
+ },
143
+ actual_shipping_fee: 2.5,
144
+ goods_to_declare: false,
145
+ note: "Test order",
146
+ note_update_time: 1640995250,
147
+ item_list: [
148
+ {
149
+ item_id: 111111,
150
+ item_name: "Test Product",
151
+ item_sku: "TEST-SKU-001",
152
+ model_id: 222222,
153
+ model_name: "Red-Large",
154
+ model_sku: "TEST-SKU-001-RED-L",
155
+ model_quantity_purchased: 1,
156
+ model_original_price: 25.0,
157
+ model_discounted_price: 23.0,
158
+ wholesale: false,
159
+ weight: 0.5,
160
+ add_on_deal: false,
161
+ main_item: false,
162
+ add_on_deal_id: 0,
163
+ promotion_type: "NORMAL",
164
+ promotion_id: 0,
165
+ order_item_id: 333333,
166
+ promotion_group_id: 0,
167
+ image_info: {
168
+ image_url: "https://example.com/image.jpg",
169
+ },
170
+ product_location_id: [],
171
+ is_prescription_item: false,
172
+ is_b2c_owned_item: false,
173
+ },
174
+ ],
175
+ pay_time: 1640995250,
176
+ dropshipper: "",
177
+ dropshipper_phone: "",
178
+ split_up: false,
179
+ buyer_cancel_reason: "",
180
+ cancel_by: "",
181
+ cancel_reason: "",
182
+ actual_shipping_fee_confirmed: true,
183
+ buyer_cpf_id: "",
184
+ fulfillment_flag: "FULFILLED_BY_SHOPEE",
185
+ package_list: [],
186
+ shipping_carrier: "",
187
+ payment_method: "Credit Card",
188
+ invoice_data: {
189
+ number: "INV-001",
190
+ series_number: "2022",
191
+ access_key: "abc123",
192
+ issue_date: 1640995200,
193
+ total_value: 25.5,
194
+ products_total_value: 23.0,
195
+ tax_code: "TAX001",
196
+ },
197
+ checkout_shipping_carrier: "Standard",
198
+ reverse_shipping_fee: 0,
199
+ order_chargeable_weight_gram: 500,
200
+ edt_from: 1641340800,
201
+ edt_to: 1641340800,
202
+ },
203
+ ],
204
+ },
205
+ };
206
+ mockShopeeFetch.mockResolvedValue(mockResponse);
207
+ const result = await orderManager.getOrdersDetail({
208
+ order_sn_list: ["220101000000001"],
209
+ response_optional_fields: [
210
+ "buyer_user_id",
211
+ "buyer_username",
212
+ "estimated_shipping_fee",
213
+ "recipient_address",
214
+ ].join(","),
215
+ });
216
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/order/get_order_detail", {
217
+ method: "GET",
218
+ auth: true,
219
+ params: {
220
+ order_sn_list: "220101000000001",
221
+ response_optional_fields: "buyer_user_id,buyer_username,estimated_shipping_fee,recipient_address",
222
+ },
223
+ });
224
+ expect(result).toEqual(mockResponse);
225
+ });
226
+ });
227
+ describe("getShipmentList", () => {
228
+ it("should get shipment list", async () => {
229
+ const mockResponse = {
230
+ request_id: "test-request-id",
231
+ error: "",
232
+ message: "",
233
+ response: {
234
+ more: false,
235
+ next_cursor: "",
236
+ order_list: [
237
+ {
238
+ order_sn: "220101000000001",
239
+ package_number: "PKG001",
240
+ },
241
+ ],
242
+ },
243
+ };
244
+ mockShopeeFetch.mockResolvedValue(mockResponse);
245
+ const result = await orderManager.getShipmentList({
246
+ cursor: "",
247
+ page_size: 20,
248
+ });
249
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/order/get_shipment_list", {
250
+ method: "GET",
251
+ auth: true,
252
+ params: {
253
+ cursor: "",
254
+ page_size: 20,
255
+ },
256
+ });
257
+ expect(result).toEqual(mockResponse);
258
+ });
259
+ });
260
+ describe("splitOrder", () => {
261
+ it("should split an order", async () => {
262
+ const mockResponse = {
263
+ request_id: "test-request-id",
264
+ error: "",
265
+ message: "",
266
+ response: {
267
+ order_sn: "220101000000001",
268
+ package_list: [
269
+ {
270
+ package_number: "PKG123456789",
271
+ item_list: [
272
+ {
273
+ item_id: 111111,
274
+ model_id: 222222,
275
+ order_item_id: 333333,
276
+ promotion_group_id: 0,
277
+ model_quantity: 1,
278
+ },
279
+ ],
280
+ },
281
+ ],
282
+ },
283
+ };
284
+ mockShopeeFetch.mockResolvedValue(mockResponse);
285
+ const result = await orderManager.splitOrder({
286
+ order_sn: "220101000000001",
287
+ package_list: [
288
+ {
289
+ item_list: [
290
+ {
291
+ item_id: 111111,
292
+ model_id: 222222,
293
+ order_item_id: 333333,
294
+ promotion_group_id: 0,
295
+ model_quantity: 1,
296
+ },
297
+ ],
298
+ },
299
+ ],
300
+ });
301
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/order/split_order", {
302
+ method: "POST",
303
+ auth: true,
304
+ body: {
305
+ order_sn: "220101000000001",
306
+ package_list: [
307
+ {
308
+ item_list: [
309
+ {
310
+ item_id: 111111,
311
+ model_id: 222222,
312
+ order_item_id: 333333,
313
+ promotion_group_id: 0,
314
+ model_quantity: 1,
315
+ },
316
+ ],
317
+ },
318
+ ],
319
+ },
320
+ });
321
+ expect(result).toEqual(mockResponse);
322
+ });
323
+ });
324
+ describe("unsplitOrder", () => {
325
+ it("should unsplit an order", async () => {
326
+ const mockResponse = {
327
+ request_id: "test-request-id",
328
+ error: "",
329
+ message: "",
330
+ response: null,
331
+ };
332
+ mockShopeeFetch.mockResolvedValue(mockResponse);
333
+ const result = await orderManager.unsplitOrder({
334
+ order_sn: "220101000000001",
335
+ });
336
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/order/unsplit_order", {
337
+ method: "POST",
338
+ auth: true,
339
+ body: {
340
+ order_sn: "220101000000001",
341
+ },
342
+ });
343
+ expect(result).toEqual(mockResponse);
344
+ });
345
+ });
346
+ describe("cancelOrder", () => {
347
+ it("should cancel an order", async () => {
348
+ const mockResponse = {
349
+ request_id: "test-request-id",
350
+ error: "",
351
+ message: "",
352
+ response: {
353
+ update_time: 1640995300,
354
+ },
355
+ };
356
+ mockShopeeFetch.mockResolvedValue(mockResponse);
357
+ const result = await orderManager.cancelOrder({
358
+ order_sn: "220101000000001",
359
+ cancel_reason: "OUT_OF_STOCK",
360
+ item_list: [
361
+ {
362
+ item_id: 111111,
363
+ model_id: 222222,
364
+ },
365
+ ],
366
+ });
367
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/order/cancel_order", {
368
+ method: "POST",
369
+ auth: true,
370
+ body: {
371
+ order_sn: "220101000000001",
372
+ cancel_reason: "OUT_OF_STOCK",
373
+ item_list: [
374
+ {
375
+ item_id: 111111,
376
+ model_id: 222222,
377
+ },
378
+ ],
379
+ },
380
+ });
381
+ expect(result).toEqual(mockResponse);
382
+ });
383
+ });
384
+ describe("getBuyerInvoiceInfo", () => {
385
+ it("should get buyer invoice info", async () => {
386
+ const mockResponse = {
387
+ request_id: "test-request-id",
388
+ error: "",
389
+ message: "",
390
+ response: null,
391
+ invoice_info_list: [
392
+ {
393
+ order_sn: "220101000000001",
394
+ invoice_type: "personal",
395
+ invoice_detail: {
396
+ name: "John Doe",
397
+ email: "john@example.com",
398
+ tax_id: "TAX123",
399
+ },
400
+ error: "",
401
+ is_requested: true,
402
+ },
403
+ ],
404
+ };
405
+ mockShopeeFetch.mockResolvedValue(mockResponse);
406
+ const result = await orderManager.getBuyerInvoiceInfo({
407
+ queries: [
408
+ {
409
+ order_sn: "220101000000001",
410
+ },
411
+ ],
412
+ });
413
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/order/get_buyer_invoice_info", {
414
+ method: "POST",
415
+ auth: true,
416
+ body: {
417
+ queries: [
418
+ {
419
+ order_sn: "220101000000001",
420
+ },
421
+ ],
422
+ },
423
+ });
424
+ expect(result).toEqual(mockResponse);
425
+ });
426
+ it("should get buyer invoice info with household invoice type", async () => {
427
+ const mockResponse = {
428
+ request_id: "test-request-id",
429
+ error: "",
430
+ message: "",
431
+ response: null,
432
+ invoice_info_list: [
433
+ {
434
+ order_sn: "220101VN0000001",
435
+ invoice_type: "household",
436
+ invoice_detail: {
437
+ household_address_breakdown: {
438
+ household_region: "Southeast",
439
+ household_state: "Ho Chi Minh",
440
+ household_city: "District 1",
441
+ household_province: "Ho Chi Minh City",
442
+ household_district: "Ben Nghe",
443
+ household_town: "Ben Nghe Ward",
444
+ household_barangay: "",
445
+ household_postcode: "700000",
446
+ household_detailed_address: "123 Nguyen Hue",
447
+ household_additional_info: "",
448
+ household_full_address: "123 Nguyen Hue, Ben Nghe Ward, District 1, Ho Chi Minh City, 700000",
449
+ },
450
+ },
451
+ error: "",
452
+ is_requested: true,
453
+ },
454
+ ],
455
+ };
456
+ mockShopeeFetch.mockResolvedValue(mockResponse);
457
+ const result = await orderManager.getBuyerInvoiceInfo({
458
+ queries: [{ order_sn: "220101VN0000001" }],
459
+ });
460
+ expect(result).toEqual(mockResponse);
461
+ expect(result.invoice_info_list[0].invoice_type).toBe("household");
462
+ expect(result.invoice_info_list[0].invoice_detail?.household_address_breakdown?.household_province).toBe("Ho Chi Minh City");
463
+ expect(result.invoice_info_list[0].invoice_detail?.household_address_breakdown
464
+ ?.household_full_address).toBe("123 Nguyen Hue, Ben Nghe Ward, District 1, Ho Chi Minh City, 700000");
465
+ });
466
+ });
467
+ describe("setNote", () => {
468
+ it("should set note for an order", async () => {
469
+ const mockResponse = {
470
+ request_id: "test-request-id",
471
+ error: "",
472
+ message: "",
473
+ response: null,
474
+ };
475
+ mockShopeeFetch.mockResolvedValue(mockResponse);
476
+ const result = await orderManager.setNote({
477
+ order_sn: "220101000000001",
478
+ note: "Thank you for your order",
479
+ });
480
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/order/set_note", {
481
+ method: "POST",
482
+ auth: true,
483
+ body: {
484
+ order_sn: "220101000000001",
485
+ note: "Thank you for your order",
486
+ },
487
+ });
488
+ expect(result).toEqual(mockResponse);
489
+ });
490
+ });
491
+ describe("getPackageDetail", () => {
492
+ it("should get package detail", async () => {
493
+ const mockResponse = {
494
+ request_id: "test-request-id",
495
+ error: "",
496
+ message: "",
497
+ response: {
498
+ package_list: [
499
+ {
500
+ order_sn: "220101000000001",
501
+ package_number: "PKG001",
502
+ fulfillment_status: "READY_TO_SHIP",
503
+ update_time: 1640995200,
504
+ logistics_channel_id: 80001,
505
+ shipping_carrier: "Standard Delivery",
506
+ allow_self_design_awb: true,
507
+ days_to_ship: 3,
508
+ ship_by_date: 1641254400,
509
+ is_split_up: false,
510
+ item_list: [
511
+ {
512
+ item_id: 111111,
513
+ model_id: 222222,
514
+ model_quantity: 1,
515
+ order_item_id: 333333,
516
+ product_location_id: "LOC001",
517
+ promotion_group_id: 0,
518
+ },
519
+ ],
520
+ },
521
+ ],
522
+ },
523
+ };
524
+ mockShopeeFetch.mockResolvedValue(mockResponse);
525
+ const result = await orderManager.getPackageDetail({
526
+ package_number_list: ["PKG001", "PKG002"],
527
+ });
528
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/order/get_package_detail", {
529
+ method: "GET",
530
+ auth: true,
531
+ params: {
532
+ package_number_list: "PKG001,PKG002",
533
+ },
534
+ });
535
+ expect(result).toEqual(mockResponse);
536
+ });
537
+ });
538
+ describe("handleBuyerCancellation", () => {
539
+ it("should accept buyer cancellation", async () => {
540
+ const mockResponse = {
541
+ request_id: "test-request-id",
542
+ error: "",
543
+ message: "",
544
+ response: {
545
+ order_sn: "220101000000001",
546
+ },
547
+ };
548
+ mockShopeeFetch.mockResolvedValue(mockResponse);
549
+ const result = await orderManager.handleBuyerCancellation({
550
+ order_sn: "220101000000001",
551
+ operation: "ACCEPT",
552
+ });
553
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/order/handle_buyer_cancellation", {
554
+ method: "POST",
555
+ auth: true,
556
+ body: {
557
+ order_sn: "220101000000001",
558
+ operation: "ACCEPT",
559
+ },
560
+ });
561
+ expect(result).toEqual(mockResponse);
562
+ });
563
+ });
564
+ describe("searchPackageList", () => {
565
+ it("should search package list with filters", async () => {
566
+ const mockResponse = {
567
+ request_id: "test-request-id",
568
+ error: "",
569
+ message: "",
570
+ response: {
571
+ more: false,
572
+ next_cursor: "",
573
+ package_list: [
574
+ {
575
+ order_sn: "220101000000001",
576
+ package_number: "PKG001",
577
+ fulfillment_status: "READY_TO_SHIP",
578
+ update_time: 1640995200,
579
+ logistics_channel_id: 80001,
580
+ days_to_ship: 3,
581
+ ship_by_date: 1641254400,
582
+ create_time: 1640908800,
583
+ },
584
+ ],
585
+ },
586
+ };
587
+ mockShopeeFetch.mockResolvedValue(mockResponse);
588
+ const result = await orderManager.searchPackageList({
589
+ filter: {
590
+ package_status: 2,
591
+ },
592
+ pagination: {
593
+ page_size: 20,
594
+ cursor: "",
595
+ },
596
+ });
597
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/order/search_package_list", {
598
+ method: "POST",
599
+ auth: true,
600
+ body: {
601
+ filter: {
602
+ package_status: 2,
603
+ },
604
+ pagination: {
605
+ page_size: 20,
606
+ cursor: "",
607
+ },
608
+ },
609
+ });
610
+ expect(result).toEqual(mockResponse);
611
+ });
612
+ });
613
+ describe("getPendingBuyerInvoiceOrderList", () => {
614
+ it("should get pending buyer invoice order list", async () => {
615
+ const mockResponse = {
616
+ request_id: "test-request-id",
617
+ error: "",
618
+ message: "",
619
+ response: {
620
+ more: false,
621
+ next_cursor: "",
622
+ order_sn_list: ["220101000000001", "220101000000002"],
623
+ },
624
+ };
625
+ mockShopeeFetch.mockResolvedValue(mockResponse);
626
+ const result = await orderManager.getPendingBuyerInvoiceOrderList({
627
+ page_size: 20,
628
+ cursor: "",
629
+ });
630
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/order/get_pending_buyer_invoice_order_list", {
631
+ method: "GET",
632
+ auth: true,
633
+ params: {
634
+ page_size: 20,
635
+ cursor: "",
636
+ },
637
+ });
638
+ expect(result).toEqual(mockResponse);
639
+ });
640
+ });
641
+ describe("handlePrescriptionCheck", () => {
642
+ it("should approve prescription", async () => {
643
+ const mockResponse = {
644
+ request_id: "test-request-id",
645
+ error: "",
646
+ message: "",
647
+ response: {
648
+ package_number: "PKG001",
649
+ },
650
+ };
651
+ mockShopeeFetch.mockResolvedValue(mockResponse);
652
+ const result = await orderManager.handlePrescriptionCheck({
653
+ package_number: "PKG001",
654
+ operation: "APPROVE",
655
+ order_sn: "220101000000001",
656
+ is_approved: true,
657
+ reject_reason_code: 0,
658
+ items: [{ item_id: 111111, model_id: 222222, prescription_status: 1 }],
659
+ pharmacist_name: "John Doe",
660
+ free_text: "Checked",
661
+ });
662
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/order/handle_prescription_check", {
663
+ method: "POST",
664
+ auth: true,
665
+ body: {
666
+ package_number: "PKG001",
667
+ operation: "APPROVE",
668
+ order_sn: "220101000000001",
669
+ is_approved: true,
670
+ reject_reason_code: 0,
671
+ items: [{ item_id: 111111, model_id: 222222, prescription_status: 1 }],
672
+ pharmacist_name: "John Doe",
673
+ free_text: "Checked",
674
+ },
675
+ });
676
+ expect(result).toEqual(mockResponse);
677
+ });
678
+ });
679
+ describe("downloadInvoiceDoc", () => {
680
+ it("should download invoice document", async () => {
681
+ const mockResponse = {
682
+ request_id: "test-request-id",
683
+ error: "",
684
+ message: "",
685
+ response: {
686
+ url: "https://example.com/invoice.pdf",
687
+ },
688
+ };
689
+ mockShopeeFetch.mockResolvedValue(mockResponse);
690
+ const result = await orderManager.downloadInvoiceDoc({
691
+ order_sn: "220101000000001",
692
+ });
693
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/order/download_invoice_doc", {
694
+ method: "GET",
695
+ auth: true,
696
+ params: {
697
+ order_sn: "220101000000001",
698
+ },
699
+ });
700
+ expect(result).toEqual(mockResponse);
701
+ });
702
+ });
703
+ describe("uploadInvoiceDoc", () => {
704
+ it("should upload invoice document", async () => {
705
+ const mockResponse = {
706
+ request_id: "test-request-id",
707
+ error: "",
708
+ message: "",
709
+ response: null,
710
+ };
711
+ mockShopeeFetch.mockResolvedValue(mockResponse);
712
+ const result = await orderManager.uploadInvoiceDoc({
713
+ order_sn: "220101000000001",
714
+ invoice_file: "base64_encoded_file_content",
715
+ file_type: "pdf",
716
+ file: "invoice.pdf",
717
+ });
718
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/order/upload_invoice_doc", {
719
+ method: "POST",
720
+ auth: true,
721
+ body: {
722
+ order_sn: "220101000000001",
723
+ invoice_file: "base64_encoded_file_content",
724
+ file_type: "pdf",
725
+ file: "invoice.pdf",
726
+ },
727
+ });
728
+ expect(result).toEqual(mockResponse);
729
+ });
730
+ });
731
+ describe("getBookingDetail", () => {
732
+ it("should get booking detail", async () => {
733
+ const mockResponse = {
734
+ request_id: "test-request-id",
735
+ error: "",
736
+ message: "",
737
+ response: {
738
+ booking_list: [
739
+ {
740
+ booking_sn: "BOOK001",
741
+ order_sn: "220101000000001",
742
+ booking_status: "READY_TO_SHIP",
743
+ create_time: 1640908800,
744
+ update_time: 1640995200,
745
+ logistics_channel_id: 80001,
746
+ package_list: ["PKG001", "PKG002"],
747
+ },
748
+ ],
749
+ },
750
+ };
751
+ mockShopeeFetch.mockResolvedValue(mockResponse);
752
+ const result = await orderManager.getBookingDetail({
753
+ booking_sn_list: ["BOOK001"],
754
+ response_optional_fields: "booking_status",
755
+ });
756
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/order/get_booking_detail", {
757
+ method: "GET",
758
+ auth: true,
759
+ params: {
760
+ booking_sn_list: "BOOK001",
761
+ response_optional_fields: "booking_status",
762
+ },
763
+ });
764
+ expect(result).toEqual(mockResponse);
765
+ });
766
+ });
767
+ describe("getBookingList", () => {
768
+ it("should get booking list", async () => {
769
+ const mockResponse = {
770
+ request_id: "test-request-id",
771
+ error: "",
772
+ message: "",
773
+ response: {
774
+ more: false,
775
+ next_cursor: "",
776
+ booking_list: [
777
+ {
778
+ booking_sn: "BOOK001",
779
+ booking_status: "READY_TO_SHIP",
780
+ update_time: 1640995200,
781
+ },
782
+ ],
783
+ },
784
+ };
785
+ mockShopeeFetch.mockResolvedValue(mockResponse);
786
+ const result = await orderManager.getBookingList({
787
+ time_range_field: "create_time",
788
+ time_from: 1640908800,
789
+ time_to: 1640995200,
790
+ page_size: 20,
791
+ cursor: "",
792
+ });
793
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/order/get_booking_list", {
794
+ method: "GET",
795
+ auth: true,
796
+ params: {
797
+ time_range_field: "create_time",
798
+ time_from: 1640908800,
799
+ time_to: 1640995200,
800
+ page_size: 20,
801
+ cursor: "",
802
+ },
803
+ });
804
+ expect(result).toEqual(mockResponse);
805
+ });
806
+ });
807
+ describe("getWarehouseFilterConfig", () => {
808
+ it("should get warehouse filter config", async () => {
809
+ const mockResponse = {
810
+ request_id: "test-request-id",
811
+ error: "",
812
+ message: "",
813
+ response: {
814
+ warehouse_list: [
815
+ {
816
+ product_location_id: "LOC001",
817
+ address_id: 12345,
818
+ },
819
+ ],
820
+ },
821
+ };
822
+ mockShopeeFetch.mockResolvedValue(mockResponse);
823
+ const result = await orderManager.getWarehouseFilterConfig();
824
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/order/get_warehouse_filter_config", {
825
+ method: "GET",
826
+ auth: true,
827
+ });
828
+ expect(result).toEqual(mockResponse);
829
+ });
830
+ });
831
+ describe("downloadFbsInvoices", () => {
832
+ it("should download FBS invoices", async () => {
833
+ const mockResponse = {
834
+ request_id: "test-request-id",
835
+ error: "",
836
+ message: "",
837
+ response: {
838
+ result_list: [
839
+ {
840
+ request_id: 123,
841
+ url: "https://example.com/invoice.pdf",
842
+ },
843
+ ],
844
+ },
845
+ };
846
+ mockShopeeFetch.mockResolvedValue(mockResponse);
847
+ const result = await orderManager.downloadFbsInvoices({
848
+ request_id_list: {
849
+ request_id: [123, 456],
850
+ },
851
+ });
852
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/order/download_fbs_invoices", {
853
+ method: "POST",
854
+ auth: true,
855
+ body: {
856
+ request_id_list: {
857
+ request_id: [123, 456],
858
+ },
859
+ },
860
+ });
861
+ expect(result).toEqual(mockResponse);
862
+ });
863
+ });
864
+ describe("generateFbsInvoices", () => {
865
+ it("should generate FBS invoices", async () => {
866
+ const mockResponse = {
867
+ request_id: "test-request-id",
868
+ error: "",
869
+ message: "",
870
+ response: {
871
+ request_id: 123,
872
+ },
873
+ };
874
+ mockShopeeFetch.mockResolvedValue(mockResponse);
875
+ const result = await orderManager.generateFbsInvoices({
876
+ batch_download: {
877
+ start: 20240101,
878
+ end: 20240131,
879
+ document_type: 1,
880
+ file_type: 3,
881
+ },
882
+ });
883
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/order/generate_fbs_invoices", {
884
+ method: "POST",
885
+ auth: true,
886
+ body: {
887
+ batch_download: {
888
+ start: 20240101,
889
+ end: 20240131,
890
+ document_type: 1,
891
+ file_type: 3,
892
+ },
893
+ },
894
+ });
895
+ expect(result).toEqual(mockResponse);
896
+ });
897
+ });
898
+ describe("getFbsInvoicesResult", () => {
899
+ it("should get FBS invoices result", async () => {
900
+ const mockResponse = {
901
+ request_id: "test-request-id",
902
+ error: "",
903
+ message: "",
904
+ response: {
905
+ result_list: [
906
+ {
907
+ request_id: 123,
908
+ status: "READY",
909
+ },
910
+ ],
911
+ },
912
+ };
913
+ mockShopeeFetch.mockResolvedValue(mockResponse);
914
+ const result = await orderManager.getFbsInvoicesResult({
915
+ request_id_list: {
916
+ request_id: [123],
917
+ },
918
+ });
919
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/order/get_fbs_invoices_result", {
920
+ method: "POST",
921
+ auth: true,
922
+ body: {
923
+ request_id_list: {
924
+ request_id: [123],
925
+ },
926
+ },
927
+ });
928
+ expect(result).toEqual(mockResponse);
929
+ });
930
+ });
931
+ describe("Schema Evaluation Check", () => {
932
+ it("should successfully reference all exported enums and constants", () => {
933
+ expect(allOptionalFields).toContain("recipient_address");
934
+ });
935
+ });
936
+ });
937
+ //# sourceMappingURL=order.manager.test.js.map