@congminh1254/shopee-sdk 1.6.1 → 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 +65 -3
  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 +43 -8
  123. package/lib/managers/media.manager.js +75 -7
  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 +113 -6
  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,1170 @@
1
+ import { jest } from "@jest/globals";
2
+ import { AmsManager } from "../../managers/ams.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("AmsManager", () => {
9
+ let amsManager;
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
+ amsManager = new AmsManager(mockConfig);
22
+ });
23
+ // Open Campaign APIs
24
+ describe("addAllProductsToOpenCampaign", () => {
25
+ it("should add all products to open campaign successfully", async () => {
26
+ const mockResponse = {
27
+ request_id: "test-request-id",
28
+ error: "",
29
+ message: "",
30
+ response: {
31
+ task_id: "task_123456",
32
+ },
33
+ };
34
+ mockShopeeFetch.mockResolvedValue(mockResponse);
35
+ const result = await amsManager.addAllProductsToOpenCampaign({
36
+ commission_rate: 5.5,
37
+ period_start_time: 1609459200,
38
+ period_end_time: 32503651199,
39
+ });
40
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/add_all_products_to_open_campaign", {
41
+ method: "POST",
42
+ auth: true,
43
+ body: {
44
+ commission_rate: 5.5,
45
+ period_start_time: 1609459200,
46
+ period_end_time: 32503651199,
47
+ },
48
+ });
49
+ expect(result.error).toBe("");
50
+ expect(result.response.task_id).toBe("task_123456");
51
+ });
52
+ });
53
+ describe("batchAddProductsToOpenCampaign", () => {
54
+ it("should batch add products to open campaign successfully", async () => {
55
+ const mockResponse = {
56
+ request_id: "test-request-id",
57
+ error: "",
58
+ message: "",
59
+ response: {
60
+ task_id: "task_789012",
61
+ },
62
+ };
63
+ mockShopeeFetch.mockResolvedValue(mockResponse);
64
+ const result = await amsManager.batchAddProductsToOpenCampaign({
65
+ item_id_list: [101, 102, 103],
66
+ commission_rate: 3.0,
67
+ period_start_time: 1609459200,
68
+ period_end_time: 1640995200,
69
+ });
70
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/batch_add_products_to_open_campaign", {
71
+ method: "POST",
72
+ auth: true,
73
+ body: {
74
+ item_id_list: [101, 102, 103],
75
+ commission_rate: 3.0,
76
+ period_start_time: 1609459200,
77
+ period_end_time: 1640995200,
78
+ },
79
+ });
80
+ expect(result.error).toBe("");
81
+ expect(result.response.task_id).toBe("task_789012");
82
+ });
83
+ });
84
+ describe("batchEditProductsOpenCampaignSetting", () => {
85
+ it("should batch edit products open campaign setting successfully", async () => {
86
+ const mockResponse = {
87
+ request_id: "test-request-id",
88
+ error: "",
89
+ message: "",
90
+ response: {
91
+ task_id: "task_edit_123",
92
+ },
93
+ };
94
+ mockShopeeFetch.mockResolvedValue(mockResponse);
95
+ const result = await amsManager.batchEditProductsOpenCampaignSetting({
96
+ campaign_ids: [1001, 1002],
97
+ commission_rate: 4.5,
98
+ });
99
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/batch_edit_products_open_campaign_setting", {
100
+ method: "POST",
101
+ auth: true,
102
+ body: {
103
+ campaign_ids: [1001, 1002],
104
+ commission_rate: 4.5,
105
+ },
106
+ });
107
+ expect(result.error).toBe("");
108
+ });
109
+ });
110
+ describe("batchGetProductsSuggestedRate", () => {
111
+ it("should get suggested rates for products successfully", async () => {
112
+ const mockResponse = {
113
+ request_id: "test-request-id",
114
+ error: "",
115
+ message: "",
116
+ response: {
117
+ item_list: [
118
+ { item_id: 101, suggested_rate: 5.0 },
119
+ { item_id: 102, suggested_rate: 6.5 },
120
+ ],
121
+ },
122
+ };
123
+ mockShopeeFetch.mockResolvedValue(mockResponse);
124
+ const result = await amsManager.batchGetProductsSuggestedRate({
125
+ item_id_list: "101,102",
126
+ });
127
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/batch_get_products_suggested_rate", {
128
+ method: "GET",
129
+ auth: true,
130
+ params: { item_id_list: "101,102" },
131
+ });
132
+ expect(result.error).toBe("");
133
+ expect(result.response.item_list).toHaveLength(2);
134
+ });
135
+ });
136
+ describe("batchRemoveProductsOpenCampaignSetting", () => {
137
+ it("should batch remove products from open campaign successfully", async () => {
138
+ const mockResponse = {
139
+ request_id: "test-request-id",
140
+ error: "",
141
+ message: "",
142
+ response: {
143
+ task_id: "task_remove_456",
144
+ },
145
+ };
146
+ mockShopeeFetch.mockResolvedValue(mockResponse);
147
+ const result = await amsManager.batchRemoveProductsOpenCampaignSetting({
148
+ campaign_ids: [1001, 1002],
149
+ });
150
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/batch_remove_products_open_campaign_setting", {
151
+ method: "POST",
152
+ auth: true,
153
+ body: { campaign_ids: [1001, 1002] },
154
+ });
155
+ expect(result.error).toBe("");
156
+ });
157
+ });
158
+ describe("editAllProductsOpenCampaignSetting", () => {
159
+ it("should edit all products open campaign setting successfully", async () => {
160
+ const mockResponse = {
161
+ request_id: "test-request-id",
162
+ error: "",
163
+ message: "",
164
+ response: {
165
+ task_id: "task_edit_all_789",
166
+ },
167
+ };
168
+ mockShopeeFetch.mockResolvedValue(mockResponse);
169
+ const result = await amsManager.editAllProductsOpenCampaignSetting({
170
+ commission_rate: 7.0,
171
+ period_end_time: 1672531199,
172
+ });
173
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/edit_all_products_open_campaign_setting", {
174
+ method: "POST",
175
+ auth: true,
176
+ body: {
177
+ commission_rate: 7.0,
178
+ period_end_time: 1672531199,
179
+ },
180
+ });
181
+ expect(result.error).toBe("");
182
+ });
183
+ });
184
+ describe("getOpenCampaignAddedProduct", () => {
185
+ it("should get open campaign added products successfully", async () => {
186
+ const mockResponse = {
187
+ request_id: "test-request-id",
188
+ error: "",
189
+ message: "",
190
+ response: {
191
+ total_count: 2,
192
+ next_cursor: "cursor_abc",
193
+ has_more: true,
194
+ item_list: [
195
+ {
196
+ item_id: 101,
197
+ campaign_id: 1001,
198
+ commission_rate: 5.0,
199
+ period_start_time: 1609459200,
200
+ period_end_time: 32503651199,
201
+ },
202
+ {
203
+ item_id: 102,
204
+ campaign_id: 1002,
205
+ commission_rate: 6.0,
206
+ period_start_time: 1609459200,
207
+ period_end_time: 32503651199,
208
+ },
209
+ ],
210
+ },
211
+ };
212
+ mockShopeeFetch.mockResolvedValue(mockResponse);
213
+ const result = await amsManager.getOpenCampaignAddedProduct({
214
+ page_size: 20,
215
+ });
216
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/get_open_campaign_added_product", {
217
+ method: "GET",
218
+ auth: true,
219
+ params: { page_size: 20 },
220
+ });
221
+ expect(result.error).toBe("");
222
+ expect(result.response.item_list).toHaveLength(2);
223
+ expect(result.response.has_more).toBe(true);
224
+ });
225
+ });
226
+ describe("getOpenCampaignBatchTaskResult", () => {
227
+ it("should get batch task result successfully", async () => {
228
+ const mockResponse = {
229
+ request_id: "test-request-id",
230
+ error: "",
231
+ message: "",
232
+ response: {
233
+ status: "completed",
234
+ success_count: 10,
235
+ fail_count: 2,
236
+ fail_item_id_list: [103, 104],
237
+ },
238
+ };
239
+ mockShopeeFetch.mockResolvedValue(mockResponse);
240
+ const result = await amsManager.getOpenCampaignBatchTaskResult({
241
+ task_id: "task_123456",
242
+ });
243
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/get_open_campaign_batch_task_result", {
244
+ method: "GET",
245
+ auth: true,
246
+ params: { task_id: "task_123456" },
247
+ });
248
+ expect(result.error).toBe("");
249
+ expect(result.response.status).toBe("completed");
250
+ });
251
+ });
252
+ describe("getOpenCampaignNotAddedProduct", () => {
253
+ it("should get not added products successfully", async () => {
254
+ const mockResponse = {
255
+ request_id: "test-request-id",
256
+ error: "",
257
+ message: "",
258
+ response: {
259
+ total_count: 5,
260
+ next_cursor: "",
261
+ has_more: false,
262
+ item_list: [{ item_id: 201, item_name: "Product A", suggested_rate: 4.5 }],
263
+ },
264
+ };
265
+ mockShopeeFetch.mockResolvedValue(mockResponse);
266
+ const result = await amsManager.getOpenCampaignNotAddedProduct({
267
+ page_size: 10,
268
+ });
269
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/get_open_campaign_not_added_product", {
270
+ method: "GET",
271
+ auth: true,
272
+ params: { page_size: 10 },
273
+ });
274
+ expect(result.error).toBe("");
275
+ });
276
+ });
277
+ describe("getOpenCampaignPerformance", () => {
278
+ it("should get open campaign performance successfully", async () => {
279
+ const mockResponse = {
280
+ request_id: "test-request-id",
281
+ error: "",
282
+ message: "",
283
+ response: {
284
+ total_count: 1,
285
+ data_list: [
286
+ {
287
+ item_id: 101,
288
+ sales: "1500.00",
289
+ orders: 30,
290
+ est_commission: "75.00",
291
+ clicks: 500,
292
+ },
293
+ ],
294
+ },
295
+ };
296
+ mockShopeeFetch.mockResolvedValue(mockResponse);
297
+ const result = await amsManager.getOpenCampaignPerformance({
298
+ period_type: "Last30d",
299
+ start_date: "20250101",
300
+ end_date: "20250131",
301
+ });
302
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/get_open_campaign_performance", {
303
+ method: "GET",
304
+ auth: true,
305
+ params: {
306
+ period_type: "Last30d",
307
+ start_date: "20250101",
308
+ end_date: "20250131",
309
+ },
310
+ });
311
+ expect(result.error).toBe("");
312
+ });
313
+ });
314
+ describe("removeAllProductsOpenCampaignSetting", () => {
315
+ it("should remove all products from open campaign successfully", async () => {
316
+ const mockResponse = {
317
+ request_id: "test-request-id",
318
+ error: "",
319
+ message: "",
320
+ response: {
321
+ task_id: "task_remove_all",
322
+ },
323
+ };
324
+ mockShopeeFetch.mockResolvedValue(mockResponse);
325
+ const result = await amsManager.removeAllProductsOpenCampaignSetting();
326
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/remove_all_products_open_campaign_setting", {
327
+ method: "POST",
328
+ auth: true,
329
+ body: {},
330
+ });
331
+ expect(result.error).toBe("");
332
+ });
333
+ });
334
+ // Targeted Campaign APIs
335
+ describe("createNewTargetedCampaign", () => {
336
+ it("should create a new targeted campaign successfully", async () => {
337
+ const mockResponse = {
338
+ request_id: "test-request-id",
339
+ error: "",
340
+ message: "",
341
+ response: {
342
+ campaign_id: 12345,
343
+ fail_item_list: [],
344
+ fail_affiliate_list: [],
345
+ },
346
+ };
347
+ mockShopeeFetch.mockResolvedValue(mockResponse);
348
+ const result = await amsManager.createNewTargetedCampaign({
349
+ campaign_name: "Summer Sale Campaign",
350
+ period_start_time: 1609459200,
351
+ period_end_time: 32503651199,
352
+ is_set_budget: true,
353
+ budget: 500000,
354
+ seller_message: "Hello, pleasant cooperation.",
355
+ item_list: [{ item_id: 101, rate: 5.5 }],
356
+ affiliate_list: [{ affiliate_id: 11301234567 }],
357
+ });
358
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/create_new_targeted_campaign", {
359
+ method: "POST",
360
+ auth: true,
361
+ body: {
362
+ campaign_name: "Summer Sale Campaign",
363
+ period_start_time: 1609459200,
364
+ period_end_time: 32503651199,
365
+ is_set_budget: true,
366
+ budget: 500000,
367
+ seller_message: "Hello, pleasant cooperation.",
368
+ item_list: [{ item_id: 101, rate: 5.5 }],
369
+ affiliate_list: [{ affiliate_id: 11301234567 }],
370
+ },
371
+ });
372
+ expect(result.error).toBe("");
373
+ expect(result.response.campaign_id).toBe(12345);
374
+ });
375
+ });
376
+ describe("editAffiliateListOfTargetedCampaign", () => {
377
+ it("should edit affiliate list of targeted campaign successfully", async () => {
378
+ const mockResponse = {
379
+ request_id: "test-request-id",
380
+ error: "",
381
+ message: "",
382
+ response: {
383
+ campaign_id: 12345,
384
+ fail_affiliate_list: [],
385
+ },
386
+ };
387
+ mockShopeeFetch.mockResolvedValue(mockResponse);
388
+ const result = await amsManager.editAffiliateListOfTargetedCampaign({
389
+ campaign_id: 12345,
390
+ edit_type: "add",
391
+ affiliate_list: [{ affiliate_id: 11301234568 }],
392
+ });
393
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/edit_affiliate_list_of_targeted_campaign", {
394
+ method: "POST",
395
+ auth: true,
396
+ body: {
397
+ campaign_id: 12345,
398
+ edit_type: "add",
399
+ affiliate_list: [{ affiliate_id: 11301234568 }],
400
+ },
401
+ });
402
+ expect(result.error).toBe("");
403
+ });
404
+ });
405
+ describe("editProductListOfTargetedCampaign", () => {
406
+ it("should edit product list of targeted campaign successfully", async () => {
407
+ const mockResponse = {
408
+ request_id: "test-request-id",
409
+ error: "",
410
+ message: "",
411
+ response: {
412
+ campaign_id: 12345,
413
+ fail_item_list: [],
414
+ },
415
+ };
416
+ mockShopeeFetch.mockResolvedValue(mockResponse);
417
+ const result = await amsManager.editProductListOfTargetedCampaign({
418
+ campaign_id: 12345,
419
+ edit_type: "add",
420
+ item_list: [{ item_id: 102, rate: 6.0 }],
421
+ });
422
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/edit_product_list_of_targeted_campaign", {
423
+ method: "POST",
424
+ auth: true,
425
+ body: {
426
+ campaign_id: 12345,
427
+ edit_type: "add",
428
+ item_list: [{ item_id: 102, rate: 6.0 }],
429
+ },
430
+ });
431
+ expect(result.error).toBe("");
432
+ });
433
+ });
434
+ describe("getTargetedCampaignAddableProductList", () => {
435
+ it("should get addable product list successfully", async () => {
436
+ const mockResponse = {
437
+ request_id: "test-request-id",
438
+ error: "",
439
+ message: "",
440
+ response: {
441
+ total_count: 10,
442
+ next_cursor: "cursor_xyz",
443
+ has_more: true,
444
+ item_list: [{ item_id: 301, item_name: "Product X", suggested_rate: 5.0 }],
445
+ },
446
+ };
447
+ mockShopeeFetch.mockResolvedValue(mockResponse);
448
+ const result = await amsManager.getTargetedCampaignAddableProductList({
449
+ page_size: 20,
450
+ });
451
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/get_targeted_campaign_addable_product_list", {
452
+ method: "GET",
453
+ auth: true,
454
+ params: { page_size: 20 },
455
+ });
456
+ expect(result.error).toBe("");
457
+ });
458
+ });
459
+ describe("getTargetedCampaignList", () => {
460
+ it("should get targeted campaign list successfully", async () => {
461
+ const mockResponse = {
462
+ request_id: "test-request-id",
463
+ error: "",
464
+ message: "",
465
+ response: {
466
+ total_count: 2,
467
+ has_more: false,
468
+ campaign_list: [
469
+ {
470
+ campaign_id: 12345,
471
+ campaign_name: "Summer Sale",
472
+ campaign_status: "active",
473
+ period_start_time: 1609459200,
474
+ period_end_time: 32503651199,
475
+ is_set_budget: true,
476
+ budget: 500000,
477
+ create_time: 1609459200,
478
+ update_time: 1609459200,
479
+ },
480
+ ],
481
+ },
482
+ };
483
+ mockShopeeFetch.mockResolvedValue(mockResponse);
484
+ const result = await amsManager.getTargetedCampaignList();
485
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/get_targeted_campaign_list", {
486
+ method: "GET",
487
+ auth: true,
488
+ params: {},
489
+ });
490
+ expect(result.error).toBe("");
491
+ expect(result.response.campaign_list).toHaveLength(1);
492
+ });
493
+ });
494
+ describe("getTargetedCampaignPerformance", () => {
495
+ it("should get targeted campaign performance successfully", async () => {
496
+ const mockResponse = {
497
+ request_id: "test-request-id",
498
+ error: "",
499
+ message: "",
500
+ response: {
501
+ total_count: 1,
502
+ data_list: [
503
+ {
504
+ campaign_id: 12345,
505
+ sales: "5000.00",
506
+ orders: 100,
507
+ est_commission: "250.00",
508
+ clicks: 2000,
509
+ },
510
+ ],
511
+ },
512
+ };
513
+ mockShopeeFetch.mockResolvedValue(mockResponse);
514
+ const result = await amsManager.getTargetedCampaignPerformance({
515
+ period_type: "Last30d",
516
+ start_date: "20250101",
517
+ end_date: "20250131",
518
+ });
519
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/get_targeted_campaign_performance", {
520
+ method: "GET",
521
+ auth: true,
522
+ params: {
523
+ period_type: "Last30d",
524
+ start_date: "20250101",
525
+ end_date: "20250131",
526
+ },
527
+ });
528
+ expect(result.error).toBe("");
529
+ });
530
+ });
531
+ describe("getTargetedCampaignSettings", () => {
532
+ it("should get targeted campaign settings successfully", async () => {
533
+ const mockResponse = {
534
+ request_id: "test-request-id",
535
+ error: "",
536
+ message: "",
537
+ response: {
538
+ campaign_id: 12345,
539
+ campaign_name: "Summer Sale",
540
+ campaign_status: "active",
541
+ period_start_time: 1609459200,
542
+ period_end_time: 32503651199,
543
+ is_set_budget: true,
544
+ budget: 500000,
545
+ seller_message: "Hello!",
546
+ item_list: [{ item_id: 101, rate: 5.5 }],
547
+ affiliate_list: [{ affiliate_id: 11301234567 }],
548
+ },
549
+ };
550
+ mockShopeeFetch.mockResolvedValue(mockResponse);
551
+ const result = await amsManager.getTargetedCampaignSettings({
552
+ campaign_id: 12345,
553
+ });
554
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/get_targeted_campaign_settings", {
555
+ method: "GET",
556
+ auth: true,
557
+ params: { campaign_id: 12345 },
558
+ });
559
+ expect(result.error).toBe("");
560
+ expect(result.response.campaign_name).toBe("Summer Sale");
561
+ });
562
+ });
563
+ describe("terminateTargetedCampaign", () => {
564
+ it("should terminate targeted campaign successfully", async () => {
565
+ const mockResponse = {
566
+ request_id: "test-request-id",
567
+ error: "",
568
+ message: "",
569
+ response: {
570
+ campaign_id: 12345,
571
+ },
572
+ };
573
+ mockShopeeFetch.mockResolvedValue(mockResponse);
574
+ const result = await amsManager.terminateTargetedCampaign({
575
+ campaign_id: 12345,
576
+ });
577
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/terminate_targeted_campaign", {
578
+ method: "POST",
579
+ auth: true,
580
+ body: { campaign_id: 12345 },
581
+ });
582
+ expect(result.error).toBe("");
583
+ });
584
+ });
585
+ describe("updateBasicInfoOfTargetedCampaign", () => {
586
+ it("should update basic info of targeted campaign successfully", async () => {
587
+ const mockResponse = {
588
+ request_id: "test-request-id",
589
+ error: "",
590
+ message: "",
591
+ response: {
592
+ campaign_id: 12345,
593
+ },
594
+ };
595
+ mockShopeeFetch.mockResolvedValue(mockResponse);
596
+ const result = await amsManager.updateBasicInfoOfTargetedCampaign({
597
+ campaign_id: 12345,
598
+ campaign_name: "Updated Campaign Name",
599
+ budget: 600000,
600
+ });
601
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/update_basic_info_of_targeted_campaign", {
602
+ method: "POST",
603
+ auth: true,
604
+ body: {
605
+ campaign_id: 12345,
606
+ campaign_name: "Updated Campaign Name",
607
+ budget: 600000,
608
+ },
609
+ });
610
+ expect(result.error).toBe("");
611
+ });
612
+ });
613
+ // Performance & Analytics APIs
614
+ describe("getAffiliatePerformance", () => {
615
+ it("should get affiliate performance successfully", async () => {
616
+ const mockResponse = {
617
+ request_id: "test-request-id",
618
+ error: "",
619
+ message: "",
620
+ response: {
621
+ total_count: 1,
622
+ data_list: [
623
+ {
624
+ affiliate_id: 11301234567,
625
+ affiliate_name: "Top Affiliate",
626
+ sales: "10000.00",
627
+ orders: 200,
628
+ est_commission: "500.00",
629
+ clicks: 5000,
630
+ },
631
+ ],
632
+ },
633
+ };
634
+ mockShopeeFetch.mockResolvedValue(mockResponse);
635
+ const result = await amsManager.getAffiliatePerformance({
636
+ period_type: "Last30d",
637
+ start_date: "20250101",
638
+ end_date: "20250131",
639
+ });
640
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/get_affiliate_performance", {
641
+ method: "GET",
642
+ auth: true,
643
+ params: {
644
+ period_type: "Last30d",
645
+ start_date: "20250101",
646
+ end_date: "20250131",
647
+ },
648
+ });
649
+ expect(result.error).toBe("");
650
+ });
651
+ });
652
+ describe("getAutoAddNewProductToggleStatus", () => {
653
+ it("should get auto add new product toggle status successfully", async () => {
654
+ const mockResponse = {
655
+ request_id: "test-request-id",
656
+ error: "",
657
+ message: "",
658
+ response: {
659
+ open: true,
660
+ commission_rate: 5.0,
661
+ },
662
+ };
663
+ mockShopeeFetch.mockResolvedValue(mockResponse);
664
+ const result = await amsManager.getAutoAddNewProductToggleStatus();
665
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/get_auto_add_new_product_toggle_status", {
666
+ method: "GET",
667
+ auth: true,
668
+ });
669
+ expect(result.error).toBe("");
670
+ expect(result.response.open).toBe(true);
671
+ });
672
+ });
673
+ describe("getCampaignKeyMetricsPerformance", () => {
674
+ it("should get campaign key metrics performance successfully", async () => {
675
+ const mockResponse = {
676
+ request_id: "test-request-id",
677
+ error: "",
678
+ message: "",
679
+ response: {
680
+ sales: "50000.00",
681
+ orders: 1000,
682
+ est_commission: "2500.00",
683
+ clicks: 20000,
684
+ roi: "20.0",
685
+ },
686
+ };
687
+ mockShopeeFetch.mockResolvedValue(mockResponse);
688
+ const result = await amsManager.getCampaignKeyMetricsPerformance({
689
+ period_type: "Last30d",
690
+ start_date: "20250101",
691
+ end_date: "20250131",
692
+ });
693
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/get_campaign_key_metrics_performance", {
694
+ method: "GET",
695
+ auth: true,
696
+ params: {
697
+ period_type: "Last30d",
698
+ start_date: "20250101",
699
+ end_date: "20250131",
700
+ },
701
+ });
702
+ expect(result.error).toBe("");
703
+ });
704
+ });
705
+ describe("getContentPerformance", () => {
706
+ it("should get content performance successfully", async () => {
707
+ const mockResponse = {
708
+ request_id: "test-request-id",
709
+ error: "",
710
+ message: "",
711
+ response: {
712
+ total_count: 1,
713
+ data_list: [
714
+ {
715
+ content_id: 12345,
716
+ content_type: "video",
717
+ sales: "3000.00",
718
+ orders: 50,
719
+ est_commission: "150.00",
720
+ clicks: 1000,
721
+ },
722
+ ],
723
+ },
724
+ };
725
+ mockShopeeFetch.mockResolvedValue(mockResponse);
726
+ const result = await amsManager.getContentPerformance({
727
+ period_type: "Last7d",
728
+ start_date: "20250120",
729
+ end_date: "20250127",
730
+ order_type: 2,
731
+ channel: "custom",
732
+ affiliate_id: "aff_123",
733
+ item_id: 456,
734
+ });
735
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/get_content_performance", {
736
+ method: "GET",
737
+ auth: true,
738
+ params: {
739
+ period_type: "Last7d",
740
+ start_date: "20250120",
741
+ end_date: "20250127",
742
+ order_type: 2,
743
+ channel: "custom",
744
+ affiliate_id: "aff_123",
745
+ item_id: 456,
746
+ },
747
+ });
748
+ expect(result.error).toBe("");
749
+ });
750
+ });
751
+ describe("getConversionReport", () => {
752
+ it("should get conversion report successfully", async () => {
753
+ const mockResponse = {
754
+ request_id: "test-request-id",
755
+ error: "",
756
+ message: "",
757
+ response: {
758
+ total_count: 1,
759
+ data_list: [
760
+ {
761
+ order_sn: "ORDER123456",
762
+ item_id: 101,
763
+ affiliate_id: 11301234567,
764
+ commission: "25.00",
765
+ order_time: 1609459200,
766
+ order_status: "completed",
767
+ },
768
+ ],
769
+ },
770
+ };
771
+ mockShopeeFetch.mockResolvedValue(mockResponse);
772
+ const result = await amsManager.getConversionReport({
773
+ item_name: "Awesome Item",
774
+ order_status: 3,
775
+ attr_campaign_id: "campaign_xyz",
776
+ });
777
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/get_conversion_report", {
778
+ method: "GET",
779
+ auth: true,
780
+ params: {
781
+ item_name: "Awesome Item",
782
+ order_status: 3,
783
+ attr_campaign_id: "campaign_xyz",
784
+ },
785
+ });
786
+ expect(result.error).toBe("");
787
+ });
788
+ });
789
+ describe("getManagedAffiliateList", () => {
790
+ it("should get managed affiliate list successfully", async () => {
791
+ const mockResponse = {
792
+ request_id: "test-request-id",
793
+ error: "",
794
+ message: "",
795
+ response: {
796
+ total_count: 2,
797
+ affiliate_list: [
798
+ { affiliate_id: 11301234567, affiliate_name: "Affiliate A", status: "active" },
799
+ { affiliate_id: 11301234568, affiliate_name: "Affiliate B", status: "active" },
800
+ ],
801
+ },
802
+ };
803
+ mockShopeeFetch.mockResolvedValue(mockResponse);
804
+ const result = await amsManager.getManagedAffiliateList();
805
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/get_managed_affiliate_list", {
806
+ method: "GET",
807
+ auth: true,
808
+ params: {},
809
+ });
810
+ expect(result.error).toBe("");
811
+ });
812
+ });
813
+ describe("getOptimizationSuggestionProduct", () => {
814
+ it("should get optimization suggestion products successfully", async () => {
815
+ const mockResponse = {
816
+ request_id: "test-request-id",
817
+ error: "",
818
+ message: "",
819
+ response: {
820
+ total_count: 1,
821
+ item_list: [
822
+ {
823
+ item_id: 101,
824
+ item_name: "Product A",
825
+ current_rate: 3.0,
826
+ suggested_rate: 5.0,
827
+ rcmd_reason: "high_conversion",
828
+ },
829
+ ],
830
+ },
831
+ };
832
+ mockShopeeFetch.mockResolvedValue(mockResponse);
833
+ const result = await amsManager.getOptimizationSuggestionProduct();
834
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/get_optimization_suggestion_product", {
835
+ method: "GET",
836
+ auth: true,
837
+ params: {},
838
+ });
839
+ expect(result.error).toBe("");
840
+ });
841
+ });
842
+ describe("getPerformanceDataUpdateTime", () => {
843
+ it("should get performance data update time successfully", async () => {
844
+ const mockResponse = {
845
+ request_id: "test-request-id",
846
+ error: "",
847
+ message: "",
848
+ response: {
849
+ latest_data_date: "20250126",
850
+ },
851
+ };
852
+ mockShopeeFetch.mockResolvedValue(mockResponse);
853
+ const result = await amsManager.getPerformanceDataUpdateTime({
854
+ marker_type: "AmsMarker",
855
+ });
856
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/get_performance_data_update_time", {
857
+ method: "GET",
858
+ auth: true,
859
+ params: { marker_type: "AmsMarker" },
860
+ });
861
+ expect(result.error).toBe("");
862
+ });
863
+ });
864
+ describe("getProductPerformance", () => {
865
+ it("should get product performance successfully", async () => {
866
+ const mockResponse = {
867
+ request_id: "test-request-id",
868
+ error: "",
869
+ message: "",
870
+ response: {
871
+ total_count: 1,
872
+ data_list: [
873
+ {
874
+ item_id: 101,
875
+ item_name: "Product A",
876
+ sales: "8000.00",
877
+ orders: 150,
878
+ est_commission: "400.00",
879
+ clicks: 3000,
880
+ },
881
+ ],
882
+ },
883
+ };
884
+ mockShopeeFetch.mockResolvedValue(mockResponse);
885
+ const result = await amsManager.getProductPerformance({
886
+ period_type: "Last30d",
887
+ start_date: "20250101",
888
+ end_date: "20250131",
889
+ order_type: 1,
890
+ channel: "livestream",
891
+ item_id: 789,
892
+ });
893
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/get_product_performance", {
894
+ method: "GET",
895
+ auth: true,
896
+ params: {
897
+ period_type: "Last30d",
898
+ start_date: "20250101",
899
+ end_date: "20250131",
900
+ order_type: 1,
901
+ channel: "livestream",
902
+ item_id: 789,
903
+ },
904
+ });
905
+ expect(result.error).toBe("");
906
+ });
907
+ });
908
+ describe("getRecommendedAffiliateList", () => {
909
+ it("should get recommended affiliate list successfully", async () => {
910
+ const mockResponse = {
911
+ request_id: "test-request-id",
912
+ error: "",
913
+ message: "",
914
+ response: {
915
+ affiliate_list: [
916
+ {
917
+ affiliate_id: 11301234569,
918
+ affiliate_name: "Recommended Affiliate",
919
+ rcmd_reason: "high_performance",
920
+ },
921
+ ],
922
+ },
923
+ };
924
+ mockShopeeFetch.mockResolvedValue(mockResponse);
925
+ const result = await amsManager.getRecommendedAffiliateList();
926
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/get_recommended_affiliate_list", {
927
+ method: "GET",
928
+ auth: true,
929
+ params: {},
930
+ });
931
+ expect(result.error).toBe("");
932
+ });
933
+ });
934
+ describe("getShopPerformance", () => {
935
+ it("should get shop performance successfully", async () => {
936
+ const mockResponse = {
937
+ request_id: "test-request-id",
938
+ error: "",
939
+ message: "",
940
+ response: {
941
+ sales: "15000.00",
942
+ gross_item_sold: 9684221,
943
+ orders: 68,
944
+ clicks: 1564852,
945
+ est_commission: "2000.00",
946
+ roi: "18.8",
947
+ total_buyers: 894,
948
+ new_buyers: 260,
949
+ fetched_date_range: "20250101-20250131",
950
+ },
951
+ };
952
+ mockShopeeFetch.mockResolvedValue(mockResponse);
953
+ const result = await amsManager.getShopPerformance({
954
+ period_type: "Last30d",
955
+ start_date: "20250101",
956
+ end_date: "20250131",
957
+ order_type: "ConfirmedOrder",
958
+ channel: "AllChannel",
959
+ });
960
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/get_shop_performance", {
961
+ method: "GET",
962
+ auth: true,
963
+ params: {
964
+ period_type: "Last30d",
965
+ start_date: "20250101",
966
+ end_date: "20250131",
967
+ order_type: "ConfirmedOrder",
968
+ channel: "AllChannel",
969
+ },
970
+ });
971
+ expect(result.error).toBe("");
972
+ });
973
+ });
974
+ describe("getShopSuggestedRate", () => {
975
+ it("should get shop suggested rate successfully", async () => {
976
+ const mockResponse = {
977
+ request_id: "test-request-id",
978
+ error: "",
979
+ message: "",
980
+ response: {
981
+ suggested_rate: 5.0,
982
+ min_rate: 1.0,
983
+ max_rate: 10.0,
984
+ },
985
+ };
986
+ mockShopeeFetch.mockResolvedValue(mockResponse);
987
+ const result = await amsManager.getShopSuggestedRate();
988
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/get_shop_suggested_rate", {
989
+ method: "GET",
990
+ auth: true,
991
+ });
992
+ expect(result.error).toBe("");
993
+ expect(result.response.suggested_rate).toBe(5.0);
994
+ });
995
+ });
996
+ // Validation APIs
997
+ describe("getValidationList", () => {
998
+ it("should get validation list successfully", async () => {
999
+ const mockResponse = {
1000
+ request_id: "test-request-id",
1001
+ error: "",
1002
+ message: "",
1003
+ response: {
1004
+ validation_list: [
1005
+ { validation_id: 1, validation_month: "202501", status: "completed" },
1006
+ { validation_id: 2, validation_month: "202502", status: "pending" },
1007
+ ],
1008
+ },
1009
+ };
1010
+ mockShopeeFetch.mockResolvedValue(mockResponse);
1011
+ const result = await amsManager.getValidationList();
1012
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/get_validation_list", {
1013
+ method: "GET",
1014
+ auth: true,
1015
+ });
1016
+ expect(result.error).toBe("");
1017
+ });
1018
+ });
1019
+ describe("getValidationReport", () => {
1020
+ it("should get validation report successfully", async () => {
1021
+ const mockResponse = {
1022
+ request_id: "test-request-id",
1023
+ error: "",
1024
+ message: "",
1025
+ response: {
1026
+ total_count: 1,
1027
+ data_list: [
1028
+ {
1029
+ order_sn: "ORDER123456",
1030
+ item_id: 101,
1031
+ affiliate_id: 11301234567,
1032
+ validated_commission: "25.00",
1033
+ validation_status: "approved",
1034
+ },
1035
+ ],
1036
+ },
1037
+ };
1038
+ mockShopeeFetch.mockResolvedValue(mockResponse);
1039
+ const result = await amsManager.getValidationReport({
1040
+ order_sn: "ORDER999",
1041
+ item_id: 111,
1042
+ });
1043
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/get_validation_report", {
1044
+ method: "GET",
1045
+ auth: true,
1046
+ params: {
1047
+ order_sn: "ORDER999",
1048
+ item_id: 111,
1049
+ },
1050
+ });
1051
+ expect(result.error).toBe("");
1052
+ });
1053
+ });
1054
+ // Query APIs
1055
+ describe("queryAffiliateList", () => {
1056
+ it("should query affiliate list by ID successfully", async () => {
1057
+ const mockResponse = {
1058
+ request_id: "test-request-id",
1059
+ error: "",
1060
+ message: "",
1061
+ response: {
1062
+ affiliate_list: [
1063
+ {
1064
+ affiliate_id: 11301234567,
1065
+ affiliate_name: "Affiliate A",
1066
+ avatar_url: "https://example.com/avatar.jpg",
1067
+ },
1068
+ ],
1069
+ },
1070
+ };
1071
+ mockShopeeFetch.mockResolvedValue(mockResponse);
1072
+ const result = await amsManager.queryAffiliateList({
1073
+ query_type: "id",
1074
+ affiliate_id_list: "11301234567",
1075
+ });
1076
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/query_affiliate_list", {
1077
+ method: "GET",
1078
+ auth: true,
1079
+ params: {
1080
+ query_type: "id",
1081
+ affiliate_id_list: "11301234567",
1082
+ },
1083
+ });
1084
+ expect(result.error).toBe("");
1085
+ });
1086
+ it("should query affiliate list by name successfully", async () => {
1087
+ const mockResponse = {
1088
+ request_id: "test-request-id",
1089
+ error: "",
1090
+ message: "",
1091
+ response: {
1092
+ affiliate_list: [
1093
+ {
1094
+ affiliate_id: 11301234567,
1095
+ affiliate_name: "Affiliate A",
1096
+ },
1097
+ ],
1098
+ },
1099
+ };
1100
+ mockShopeeFetch.mockResolvedValue(mockResponse);
1101
+ const result = await amsManager.queryAffiliateList({
1102
+ query_type: "name",
1103
+ name: "Affiliate",
1104
+ });
1105
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/query_affiliate_list", {
1106
+ method: "GET",
1107
+ auth: true,
1108
+ params: {
1109
+ query_type: "name",
1110
+ name: "Affiliate",
1111
+ },
1112
+ });
1113
+ expect(result.error).toBe("");
1114
+ });
1115
+ });
1116
+ // Settings APIs
1117
+ describe("updateAutoAddNewProductSetting", () => {
1118
+ it("should update auto add new product setting successfully", async () => {
1119
+ const mockResponse = {
1120
+ request_id: "test-request-id",
1121
+ error: "",
1122
+ message: "",
1123
+ response: {},
1124
+ };
1125
+ mockShopeeFetch.mockResolvedValue(mockResponse);
1126
+ const result = await amsManager.updateAutoAddNewProductSetting({
1127
+ open: true,
1128
+ commission_rate: 5.0,
1129
+ });
1130
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/update_auto_add_new_product_setting", {
1131
+ method: "POST",
1132
+ auth: true,
1133
+ body: {
1134
+ open: true,
1135
+ commission_rate: 5.0,
1136
+ },
1137
+ });
1138
+ expect(result.error).toBe("");
1139
+ });
1140
+ it("should disable auto add new product setting successfully", async () => {
1141
+ const mockResponse = {
1142
+ request_id: "test-request-id",
1143
+ error: "",
1144
+ message: "",
1145
+ response: {},
1146
+ };
1147
+ mockShopeeFetch.mockResolvedValue(mockResponse);
1148
+ const result = await amsManager.updateAutoAddNewProductSetting({
1149
+ open: false,
1150
+ });
1151
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/ams/update_auto_add_new_product_setting", {
1152
+ method: "POST",
1153
+ auth: true,
1154
+ body: {
1155
+ open: false,
1156
+ },
1157
+ });
1158
+ expect(result.error).toBe("");
1159
+ });
1160
+ });
1161
+ describe("Default Params Coverage", () => {
1162
+ it("should cover AmsManager methods with default parameters", async () => {
1163
+ mockShopeeFetch.mockResolvedValue({ response: {} });
1164
+ await amsManager.getConversionReport(undefined);
1165
+ await amsManager.getValidationReport(undefined);
1166
+ expect(mockShopeeFetch).toHaveBeenCalledTimes(2);
1167
+ });
1168
+ });
1169
+ });
1170
+ //# sourceMappingURL=ams.manager.test.js.map