@congminh1254/shopee-sdk 1.6.2 → 1.7.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 (154) 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 +227 -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/returns.d.ts +38 -1
  145. package/lib/schemas/shop.d.ts +16 -0
  146. package/lib/schemas/video.d.ts +83 -37
  147. package/lib/schemas/voucher.d.ts +2 -0
  148. package/lib/sdk.js +31 -0
  149. package/lib/sdk.js.map +1 -1
  150. package/lib/storage/custom-token-storage.js +2 -0
  151. package/lib/storage/custom-token-storage.js.map +1 -1
  152. package/lib/version.d.ts +1 -1
  153. package/lib/version.js +1 -1
  154. package/package.json +3 -3
@@ -0,0 +1,1253 @@
1
+ import { jest } from "@jest/globals";
2
+ import { GlobalProductManager } from "../../managers/global-product.manager.js";
3
+ import { ShopeeRegion } from "../../schemas/region.js";
4
+ import { ShopeeFetch } from "../../fetch.js";
5
+ // Mock ShopeeFetch.fetch static method
6
+ const mockFetch = jest.fn();
7
+ ShopeeFetch.fetch = mockFetch;
8
+ describe("GlobalProductManager", () => {
9
+ let globalProductManager;
10
+ let mockConfig;
11
+ const mockShopeeFetch = mockFetch;
12
+ beforeEach(() => {
13
+ jest.clearAllMocks();
14
+ mockConfig = {
15
+ partner_id: 12345,
16
+ partner_key: "test_partner_key",
17
+ shop_id: 67890,
18
+ region: ShopeeRegion.GLOBAL,
19
+ base_url: "https://partner.test-stable.shopeemobile.com/api/v2",
20
+ };
21
+ globalProductManager = new GlobalProductManager(mockConfig);
22
+ });
23
+ describe("getCategory", () => {
24
+ it("should get global category list successfully", async () => {
25
+ const mockResponse = {
26
+ request_id: "test-request-id",
27
+ error: "",
28
+ message: "",
29
+ response: {
30
+ category_list: [
31
+ {
32
+ category_id: 100182,
33
+ parent_category_id: 100180,
34
+ original_category_name: "Mobile & Accessories",
35
+ display_category_name: "手机及配件",
36
+ has_children: true,
37
+ },
38
+ {
39
+ category_id: 100183,
40
+ parent_category_id: 100180,
41
+ original_category_name: "Cameras",
42
+ display_category_name: "相机",
43
+ has_children: false,
44
+ },
45
+ ],
46
+ },
47
+ };
48
+ mockShopeeFetch.mockResolvedValue(mockResponse);
49
+ const result = await globalProductManager.getCategory({ language: "zh-hans" });
50
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/get_category", {
51
+ method: "GET",
52
+ auth: true,
53
+ params: { language: "zh-hans" },
54
+ });
55
+ expect(result.error).toBe("");
56
+ expect(result.response.category_list).toHaveLength(2);
57
+ expect(result.response.category_list[0].category_id).toBe(100182);
58
+ expect(result.response.category_list[0].has_children).toBe(true);
59
+ });
60
+ it("should get category list without language parameter", async () => {
61
+ const mockResponse = {
62
+ request_id: "test-request-id",
63
+ error: "",
64
+ message: "",
65
+ response: {
66
+ category_list: [],
67
+ },
68
+ };
69
+ mockShopeeFetch.mockResolvedValue(mockResponse);
70
+ const result = await globalProductManager.getCategory();
71
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/get_category", {
72
+ method: "GET",
73
+ auth: true,
74
+ params: {},
75
+ });
76
+ expect(result.error).toBe("");
77
+ });
78
+ });
79
+ describe("getGlobalItemList", () => {
80
+ it("should get global item list successfully", async () => {
81
+ const mockResponse = {
82
+ request_id: "test-request-id",
83
+ error: "",
84
+ message: "",
85
+ response: {
86
+ global_item_list: [
87
+ {
88
+ global_item_id: 2300146833,
89
+ update_time: 1608967817,
90
+ },
91
+ {
92
+ global_item_id: 2300146834,
93
+ update_time: 1608967818,
94
+ },
95
+ ],
96
+ total_count: 826,
97
+ has_next_page: true,
98
+ offset: "AAAAFA==",
99
+ },
100
+ };
101
+ mockShopeeFetch.mockResolvedValue(mockResponse);
102
+ const result = await globalProductManager.getGlobalItemList({
103
+ page_size: 10,
104
+ update_time_from: 1611311600,
105
+ update_time_to: 1611311631,
106
+ });
107
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/get_global_item_list", {
108
+ method: "GET",
109
+ auth: true,
110
+ params: {
111
+ page_size: 10,
112
+ update_time_from: 1611311600,
113
+ update_time_to: 1611311631,
114
+ },
115
+ });
116
+ expect(result.error).toBe("");
117
+ expect(result.response.global_item_list).toHaveLength(2);
118
+ expect(result.response.total_count).toBe(826);
119
+ expect(result.response.has_next_page).toBe(true);
120
+ });
121
+ });
122
+ describe("getGlobalItemInfo", () => {
123
+ it("should get global item info successfully", async () => {
124
+ const mockResponse = {
125
+ request_id: "test-request-id",
126
+ error: "",
127
+ message: "",
128
+ response: {
129
+ global_item_list: [
130
+ {
131
+ global_item_id: 123456,
132
+ category_id: 100182,
133
+ global_item_name: "Test Product",
134
+ description: "Test Description",
135
+ image: {
136
+ image_url_list: ["https://example.com/image1.jpg"],
137
+ image_id_list: ["image123"],
138
+ },
139
+ price_info: [
140
+ {
141
+ currency: "USD",
142
+ original_price: 29.99,
143
+ current_price: 29.99,
144
+ },
145
+ ],
146
+ stock_info: [
147
+ {
148
+ stock_type: 1,
149
+ current_stock: 100,
150
+ normal_stock: 100,
151
+ reserved_stock: 0,
152
+ },
153
+ ],
154
+ attribute_list: [],
155
+ item_status: "NORMAL",
156
+ has_model: false,
157
+ create_time: 1608967817,
158
+ update_time: 1608967817,
159
+ },
160
+ ],
161
+ },
162
+ };
163
+ mockShopeeFetch.mockResolvedValue(mockResponse);
164
+ const result = await globalProductManager.getGlobalItemInfo({
165
+ global_item_id_list: [123456],
166
+ });
167
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/get_global_item_info", {
168
+ method: "GET",
169
+ auth: true,
170
+ params: {
171
+ global_item_id_list: [123456],
172
+ },
173
+ });
174
+ expect(result.error).toBe("");
175
+ expect(result.response.global_item_list).toHaveLength(1);
176
+ expect(result.response.global_item_list[0].global_item_id).toBe(123456);
177
+ expect(result.response.global_item_list[0].global_item_name).toBe("Test Product");
178
+ });
179
+ });
180
+ describe("addGlobalItem", () => {
181
+ it("should add a global item successfully", async () => {
182
+ const mockResponse = {
183
+ request_id: "test-request-id",
184
+ error: "",
185
+ message: "",
186
+ response: {
187
+ global_item_id: 123456,
188
+ },
189
+ };
190
+ mockShopeeFetch.mockResolvedValue(mockResponse);
191
+ const result = await globalProductManager.addGlobalItem({
192
+ category_id: 100182,
193
+ global_item_name: "New Product",
194
+ description: "Product description",
195
+ weight: 1.5,
196
+ image: {
197
+ image_id_list: ["image123"],
198
+ },
199
+ });
200
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/add_global_item", {
201
+ method: "POST",
202
+ auth: true,
203
+ body: {
204
+ category_id: 100182,
205
+ global_item_name: "New Product",
206
+ description: "Product description",
207
+ weight: 1.5,
208
+ image: {
209
+ image_id_list: ["image123"],
210
+ },
211
+ },
212
+ });
213
+ expect(result.error).toBe("");
214
+ expect(result.response.global_item_id).toBe(123456);
215
+ });
216
+ });
217
+ describe("updateGlobalItem", () => {
218
+ it("should update a global item successfully", async () => {
219
+ const mockResponse = {
220
+ request_id: "test-request-id",
221
+ error: "",
222
+ message: "",
223
+ response: {
224
+ global_item_id: 123456,
225
+ },
226
+ };
227
+ mockShopeeFetch.mockResolvedValue(mockResponse);
228
+ const result = await globalProductManager.updateGlobalItem({
229
+ global_item_id: 123456,
230
+ global_item_name: "Updated Product",
231
+ });
232
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/update_global_item", {
233
+ method: "POST",
234
+ auth: true,
235
+ body: {
236
+ global_item_id: 123456,
237
+ global_item_name: "Updated Product",
238
+ },
239
+ });
240
+ expect(result.error).toBe("");
241
+ expect(result.response.global_item_id).toBe(123456);
242
+ });
243
+ });
244
+ describe("deleteGlobalItem", () => {
245
+ it("should delete a global item successfully", async () => {
246
+ const mockResponse = {
247
+ request_id: "test-request-id",
248
+ error: "",
249
+ message: "",
250
+ };
251
+ mockShopeeFetch.mockResolvedValue(mockResponse);
252
+ const result = await globalProductManager.deleteGlobalItem({
253
+ global_item_id: 123456,
254
+ });
255
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/delete_global_item", {
256
+ method: "POST",
257
+ auth: true,
258
+ body: {
259
+ global_item_id: 123456,
260
+ },
261
+ });
262
+ expect(result.error).toBe("");
263
+ });
264
+ });
265
+ describe("initTierVariation", () => {
266
+ it("should initialize tier variation successfully", async () => {
267
+ const mockResponse = {
268
+ request_id: "test-request-id",
269
+ error: "",
270
+ message: "",
271
+ response: {
272
+ model_list: [
273
+ {
274
+ global_model_id: 789,
275
+ tier_index: [0, 0],
276
+ },
277
+ {
278
+ global_model_id: 790,
279
+ tier_index: [0, 1],
280
+ },
281
+ ],
282
+ },
283
+ };
284
+ mockShopeeFetch.mockResolvedValue(mockResponse);
285
+ const result = await globalProductManager.initTierVariation({
286
+ global_item_id: 123456,
287
+ tier_variation: [
288
+ {
289
+ name: "Color",
290
+ option_list: [{ option: "Red" }, { option: "Blue" }],
291
+ },
292
+ ],
293
+ model_list: [
294
+ {
295
+ tier_index: [0],
296
+ model_sku: "SKU-RED",
297
+ },
298
+ {
299
+ tier_index: [1],
300
+ model_sku: "SKU-BLUE",
301
+ },
302
+ ],
303
+ });
304
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/init_tier_variation", {
305
+ method: "POST",
306
+ auth: true,
307
+ body: expect.objectContaining({
308
+ global_item_id: 123456,
309
+ }),
310
+ });
311
+ expect(result.error).toBe("");
312
+ expect(result.response.model_list).toHaveLength(2);
313
+ });
314
+ });
315
+ describe("updateStock", () => {
316
+ it("should update global item stock successfully", async () => {
317
+ const mockResponse = {
318
+ request_id: "test-request-id",
319
+ error: "",
320
+ message: "",
321
+ response: {
322
+ result_list: [
323
+ {
324
+ shop_id: 67890,
325
+ success: true,
326
+ },
327
+ ],
328
+ },
329
+ };
330
+ mockShopeeFetch.mockResolvedValue(mockResponse);
331
+ const result = await globalProductManager.updateStock({
332
+ global_item_id: 123456,
333
+ stock_list: [
334
+ {
335
+ shop_id: 67890,
336
+ normal_stock: 100,
337
+ },
338
+ ],
339
+ });
340
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/update_stock", {
341
+ method: "POST",
342
+ auth: true,
343
+ body: {
344
+ global_item_id: 123456,
345
+ stock_list: [
346
+ {
347
+ shop_id: 67890,
348
+ normal_stock: 100,
349
+ },
350
+ ],
351
+ },
352
+ });
353
+ expect(result.error).toBe("");
354
+ expect(result.response.result_list[0].success).toBe(true);
355
+ });
356
+ });
357
+ describe("updatePrice", () => {
358
+ it("should update global item price successfully", async () => {
359
+ const mockResponse = {
360
+ request_id: "test-request-id",
361
+ error: "",
362
+ message: "",
363
+ response: {
364
+ result_list: [
365
+ {
366
+ shop_id: 67890,
367
+ success: true,
368
+ },
369
+ ],
370
+ },
371
+ };
372
+ mockShopeeFetch.mockResolvedValue(mockResponse);
373
+ const result = await globalProductManager.updatePrice({
374
+ global_item_id: 123456,
375
+ price_list: [
376
+ {
377
+ shop_id: 67890,
378
+ original_price: 29.99,
379
+ },
380
+ ],
381
+ });
382
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/update_price", {
383
+ method: "POST",
384
+ auth: true,
385
+ body: {
386
+ global_item_id: 123456,
387
+ price_list: [
388
+ {
389
+ shop_id: 67890,
390
+ original_price: 29.99,
391
+ },
392
+ ],
393
+ },
394
+ });
395
+ expect(result.error).toBe("");
396
+ expect(result.response.result_list[0].success).toBe(true);
397
+ });
398
+ });
399
+ describe("getAttributeTree", () => {
400
+ it("should get attribute tree successfully", async () => {
401
+ const mockResponse = {
402
+ request_id: "test-request-id",
403
+ error: "",
404
+ message: "",
405
+ response: {
406
+ attribute_list: [
407
+ {
408
+ attribute_id: 1000,
409
+ original_attribute_name: "Material",
410
+ display_attribute_name: "材质",
411
+ is_mandatory: true,
412
+ attribute_type: "SELECT",
413
+ attribute_value_list: [],
414
+ },
415
+ ],
416
+ },
417
+ };
418
+ mockShopeeFetch.mockResolvedValue(mockResponse);
419
+ const result = await globalProductManager.getAttributeTree({
420
+ category_id: 100182,
421
+ language: "en",
422
+ });
423
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/get_attribute_tree", {
424
+ method: "GET",
425
+ auth: true,
426
+ params: {
427
+ category_id: 100182,
428
+ language: "en",
429
+ },
430
+ });
431
+ expect(result.error).toBe("");
432
+ expect(result.response.attribute_list).toHaveLength(1);
433
+ });
434
+ });
435
+ describe("getBrandList", () => {
436
+ it("should get brand list successfully", async () => {
437
+ const mockResponse = {
438
+ request_id: "test-request-id",
439
+ error: "",
440
+ message: "",
441
+ response: {
442
+ brand_list: [
443
+ {
444
+ brand_id: 5001,
445
+ original_brand_name: "Apple",
446
+ display_brand_name: "Apple",
447
+ },
448
+ ],
449
+ has_next_page: false,
450
+ next_offset: 0,
451
+ total_count: 1,
452
+ },
453
+ };
454
+ mockShopeeFetch.mockResolvedValue(mockResponse);
455
+ const result = await globalProductManager.getBrandList({
456
+ category_id: 100182,
457
+ page_size: 20,
458
+ });
459
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/get_brand_list", {
460
+ method: "GET",
461
+ auth: true,
462
+ params: {
463
+ category_id: 100182,
464
+ page_size: 20,
465
+ },
466
+ });
467
+ expect(result.error).toBe("");
468
+ expect(result.response.brand_list).toHaveLength(1);
469
+ expect(result.response.brand_list[0].brand_id).toBe(5001);
470
+ });
471
+ });
472
+ describe("categoryRecommend", () => {
473
+ it("should get category recommendations successfully", async () => {
474
+ const mockResponse = {
475
+ request_id: "test-request-id",
476
+ error: "",
477
+ message: "",
478
+ response: {
479
+ category_id_list: [100182, 100183, 100184],
480
+ },
481
+ };
482
+ mockShopeeFetch.mockResolvedValue(mockResponse);
483
+ const result = await globalProductManager.categoryRecommend({
484
+ global_item_name: "iPhone Case",
485
+ });
486
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/category_recommend", {
487
+ method: "POST",
488
+ auth: true,
489
+ body: {
490
+ global_item_name: "iPhone Case",
491
+ },
492
+ });
493
+ expect(result.error).toBe("");
494
+ expect(result.response.category_id_list).toHaveLength(3);
495
+ });
496
+ });
497
+ describe("createPublishTask", () => {
498
+ it("should create publish task successfully", async () => {
499
+ const mockResponse = {
500
+ request_id: "test-request-id",
501
+ error: "",
502
+ message: "",
503
+ response: {
504
+ publish_task_id: "task_123",
505
+ },
506
+ };
507
+ mockShopeeFetch.mockResolvedValue(mockResponse);
508
+ const result = await globalProductManager.createPublishTask({
509
+ global_item_id: 123456,
510
+ shop_list: [{ shop_id: 67890 }, { shop_id: 67891 }],
511
+ });
512
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/create_publish_task", {
513
+ method: "POST",
514
+ auth: true,
515
+ body: {
516
+ global_item_id: 123456,
517
+ shop_list: [{ shop_id: 67890 }, { shop_id: 67891 }],
518
+ },
519
+ });
520
+ expect(result.error).toBe("");
521
+ expect(result.response.publish_task_id).toBe("task_123");
522
+ });
523
+ });
524
+ describe("getPublishTaskResult", () => {
525
+ it("should get publish task result successfully", async () => {
526
+ const mockResponse = {
527
+ request_id: "test-request-id",
528
+ error: "",
529
+ message: "",
530
+ response: {
531
+ status: "SUCCESS",
532
+ result_list: [
533
+ {
534
+ shop_id: 67890,
535
+ item_id: 999,
536
+ success: true,
537
+ },
538
+ ],
539
+ },
540
+ };
541
+ mockShopeeFetch.mockResolvedValue(mockResponse);
542
+ const result = await globalProductManager.getPublishTaskResult({
543
+ publish_task_id: "task_123",
544
+ });
545
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/get_publish_task_result", {
546
+ method: "GET",
547
+ auth: true,
548
+ params: {
549
+ publish_task_id: "task_123",
550
+ },
551
+ });
552
+ expect(result.error).toBe("");
553
+ expect(result.response.status).toBe("SUCCESS");
554
+ expect(result.response.result_list[0].success).toBe(true);
555
+ });
556
+ });
557
+ describe("getGlobalItemId", () => {
558
+ it("should get global item ID successfully", async () => {
559
+ const mockResponse = {
560
+ request_id: "test-request-id",
561
+ error: "",
562
+ message: "",
563
+ response: {
564
+ global_item_id: 123456,
565
+ },
566
+ };
567
+ mockShopeeFetch.mockResolvedValue(mockResponse);
568
+ const result = await globalProductManager.getGlobalItemId({
569
+ shop_id: 67890,
570
+ item_id: 999,
571
+ });
572
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/get_global_item_id", {
573
+ method: "GET",
574
+ auth: true,
575
+ params: {
576
+ shop_id: 67890,
577
+ item_id: 999,
578
+ },
579
+ });
580
+ expect(result.error).toBe("");
581
+ expect(result.response.global_item_id).toBe(123456);
582
+ });
583
+ });
584
+ describe("setSyncField", () => {
585
+ it("should set sync field successfully", async () => {
586
+ const mockResponse = {
587
+ request_id: "test-request-id",
588
+ error: "",
589
+ message: "",
590
+ response: {
591
+ result_list: [
592
+ {
593
+ shop_id: 67890,
594
+ success: true,
595
+ },
596
+ ],
597
+ },
598
+ };
599
+ mockShopeeFetch.mockResolvedValue(mockResponse);
600
+ const result = await globalProductManager.setSyncField({
601
+ global_item_id: 123456,
602
+ shop_list: [
603
+ {
604
+ shop_id: 67890,
605
+ sync_field_list: ["name", "price", "stock"],
606
+ },
607
+ ],
608
+ });
609
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/set_sync_field", {
610
+ method: "POST",
611
+ auth: true,
612
+ body: {
613
+ global_item_id: 123456,
614
+ shop_list: [
615
+ {
616
+ shop_id: 67890,
617
+ sync_field_list: ["name", "price", "stock"],
618
+ },
619
+ ],
620
+ },
621
+ });
622
+ expect(result.error).toBe("");
623
+ expect(result.response.result_list[0].success).toBe(true);
624
+ });
625
+ });
626
+ describe("supportSizeChart", () => {
627
+ it("should check size chart support successfully", async () => {
628
+ const mockResponse = {
629
+ request_id: "test-request-id",
630
+ error: "",
631
+ message: "",
632
+ response: {
633
+ support: true,
634
+ },
635
+ };
636
+ mockShopeeFetch.mockResolvedValue(mockResponse);
637
+ const result = await globalProductManager.supportSizeChart({
638
+ category_id: 100182,
639
+ });
640
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/support_size_chart", {
641
+ method: "GET",
642
+ auth: true,
643
+ params: {
644
+ category_id: 100182,
645
+ },
646
+ });
647
+ expect(result.error).toBe("");
648
+ expect(result.response.support).toBe(true);
649
+ });
650
+ });
651
+ describe("getGlobalModelList", () => {
652
+ it("should get global model list successfully", async () => {
653
+ const mockResponse = {
654
+ request_id: "test-request-id",
655
+ error: "",
656
+ message: "",
657
+ response: {
658
+ tier_variation: [
659
+ {
660
+ name: "Color",
661
+ option_list: [
662
+ {
663
+ option: "Red",
664
+ },
665
+ {
666
+ option: "Blue",
667
+ },
668
+ ],
669
+ },
670
+ ],
671
+ global_model: [
672
+ {
673
+ global_model_id: 789,
674
+ tier_index: [0],
675
+ price_info: [
676
+ {
677
+ currency: "USD",
678
+ original_price: 29.99,
679
+ current_price: 29.99,
680
+ },
681
+ ],
682
+ stock_info: [
683
+ {
684
+ stock_type: 1,
685
+ current_stock: 50,
686
+ normal_stock: 50,
687
+ reserved_stock: 0,
688
+ },
689
+ ],
690
+ create_time: 1608967817,
691
+ update_time: 1608967817,
692
+ },
693
+ ],
694
+ },
695
+ };
696
+ mockShopeeFetch.mockResolvedValue(mockResponse);
697
+ const result = await globalProductManager.getGlobalModelList({
698
+ global_item_id: 123456,
699
+ });
700
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/get_global_model_list", {
701
+ method: "GET",
702
+ auth: true,
703
+ params: {
704
+ global_item_id: 123456,
705
+ },
706
+ });
707
+ expect(result.error).toBe("");
708
+ expect(result.response.tier_variation).toHaveLength(1);
709
+ expect(result.response.global_model).toHaveLength(1);
710
+ });
711
+ });
712
+ describe("addGlobalModel", () => {
713
+ it("should add global models successfully", async () => {
714
+ const mockResponse = {
715
+ request_id: "test-request-id",
716
+ error: "",
717
+ message: "",
718
+ response: {
719
+ model_list: [
720
+ {
721
+ global_model_id: 789,
722
+ tier_index: [0, 1],
723
+ },
724
+ ],
725
+ },
726
+ };
727
+ mockShopeeFetch.mockResolvedValue(mockResponse);
728
+ const result = await globalProductManager.addGlobalModel({
729
+ global_item_id: 123456,
730
+ model_list: [
731
+ {
732
+ tier_index: [0, 1],
733
+ model_sku: "SKU-001",
734
+ },
735
+ ],
736
+ });
737
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/add_global_model", {
738
+ method: "POST",
739
+ auth: true,
740
+ body: {
741
+ global_item_id: 123456,
742
+ model_list: [
743
+ {
744
+ tier_index: [0, 1],
745
+ model_sku: "SKU-001",
746
+ },
747
+ ],
748
+ },
749
+ });
750
+ expect(result.error).toBe("");
751
+ expect(result.response.model_list).toHaveLength(1);
752
+ });
753
+ });
754
+ describe("updateGlobalModel", () => {
755
+ it("should update global models successfully", async () => {
756
+ const mockResponse = {
757
+ request_id: "test-request-id",
758
+ error: "",
759
+ message: "",
760
+ response: {
761
+ model_list: [
762
+ {
763
+ global_model_id: 789,
764
+ },
765
+ ],
766
+ },
767
+ };
768
+ mockShopeeFetch.mockResolvedValue(mockResponse);
769
+ const result = await globalProductManager.updateGlobalModel({
770
+ global_item_id: 123456,
771
+ model_list: [
772
+ {
773
+ global_model_id: 789,
774
+ model_sku: "SKU-002",
775
+ },
776
+ ],
777
+ });
778
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/update_global_model", {
779
+ method: "POST",
780
+ auth: true,
781
+ body: {
782
+ global_item_id: 123456,
783
+ model_list: [
784
+ {
785
+ global_model_id: 789,
786
+ model_sku: "SKU-002",
787
+ },
788
+ ],
789
+ },
790
+ });
791
+ expect(result.error).toBe("");
792
+ expect(result.response.model_list[0].global_model_id).toBe(789);
793
+ });
794
+ });
795
+ describe("deleteGlobalModel", () => {
796
+ it("should delete global models successfully", async () => {
797
+ const mockResponse = {
798
+ request_id: "test-request-id",
799
+ error: "",
800
+ message: "",
801
+ response: {
802
+ model_list: [
803
+ {
804
+ global_model_id: 789,
805
+ success: true,
806
+ },
807
+ ],
808
+ },
809
+ };
810
+ mockShopeeFetch.mockResolvedValue(mockResponse);
811
+ const result = await globalProductManager.deleteGlobalModel({
812
+ global_item_id: 123456,
813
+ global_model_id_list: [789],
814
+ });
815
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/delete_global_model", {
816
+ method: "POST",
817
+ auth: true,
818
+ body: {
819
+ global_item_id: 123456,
820
+ global_model_id_list: [789],
821
+ },
822
+ });
823
+ expect(result.error).toBe("");
824
+ expect(result.response.model_list[0].success).toBe(true);
825
+ });
826
+ });
827
+ describe("updateTierVariation", () => {
828
+ it("should update tier variation successfully", async () => {
829
+ const mockResponse = {
830
+ request_id: "test-request-id",
831
+ error: "",
832
+ message: "",
833
+ };
834
+ mockShopeeFetch.mockResolvedValue(mockResponse);
835
+ const result = await globalProductManager.updateTierVariation({
836
+ global_item_id: 123456,
837
+ tier_variation: [
838
+ {
839
+ name: "Size",
840
+ option_list: [{ option: "S" }, { option: "M" }, { option: "L" }],
841
+ },
842
+ ],
843
+ });
844
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/update_tier_variation", {
845
+ method: "POST",
846
+ auth: true,
847
+ body: expect.objectContaining({
848
+ global_item_id: 123456,
849
+ }),
850
+ });
851
+ expect(result.error).toBe("");
852
+ });
853
+ });
854
+ describe("getGlobalItemLimit", () => {
855
+ it("should get global item limit successfully", async () => {
856
+ const mockResponse = {
857
+ request_id: "test-request-id",
858
+ error: "",
859
+ message: "",
860
+ response: {
861
+ limit_info: {
862
+ max_image_count: 9,
863
+ max_video_count: 1,
864
+ max_name_length: 120,
865
+ max_description_length: 3000,
866
+ support_video: true,
867
+ support_size_chart: true,
868
+ },
869
+ },
870
+ };
871
+ mockShopeeFetch.mockResolvedValue(mockResponse);
872
+ const result = await globalProductManager.getGlobalItemLimit({
873
+ category_id: 100182,
874
+ });
875
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/get_global_item_limit", {
876
+ method: "GET",
877
+ auth: true,
878
+ params: {
879
+ category_id: 100182,
880
+ },
881
+ });
882
+ expect(result.error).toBe("");
883
+ expect(result.response.limit_info.max_image_count).toBe(9);
884
+ });
885
+ });
886
+ describe("getPublishableShop", () => {
887
+ it("should get publishable shop list successfully", async () => {
888
+ const mockResponse = {
889
+ request_id: "test-request-id",
890
+ error: "",
891
+ message: "",
892
+ response: {
893
+ shop_list: [
894
+ {
895
+ shop_id: 67890,
896
+ shop_name: "Test Shop",
897
+ region: "SG",
898
+ },
899
+ ],
900
+ },
901
+ };
902
+ mockShopeeFetch.mockResolvedValue(mockResponse);
903
+ const result = await globalProductManager.getPublishableShop({
904
+ global_item_id: 123456,
905
+ });
906
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/get_publishable_shop", {
907
+ method: "GET",
908
+ auth: true,
909
+ params: {
910
+ global_item_id: 123456,
911
+ },
912
+ });
913
+ expect(result.error).toBe("");
914
+ expect(result.response.shop_list).toHaveLength(1);
915
+ });
916
+ });
917
+ describe("getShopPublishableStatus", () => {
918
+ it("should get shop publishable status successfully", async () => {
919
+ const mockResponse = {
920
+ request_id: "test-request-id",
921
+ error: "",
922
+ message: "",
923
+ response: {
924
+ shop_list: [
925
+ {
926
+ shop_id: 67890,
927
+ publishable: true,
928
+ },
929
+ ],
930
+ },
931
+ };
932
+ mockShopeeFetch.mockResolvedValue(mockResponse);
933
+ const result = await globalProductManager.getShopPublishableStatus({
934
+ global_item_id: 123456,
935
+ shop_id_list: [67890],
936
+ });
937
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/get_shop_publishable_status", {
938
+ method: "GET",
939
+ auth: true,
940
+ params: {
941
+ global_item_id: 123456,
942
+ shop_id_list: [67890],
943
+ },
944
+ });
945
+ expect(result.error).toBe("");
946
+ expect(result.response.shop_list[0].publishable).toBe(true);
947
+ });
948
+ });
949
+ describe("getPublishedList", () => {
950
+ it("should get published list successfully", async () => {
951
+ const mockResponse = {
952
+ request_id: "test-request-id",
953
+ error: "",
954
+ message: "",
955
+ response: {
956
+ shop_list: [
957
+ {
958
+ shop_id: 67890,
959
+ item_id: 999,
960
+ shop_name: "Test Shop",
961
+ region: "SG",
962
+ },
963
+ ],
964
+ },
965
+ };
966
+ mockShopeeFetch.mockResolvedValue(mockResponse);
967
+ const result = await globalProductManager.getPublishedList({
968
+ global_item_id: 123456,
969
+ });
970
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/get_published_list", {
971
+ method: "GET",
972
+ auth: true,
973
+ params: {
974
+ global_item_id: 123456,
975
+ },
976
+ });
977
+ expect(result.error).toBe("");
978
+ expect(result.response.shop_list).toHaveLength(1);
979
+ });
980
+ });
981
+ describe("getRecommendAttribute", () => {
982
+ it("should get recommended attributes successfully", async () => {
983
+ const mockResponse = {
984
+ request_id: "test-request-id",
985
+ error: "",
986
+ message: "",
987
+ response: {
988
+ attribute_list: [
989
+ {
990
+ attribute_id: 1000,
991
+ original_attribute_name: "Material",
992
+ display_attribute_name: "Material",
993
+ is_mandatory: true,
994
+ attribute_type: "SELECT",
995
+ attribute_value_list: [],
996
+ },
997
+ ],
998
+ },
999
+ };
1000
+ mockShopeeFetch.mockResolvedValue(mockResponse);
1001
+ const result = await globalProductManager.getRecommendAttribute({
1002
+ global_item_id: 123456,
1003
+ });
1004
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/get_recommend_attribute", {
1005
+ method: "GET",
1006
+ auth: true,
1007
+ params: {
1008
+ global_item_id: 123456,
1009
+ },
1010
+ });
1011
+ expect(result.error).toBe("");
1012
+ expect(result.response.attribute_list).toHaveLength(1);
1013
+ });
1014
+ });
1015
+ describe("searchGlobalAttributeValueList", () => {
1016
+ it("should search global attribute value list successfully", async () => {
1017
+ const mockResponse = {
1018
+ request_id: "test-request-id",
1019
+ error: "",
1020
+ message: "",
1021
+ response: {
1022
+ attribute_value_list: [
1023
+ {
1024
+ value_id: 1001,
1025
+ original_value_name: "Cotton",
1026
+ display_value_name: "Cotton",
1027
+ },
1028
+ ],
1029
+ },
1030
+ };
1031
+ mockShopeeFetch.mockResolvedValue(mockResponse);
1032
+ const result = await globalProductManager.searchGlobalAttributeValueList({
1033
+ category_id: 100182,
1034
+ attribute_id: 1000,
1035
+ keyword: "cotton",
1036
+ });
1037
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/search_global_attribute_value_list", {
1038
+ method: "POST",
1039
+ auth: true,
1040
+ body: {
1041
+ category_id: 100182,
1042
+ attribute_id: 1000,
1043
+ keyword: "cotton",
1044
+ },
1045
+ });
1046
+ expect(result.error).toBe("");
1047
+ expect(result.response.attribute_value_list).toHaveLength(1);
1048
+ });
1049
+ });
1050
+ describe("getVariations", () => {
1051
+ it("should get variations successfully", async () => {
1052
+ const mockResponse = {
1053
+ request_id: "test-request-id",
1054
+ error: "",
1055
+ message: "",
1056
+ response: {
1057
+ tier_variation: [
1058
+ {
1059
+ name: "Color",
1060
+ option_list: [
1061
+ {
1062
+ option: "Red",
1063
+ },
1064
+ ],
1065
+ },
1066
+ ],
1067
+ },
1068
+ };
1069
+ mockShopeeFetch.mockResolvedValue(mockResponse);
1070
+ const result = await globalProductManager.getVariations({
1071
+ global_item_id: 123456,
1072
+ });
1073
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/get_variations", {
1074
+ method: "GET",
1075
+ auth: true,
1076
+ params: {
1077
+ global_item_id: 123456,
1078
+ },
1079
+ });
1080
+ expect(result.error).toBe("");
1081
+ expect(result.response.tier_variation).toHaveLength(1);
1082
+ });
1083
+ });
1084
+ describe("getLocalAdjustmentRate", () => {
1085
+ it("should get local adjustment rate successfully", async () => {
1086
+ const mockResponse = {
1087
+ request_id: "test-request-id",
1088
+ error: "",
1089
+ message: "",
1090
+ response: {
1091
+ adjustment_rate_list: [
1092
+ {
1093
+ shop_id: 67890,
1094
+ adjustment_rate: 10.5,
1095
+ },
1096
+ ],
1097
+ },
1098
+ };
1099
+ mockShopeeFetch.mockResolvedValue(mockResponse);
1100
+ const result = await globalProductManager.getLocalAdjustmentRate({
1101
+ global_item_id: 123456,
1102
+ shop_id_list: [67890],
1103
+ });
1104
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/get_local_adjustment_rate", {
1105
+ method: "GET",
1106
+ auth: true,
1107
+ params: {
1108
+ global_item_id: 123456,
1109
+ shop_id_list: [67890],
1110
+ },
1111
+ });
1112
+ expect(result.error).toBe("");
1113
+ expect(result.response.adjustment_rate_list).toHaveLength(1);
1114
+ });
1115
+ });
1116
+ describe("updateLocalAdjustmentRate", () => {
1117
+ it("should update local adjustment rate successfully", async () => {
1118
+ const mockResponse = {
1119
+ request_id: "test-request-id",
1120
+ error: "",
1121
+ message: "",
1122
+ response: {
1123
+ result_list: [
1124
+ {
1125
+ shop_id: 67890,
1126
+ success: true,
1127
+ },
1128
+ ],
1129
+ },
1130
+ };
1131
+ mockShopeeFetch.mockResolvedValue(mockResponse);
1132
+ const result = await globalProductManager.updateLocalAdjustmentRate({
1133
+ global_item_id: 123456,
1134
+ adjustment_rate_list: [
1135
+ {
1136
+ shop_id: 67890,
1137
+ adjustment_rate: 10.5,
1138
+ },
1139
+ ],
1140
+ });
1141
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/update_local_adjustment_rate", {
1142
+ method: "POST",
1143
+ auth: true,
1144
+ body: {
1145
+ global_item_id: 123456,
1146
+ adjustment_rate_list: [
1147
+ {
1148
+ shop_id: 67890,
1149
+ adjustment_rate: 10.5,
1150
+ },
1151
+ ],
1152
+ },
1153
+ });
1154
+ expect(result.error).toBe("");
1155
+ expect(result.response.result_list[0].success).toBe(true);
1156
+ });
1157
+ });
1158
+ describe("getSizeChartList", () => {
1159
+ it("should get size chart list successfully", async () => {
1160
+ const mockResponse = {
1161
+ request_id: "test-request-id",
1162
+ error: "",
1163
+ message: "",
1164
+ response: {
1165
+ size_chart_list: [
1166
+ {
1167
+ size_chart_id: "chart123",
1168
+ size_chart_name: "Standard Size Chart",
1169
+ size_chart_table: {
1170
+ header: ["Size", "Chest"],
1171
+ rows: [["S", "90cm"]],
1172
+ },
1173
+ },
1174
+ ],
1175
+ has_next_page: false,
1176
+ next_offset: 0,
1177
+ },
1178
+ };
1179
+ mockShopeeFetch.mockResolvedValue(mockResponse);
1180
+ const result = await globalProductManager.getSizeChartList({
1181
+ page_size: 20,
1182
+ });
1183
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/get_size_chart_list", {
1184
+ method: "GET",
1185
+ auth: true,
1186
+ params: {
1187
+ page_size: 20,
1188
+ },
1189
+ });
1190
+ expect(result.error).toBe("");
1191
+ expect(result.response.size_chart_list).toHaveLength(1);
1192
+ });
1193
+ });
1194
+ describe("getSizeChartDetail", () => {
1195
+ it("should get size chart detail successfully", async () => {
1196
+ const mockResponse = {
1197
+ request_id: "test-request-id",
1198
+ error: "",
1199
+ message: "",
1200
+ response: {
1201
+ size_chart: {
1202
+ size_chart_id: "chart123",
1203
+ size_chart_name: "Standard Size Chart",
1204
+ size_chart_table: {
1205
+ header: ["Size", "Chest", "Length"],
1206
+ rows: [
1207
+ ["S", "90cm", "60cm"],
1208
+ ["M", "95cm", "65cm"],
1209
+ ],
1210
+ },
1211
+ },
1212
+ },
1213
+ };
1214
+ mockShopeeFetch.mockResolvedValue(mockResponse);
1215
+ const result = await globalProductManager.getSizeChartDetail({
1216
+ size_chart_id: "chart123",
1217
+ });
1218
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/get_size_chart_detail", {
1219
+ method: "GET",
1220
+ auth: true,
1221
+ params: {
1222
+ size_chart_id: "chart123",
1223
+ },
1224
+ });
1225
+ expect(result.error).toBe("");
1226
+ expect(result.response.size_chart.size_chart_id).toBe("chart123");
1227
+ });
1228
+ });
1229
+ describe("updateSizeChart", () => {
1230
+ it("should update size chart successfully", async () => {
1231
+ const mockResponse = {
1232
+ request_id: "test-request-id",
1233
+ error: "",
1234
+ message: "",
1235
+ };
1236
+ mockShopeeFetch.mockResolvedValue(mockResponse);
1237
+ const result = await globalProductManager.updateSizeChart({
1238
+ size_chart_id: "chart123",
1239
+ size_chart_name: "Updated Size Chart",
1240
+ });
1241
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/global_product/update_size_chart", {
1242
+ method: "POST",
1243
+ auth: true,
1244
+ body: {
1245
+ size_chart_id: "chart123",
1246
+ size_chart_name: "Updated Size Chart",
1247
+ },
1248
+ });
1249
+ expect(result.error).toBe("");
1250
+ });
1251
+ });
1252
+ });
1253
+ //# sourceMappingURL=global-product.manager.test.js.map