@congminh1254/shopee-sdk 1.8.0 → 1.10.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.
- package/README.md +48 -10
- package/lib/__tests__/integration/bundle-deal.integration.test.d.ts +1 -0
- package/lib/__tests__/integration/bundle-deal.integration.test.js +75 -0
- package/lib/__tests__/integration/bundle-deal.integration.test.js.map +1 -0
- package/lib/__tests__/integration/discount.integration.test.d.ts +1 -0
- package/lib/__tests__/integration/discount.integration.test.js +86 -0
- package/lib/__tests__/integration/discount.integration.test.js.map +1 -0
- package/lib/__tests__/integration/document.integration.test.d.ts +1 -0
- package/lib/__tests__/integration/document.integration.test.js +35 -0
- package/lib/__tests__/integration/document.integration.test.js.map +1 -0
- package/lib/__tests__/integration/follow-prize.integration.test.d.ts +1 -0
- package/lib/__tests__/integration/follow-prize.integration.test.js +95 -0
- package/lib/__tests__/integration/follow-prize.integration.test.js.map +1 -0
- package/lib/__tests__/integration/media.integration.test.d.ts +1 -0
- package/lib/__tests__/integration/media.integration.test.js +119 -0
- package/lib/__tests__/integration/media.integration.test.js.map +1 -0
- package/lib/__tests__/integration/order.integration.test.d.ts +1 -0
- package/lib/__tests__/integration/order.integration.test.js +25 -0
- package/lib/__tests__/integration/order.integration.test.js.map +1 -0
- package/lib/__tests__/integration/payment.integration.test.d.ts +1 -0
- package/lib/__tests__/integration/payment.integration.test.js +56 -0
- package/lib/__tests__/integration/payment.integration.test.js.map +1 -0
- package/lib/__tests__/integration/product.integration.test.d.ts +1 -0
- package/lib/__tests__/integration/product.integration.test.js +191 -0
- package/lib/__tests__/integration/product.integration.test.js.map +1 -0
- package/lib/__tests__/integration/public.integration.test.d.ts +1 -0
- package/lib/__tests__/integration/public.integration.test.js +27 -0
- package/lib/__tests__/integration/public.integration.test.js.map +1 -0
- package/lib/__tests__/integration/setup.d.ts +6 -0
- package/lib/__tests__/integration/setup.js +51 -0
- package/lib/__tests__/integration/setup.js.map +1 -0
- package/lib/__tests__/integration/shop-category.integration.test.d.ts +1 -0
- package/lib/__tests__/integration/shop-category.integration.test.js +53 -0
- package/lib/__tests__/integration/shop-category.integration.test.js.map +1 -0
- package/lib/__tests__/integration/shop.integration.test.d.ts +1 -0
- package/lib/__tests__/integration/shop.integration.test.js +23 -0
- package/lib/__tests__/integration/shop.integration.test.js.map +1 -0
- package/lib/__tests__/integration/voucher.integration.test.d.ts +1 -0
- package/lib/__tests__/integration/voucher.integration.test.js +63 -0
- package/lib/__tests__/integration/voucher.integration.test.js.map +1 -0
- package/lib/__tests__/managers/logistics.manager.test.js +2 -0
- package/lib/__tests__/managers/logistics.manager.test.js.map +1 -1
- package/lib/__tests__/managers/order.manager.test.js +38 -0
- package/lib/__tests__/managers/order.manager.test.js.map +1 -1
- package/lib/__tests__/managers/payment.manager.test.js +14 -15
- package/lib/__tests__/managers/payment.manager.test.js.map +1 -1
- package/lib/__tests__/utils/env-helper.d.ts +22 -0
- package/lib/__tests__/utils/env-helper.js +53 -0
- package/lib/__tests__/utils/env-helper.js.map +1 -0
- package/lib/__tests__/utils/init.d.ts +1 -0
- package/lib/__tests__/utils/init.js +45 -0
- package/lib/__tests__/utils/init.js.map +1 -0
- package/lib/__tests__/utils/sandbox-auth-automation.d.ts +8 -0
- package/lib/__tests__/utils/sandbox-auth-automation.js +109 -0
- package/lib/__tests__/utils/sandbox-auth-automation.js.map +1 -0
- package/lib/fetch.js +6 -7
- package/lib/fetch.js.map +1 -1
- package/lib/managers/order.manager.d.ts +8 -1
- package/lib/managers/order.manager.js +14 -0
- package/lib/managers/order.manager.js.map +1 -1
- package/lib/schemas/logistics.d.ts +16 -0
- package/lib/schemas/logistics.js.map +1 -1
- package/lib/schemas/order.d.ts +56 -0
- package/lib/schemas/order.js.map +1 -1
- package/lib/schemas/payment.d.ts +11 -14
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/lib/version.js.map +1 -1
- package/package.json +8 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/media.integration.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,oBAAoB,EAAE,CAAC;AAErD,8FAA8F;AAC9F,MAAM,iBAAiB,GACrB,0gFAA0gF,CAAC;AAE7gF,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,gDAAgD,EAAE,GAAG,EAAE;IAC3F,IAAI,GAAc,CAAC;IAEnB,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,GAAG,GAAG,MAAM,OAAO,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,0FAA0F;QAC1F,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAC7B,0yBAA0yB,EAC1yB,QAAQ,CACT,CAAC;QAEF,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC;YACtD,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,WAAW;SACnB,CAAC,CAAC;QAEH,MAAM,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEtC,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,EAAE,eAAe,CAAC;QAC1D,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,CAAC,QAAS,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QACxD,MAAM,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAChF,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAC7B,0yBAA0yB,EAC1yB,QAAQ,CACT,CAAC;YAEF,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC;gBACjD,KAAK,EAAE,QAAQ;gBACf,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,WAAW;aACnB,CAAC,CAAC;YAEH,MAAM,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC;YACrC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEtC,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,EAAE,eAAe,CAAC;YAC1D,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;YAC/B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,CAAC,QAAS,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,GAAqB,CAAC;YACrC,MAAM,CAAE,MAAM,CAAC,IAAY,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACjE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,kDAAkD;QAClD,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC;YACxD,SAAS,EAAE,MAAM,EAAE,oBAAoB;YACvC,QAAQ,EAAE,kCAAkC;SAC7C,CAAC,CAAC;QAEH,MAAM,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,WAAW,EAAE,CAAC;QAE7D,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC;QAEvD,0DAA0D;QAC1D,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,iBAAiB,CAAC;YAC5D,eAAe,EAAE,QAAQ;SAC1B,CAAC,CAAC;QAEH,MAAM,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;QAC3F,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC;QACpC,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE3E,qCAAqC;QACrC,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC;YACxD,SAAS,EAAE,QAAQ;YACnB,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;QAEH,MAAM,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,WAAW,EAAE,CAAC;QAE7D,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC;QAEvD,IAAI,CAAC;YACH,+BAA+B;YAC/B,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC;gBACxD,eAAe,EAAE,QAAQ;gBACzB,QAAQ,EAAE,CAAC;gBACX,WAAW,EAAE,OAAO;gBACpB,YAAY,EAAE,WAAW;aAC1B,CAAC,CAAC;YAEH,MAAM,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;YACnC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEpC,2BAA2B;YAC3B,MAAM,gBAAgB,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,mBAAmB,CAAC;gBAChE,eAAe,EAAE,QAAQ;gBACzB,aAAa,EAAE,CAAC,CAAC,CAAC;gBAClB,WAAW,EAAE;oBACX,WAAW,EAAE,GAAG;iBACjB;aACF,CAAC,CAAC;YAEH,MAAM,CAAC,gBAAgB,CAAC,CAAC,WAAW,EAAE,CAAC;YACvC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAExC,wCAAwC;YACxC,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,oBAAoB,CAAC;gBAC/D,eAAe,EAAE,QAAQ;aAC1B,CAAC,CAAC;YAEH,MAAM,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC;YACrC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtC,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,CAAC,CAAC,aAAa,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC9F,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,iEAAiE;YACjE,MAAM,GAAG,CAAC,UAAU,CAAC,iBAAiB,CAAC;gBACrC,eAAe,EAAE,QAAQ;aAC1B,CAAC,CAAC;YACH,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { describe, it, expect, beforeAll } from "@jest/globals";
|
|
2
|
+
import { setupIntegrationTest } from "./setup.js";
|
|
3
|
+
const { runTests, initSdk } = setupIntegrationTest();
|
|
4
|
+
(runTests ? describe : describe.skip)("ShopeeSDK OrderManager Sandbox Integration Tests", () => {
|
|
5
|
+
let sdk;
|
|
6
|
+
beforeAll(async () => {
|
|
7
|
+
sdk = await initSdk();
|
|
8
|
+
});
|
|
9
|
+
it("should retrieve orders in last 15 days", async () => {
|
|
10
|
+
const timeTo = Math.floor(Date.now() / 1000);
|
|
11
|
+
const timeFrom = timeTo - 15 * 24 * 3600;
|
|
12
|
+
const ordersResponse = await sdk.order.getOrderList({
|
|
13
|
+
time_range_field: "create_time",
|
|
14
|
+
time_from: timeFrom,
|
|
15
|
+
time_to: timeTo,
|
|
16
|
+
page_size: 10,
|
|
17
|
+
});
|
|
18
|
+
expect(ordersResponse).toBeDefined();
|
|
19
|
+
expect(ordersResponse.request_id).toBeDefined();
|
|
20
|
+
if (ordersResponse.response) {
|
|
21
|
+
expect(Array.isArray(ordersResponse.response.order_list)).toBe(true);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=order.integration.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"order.integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/order.integration.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,oBAAoB,EAAE,CAAC;AAErD,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,kDAAkD,EAAE,GAAG,EAAE;IAC7F,IAAI,GAAc,CAAC;IAEnB,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,GAAG,GAAG,MAAM,OAAO,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAEzC,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC;YAClD,gBAAgB,EAAE,aAAa;YAC/B,SAAS,EAAE,QAAQ;YACnB,OAAO,EAAE,MAAM;YACf,SAAS,EAAE,EAAE;SACd,CAAC,CAAC;QAEH,MAAM,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QAChD,IAAI,cAAc,CAAC,QAAQ,EAAE,CAAC;YAC5B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvE,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { describe, it, expect, beforeAll } from "@jest/globals";
|
|
2
|
+
import { setupIntegrationTest } from "./setup.js";
|
|
3
|
+
import { ShopeeApiError } from "../../errors.js";
|
|
4
|
+
const { runTests, initSdk } = setupIntegrationTest();
|
|
5
|
+
(runTests ? describe : describe.skip)("ShopeeSDK Payment Integration Tests", () => {
|
|
6
|
+
let sdk;
|
|
7
|
+
beforeAll(async () => {
|
|
8
|
+
sdk = await initSdk();
|
|
9
|
+
});
|
|
10
|
+
it("should retrieve payment method list (auth: false)", async () => {
|
|
11
|
+
const result = await sdk.payment.getPaymentMethodList();
|
|
12
|
+
expect(result).toBeDefined();
|
|
13
|
+
expect(result.request_id).toBeDefined();
|
|
14
|
+
expect(result.response).toBeDefined();
|
|
15
|
+
expect(Array.isArray(result.response)).toBe(true);
|
|
16
|
+
expect(result.response.length).toBeGreaterThan(0);
|
|
17
|
+
const first = result.response[0];
|
|
18
|
+
expect(first.region).toBeDefined();
|
|
19
|
+
expect(Array.isArray(first.payment_method)).toBe(true);
|
|
20
|
+
}, 60000);
|
|
21
|
+
it("should retrieve shop installment status (auth: true)", async () => {
|
|
22
|
+
try {
|
|
23
|
+
const result = await sdk.payment.getShopInstallmentStatus();
|
|
24
|
+
expect(result).toBeDefined();
|
|
25
|
+
expect(result.request_id).toBeDefined();
|
|
26
|
+
if (result.response) {
|
|
27
|
+
expect(result.response.status).toBeDefined();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
if (err instanceof ShopeeApiError) {
|
|
32
|
+
expect(err.status).toBeDefined();
|
|
33
|
+
expect(err.data).toBeDefined();
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
throw err;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}, 60000);
|
|
40
|
+
it("should gracefully propagate error when querying escrow detail with dummy order ID", async () => {
|
|
41
|
+
try {
|
|
42
|
+
await sdk.payment.getEscrowDetail({
|
|
43
|
+
order_sn: "NONEXISTENT_ORDER_SN_12345",
|
|
44
|
+
});
|
|
45
|
+
throw new Error("Should have thrown a ShopeeApiError");
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
expect(err).toBeInstanceOf(ShopeeApiError);
|
|
49
|
+
const apiErr = err;
|
|
50
|
+
expect(apiErr.status).toBeDefined();
|
|
51
|
+
expect(apiErr.data).toBeDefined();
|
|
52
|
+
expect(apiErr.message).toBeDefined();
|
|
53
|
+
}
|
|
54
|
+
}, 60000);
|
|
55
|
+
});
|
|
56
|
+
//# sourceMappingURL=payment.integration.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payment.integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/payment.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { describe, it, expect, beforeAll } from "@jest/globals";
|
|
2
|
+
import { setupIntegrationTest } from "./setup.js";
|
|
3
|
+
import { ItemStatus } from "../../schemas/product.js";
|
|
4
|
+
import { ShopeeApiError } from "../../errors.js";
|
|
5
|
+
const { runTests, initSdk } = setupIntegrationTest();
|
|
6
|
+
(runTests ? describe : describe.skip)("ShopeeSDK ProductManager Sandbox Integration Tests", () => {
|
|
7
|
+
let sdk;
|
|
8
|
+
let testCategoryId = 100001; // default fallback category ID
|
|
9
|
+
beforeAll(async () => {
|
|
10
|
+
sdk = await initSdk();
|
|
11
|
+
});
|
|
12
|
+
it("should retrieve category tree list and discover a valid category ID with no mandatory attributes", async () => {
|
|
13
|
+
const categoryResponse = await sdk.product.getCategory();
|
|
14
|
+
expect(categoryResponse).toBeDefined();
|
|
15
|
+
expect(categoryResponse.request_id).toBeDefined();
|
|
16
|
+
expect(categoryResponse.response).toBeDefined();
|
|
17
|
+
expect(Array.isArray(categoryResponse.response.category_list)).toBe(true);
|
|
18
|
+
if (categoryResponse.response.category_list &&
|
|
19
|
+
categoryResponse.response.category_list.length > 0) {
|
|
20
|
+
const leafCategories = categoryResponse.response.category_list.filter((cat) => !cat.has_children);
|
|
21
|
+
if (leafCategories.length > 0) {
|
|
22
|
+
testCategoryId = leafCategories[0].category_id;
|
|
23
|
+
}
|
|
24
|
+
// Dynamically traverse leaf categories to find one with no mandatory attributes (limit to 10 for speed)
|
|
25
|
+
for (const cat of leafCategories.slice(0, 10)) {
|
|
26
|
+
try {
|
|
27
|
+
const attrResponse = await sdk.product.getAttributeTree({ category_id: cat.category_id });
|
|
28
|
+
if (attrResponse.response && attrResponse.response.attribute_list) {
|
|
29
|
+
const hasMandatory = attrResponse.response.attribute_list.some((attr) => attr.is_mandatory);
|
|
30
|
+
if (!hasMandatory) {
|
|
31
|
+
testCategoryId = cat.category_id;
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// Skip failures
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}, 30000);
|
|
42
|
+
it("should retrieve items from local sandbox shop", async () => {
|
|
43
|
+
const itemsResponse = await sdk.product.getItemList({
|
|
44
|
+
offset: 0,
|
|
45
|
+
page_size: 10,
|
|
46
|
+
item_status: [ItemStatus.NORMAL],
|
|
47
|
+
});
|
|
48
|
+
expect(itemsResponse).toBeDefined();
|
|
49
|
+
expect(itemsResponse.request_id).toBeDefined();
|
|
50
|
+
if (itemsResponse.response?.item) {
|
|
51
|
+
expect(Array.isArray(itemsResponse.response.item)).toBe(true);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
it("should fetch boosted list of products", async () => {
|
|
55
|
+
const boostedResponse = await sdk.product.getBoostedList();
|
|
56
|
+
expect(boostedResponse).toBeDefined();
|
|
57
|
+
expect(boostedResponse.request_id).toBeDefined();
|
|
58
|
+
expect(boostedResponse.response).toBeDefined();
|
|
59
|
+
expect(Array.isArray(boostedResponse.response.item_list)).toBe(true);
|
|
60
|
+
});
|
|
61
|
+
it("should retrieve brand list for the test category ID", async () => {
|
|
62
|
+
const brandResponse = await sdk.product.getBrandList({
|
|
63
|
+
category_id: testCategoryId,
|
|
64
|
+
offset: 0,
|
|
65
|
+
page_size: 10,
|
|
66
|
+
status: 1,
|
|
67
|
+
});
|
|
68
|
+
expect(brandResponse).toBeDefined();
|
|
69
|
+
expect(brandResponse.request_id).toBeDefined();
|
|
70
|
+
expect(brandResponse.response).toBeDefined();
|
|
71
|
+
expect(Array.isArray(brandResponse.response.brand_list)).toBe(true);
|
|
72
|
+
});
|
|
73
|
+
it("should retrieve item limits for the test category ID", async () => {
|
|
74
|
+
const limitResponse = await sdk.product.getItemLimit({
|
|
75
|
+
category_id: testCategoryId,
|
|
76
|
+
});
|
|
77
|
+
expect(limitResponse).toBeDefined();
|
|
78
|
+
expect(limitResponse.request_id).toBeDefined();
|
|
79
|
+
expect(limitResponse.response).toBeDefined();
|
|
80
|
+
if (limitResponse.response.item_limit) {
|
|
81
|
+
expect(typeof limitResponse.response.item_limit.max_product_title_length).toBe("number");
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
it("should query category recommendations based on an item name", async () => {
|
|
85
|
+
try {
|
|
86
|
+
const recommendResponse = await sdk.product.categoryRecommend({
|
|
87
|
+
item_name: "Red Cotton T-Shirt",
|
|
88
|
+
});
|
|
89
|
+
expect(recommendResponse).toBeDefined();
|
|
90
|
+
expect(recommendResponse.request_id).toBeDefined();
|
|
91
|
+
expect(recommendResponse.response).toBeDefined();
|
|
92
|
+
if (recommendResponse.response.category_id_list) {
|
|
93
|
+
expect(Array.isArray(recommendResponse.response.category_id_list)).toBe(true);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
if (err instanceof ShopeeApiError) {
|
|
98
|
+
expect(err.data.error).toBe("product.error_unknown");
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
throw err;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
it("should query recommended attributes for the test category ID", async () => {
|
|
106
|
+
try {
|
|
107
|
+
const attributeResponse = await sdk.product.getRecommendAttribute({
|
|
108
|
+
category_id: testCategoryId,
|
|
109
|
+
});
|
|
110
|
+
expect(attributeResponse).toBeDefined();
|
|
111
|
+
expect(attributeResponse.request_id).toBeDefined();
|
|
112
|
+
expect(attributeResponse.response).toBeDefined();
|
|
113
|
+
if (attributeResponse.response.recommended_attribute_list) {
|
|
114
|
+
expect(Array.isArray(attributeResponse.response.recommended_attribute_list)).toBe(true);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch (err) {
|
|
118
|
+
if (err instanceof ShopeeApiError) {
|
|
119
|
+
expect(err.data.error).toBe("product.error_unknown");
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
throw err;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
it("should successfully run the full product creation and deletion lifecycle", async () => {
|
|
127
|
+
// 1. Fetch enabled logistics channel
|
|
128
|
+
const logisticsResponse = await sdk.logistics.getChannelList();
|
|
129
|
+
expect(logisticsResponse).toBeDefined();
|
|
130
|
+
expect(logisticsResponse.response?.logistics_channel_list).toBeDefined();
|
|
131
|
+
const enabledChannel = logisticsResponse.response.logistics_channel_list.find((ch) => ch.enabled);
|
|
132
|
+
const channelId = enabledChannel ? enabledChannel.logistics_channel_id : 20001;
|
|
133
|
+
const channelName = enabledChannel
|
|
134
|
+
? enabledChannel.logistics_channel_name
|
|
135
|
+
: "Standard Delivery";
|
|
136
|
+
// 2. Upload a temporary 200x200 image pixel to satisfy image requirements and avoid Sandbox rejection
|
|
137
|
+
const imageBuffer = Buffer.from("iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAIAAAAiOjnJAAAACXBIWXMAAAABAAAAAQBPJcTWAAACEElEQVR4nO3SQQkAMAzAwPo3vaoIg3KnII/Mg8D8DuAmY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBaJBcLKBp7i8n+mAAAAAElFTkSuQmCC", "base64");
|
|
138
|
+
const uploadResponse = await sdk.mediaSpace.uploadImage({
|
|
139
|
+
scene: "normal",
|
|
140
|
+
ratio: "1:1",
|
|
141
|
+
image: imageBuffer,
|
|
142
|
+
});
|
|
143
|
+
expect(uploadResponse.response?.image_info_list).toBeDefined();
|
|
144
|
+
const imageId = uploadResponse.response.image_info_list[0].image_info.image_id;
|
|
145
|
+
// 3. Create the product
|
|
146
|
+
const itemName = "Sandbox Test Product " + Date.now();
|
|
147
|
+
const addResponse = await sdk.product.addItem({
|
|
148
|
+
item_name: itemName,
|
|
149
|
+
description: "This is a detailed sandbox integration test product description that satisfies minimum length requirement.",
|
|
150
|
+
original_price: 50000,
|
|
151
|
+
category_id: testCategoryId,
|
|
152
|
+
weight: 0.5,
|
|
153
|
+
dimension: {
|
|
154
|
+
package_length: 10,
|
|
155
|
+
package_width: 10,
|
|
156
|
+
package_height: 10,
|
|
157
|
+
},
|
|
158
|
+
image: {
|
|
159
|
+
image_id_list: [imageId],
|
|
160
|
+
},
|
|
161
|
+
logistic_info: [
|
|
162
|
+
{
|
|
163
|
+
logistic_id: channelId,
|
|
164
|
+
logistic_name: channelName,
|
|
165
|
+
enabled: true,
|
|
166
|
+
is_free: false,
|
|
167
|
+
},
|
|
168
|
+
],
|
|
169
|
+
brand: {
|
|
170
|
+
brand_id: 0,
|
|
171
|
+
original_brand_name: "NoBrand",
|
|
172
|
+
},
|
|
173
|
+
seller_stock: [
|
|
174
|
+
{
|
|
175
|
+
stock: 100,
|
|
176
|
+
},
|
|
177
|
+
],
|
|
178
|
+
});
|
|
179
|
+
expect(addResponse).toBeDefined();
|
|
180
|
+
expect(addResponse.error).toBe("");
|
|
181
|
+
expect(addResponse.response?.item_id).toBeDefined();
|
|
182
|
+
const createdItemId = addResponse.response.item_id;
|
|
183
|
+
// 4. Tear down: delete the newly created product immediately to keep Sandbox clean
|
|
184
|
+
const deleteResponse = await sdk.product.deleteItem({
|
|
185
|
+
item_id: createdItemId,
|
|
186
|
+
});
|
|
187
|
+
expect(deleteResponse).toBeDefined();
|
|
188
|
+
expect(deleteResponse.error).toBe("");
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
//# sourceMappingURL=product.integration.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"product.integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/product.integration.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,oBAAoB,EAAE,CAAC;AAErD,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,oDAAoD,EAAE,GAAG,EAAE;IAC/F,IAAI,GAAc,CAAC;IACnB,IAAI,cAAc,GAAG,MAAM,CAAC,CAAC,+BAA+B;IAE5D,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,GAAG,GAAG,MAAM,OAAO,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kGAAkG,EAAE,KAAK,IAAI,EAAE;QAChH,MAAM,gBAAgB,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACzD,MAAM,CAAC,gBAAgB,CAAC,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QAClD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAChD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE1E,IACE,gBAAgB,CAAC,QAAQ,CAAC,aAAa;YACvC,gBAAgB,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAClD,CAAC;YACD,MAAM,cAAc,GAAG,gBAAgB,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CACnE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,YAAY,CAC3B,CAAC;YAEF,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,cAAc,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;YACjD,CAAC;YAED,wGAAwG;YACxG,KAAK,MAAM,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;gBAC9C,IAAI,CAAC;oBACH,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;oBAC1F,IAAI,YAAY,CAAC,QAAQ,IAAI,YAAY,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;wBAClE,MAAM,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAC5D,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAC5B,CAAC;wBACF,IAAI,CAAC,YAAY,EAAE,CAAC;4BAClB,cAAc,GAAG,GAAG,CAAC,WAAW,CAAC;4BACjC,MAAM;wBACR,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,gBAAgB;gBAClB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC,EAAE,KAAK,CAAC,CAAC;IAEV,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,aAAa,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC;YAClD,MAAM,EAAE,CAAC;YACT,SAAS,EAAE,EAAE;YACb,WAAW,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;SACjC,CAAC,CAAC;QAEH,MAAM,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/C,IAAI,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;YACjC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,eAAe,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAC3D,MAAM,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE,CAAC;QACtC,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QACjD,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,aAAa,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC;YACnD,WAAW,EAAE,cAAc;YAC3B,MAAM,EAAE,CAAC;YACT,SAAS,EAAE,EAAE;YACb,MAAM,EAAE,CAAC;SACV,CAAC,CAAC;QAEH,MAAM,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/C,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7C,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,aAAa,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC;YACnD,WAAW,EAAE,cAAc;SAC5B,CAAC,CAAC;QAEH,MAAM,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/C,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7C,IAAI,aAAa,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;YACtC,MAAM,CAAC,OAAO,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,IAAI,CAAC;YACH,MAAM,iBAAiB,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC;gBAC5D,SAAS,EAAE,oBAAoB;aAChC,CAAC,CAAC;YAEH,MAAM,CAAC,iBAAiB,CAAC,CAAC,WAAW,EAAE,CAAC;YACxC,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;YACnD,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;YACjD,IAAI,iBAAiB,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;gBAChD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChF,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,cAAc,EAAE,CAAC;gBAClC,MAAM,CAAE,GAAG,CAAC,IAAY,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,IAAI,CAAC;YACH,MAAM,iBAAiB,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,qBAAqB,CAAC;gBAChE,WAAW,EAAE,cAAc;aAC5B,CAAC,CAAC;YAEH,MAAM,CAAC,iBAAiB,CAAC,CAAC,WAAW,EAAE,CAAC;YACxC,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;YACnD,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;YACjD,IAAI,iBAAiB,CAAC,QAAQ,CAAC,0BAA0B,EAAE,CAAC;gBAC1D,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1F,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,cAAc,EAAE,CAAC;gBAClC,MAAM,CAAE,GAAG,CAAC,IAAY,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;QACxF,qCAAqC;QACrC,MAAM,iBAAiB,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;QAC/D,MAAM,CAAC,iBAAiB,CAAC,CAAC,WAAW,EAAE,CAAC;QACxC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC,WAAW,EAAE,CAAC;QACzE,MAAM,cAAc,GAAG,iBAAiB,CAAC,QAAQ,CAAC,sBAAsB,CAAC,IAAI,CAC3E,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CACnB,CAAC;QAEF,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAC;QAC/E,MAAM,WAAW,GAAG,cAAc;YAChC,CAAC,CAAC,cAAc,CAAC,sBAAsB;YACvC,CAAC,CAAC,mBAAmB,CAAC;QAExB,sGAAsG;QACtG,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAC7B,0yBAA0yB,EAC1yB,QAAQ,CACT,CAAC;QACF,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC;YACtD,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,WAAW;SACnB,CAAC,CAAC;QACH,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/D,MAAM,OAAO,GAAG,cAAc,CAAC,QAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,UAAW,CAAC,QAAQ,CAAC;QAElF,wBAAwB;QACxB,MAAM,QAAQ,GAAG,uBAAuB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACtD,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;YAC5C,SAAS,EAAE,QAAQ;YACnB,WAAW,EACT,4GAA4G;YAC9G,cAAc,EAAE,KAAK;YACrB,WAAW,EAAE,cAAc;YAC3B,MAAM,EAAE,GAAG;YACX,SAAS,EAAE;gBACT,cAAc,EAAE,EAAE;gBAClB,aAAa,EAAE,EAAE;gBACjB,cAAc,EAAE,EAAE;aACnB;YACD,KAAK,EAAE;gBACL,aAAa,EAAE,CAAC,OAAO,CAAC;aACzB;YACD,aAAa,EAAE;gBACb;oBACE,WAAW,EAAE,SAAS;oBACtB,aAAa,EAAE,WAAW;oBAC1B,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,KAAK;iBACf;aACF;YACD,KAAK,EAAE;gBACL,QAAQ,EAAE,CAAC;gBACX,mBAAmB,EAAE,SAAS;aAC/B;YACD,YAAY,EAAE;gBACZ;oBACE,KAAK,EAAE,GAAG;iBACX;aACF;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;QAClC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QAEpD,MAAM,aAAa,GAAG,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC;QAEnD,mFAAmF;QACnF,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC;YAClD,OAAO,EAAE,aAAa;SACvB,CAAC,CAAC;QAEH,MAAM,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { describe, it, expect, beforeAll } from "@jest/globals";
|
|
2
|
+
import { setupIntegrationTest } from "./setup.js";
|
|
3
|
+
const { runTests, initSdk } = setupIntegrationTest();
|
|
4
|
+
(runTests ? describe : describe.skip)("ShopeeSDK PublicManager Sandbox Integration Tests", () => {
|
|
5
|
+
let sdk;
|
|
6
|
+
beforeAll(async () => {
|
|
7
|
+
sdk = await initSdk();
|
|
8
|
+
});
|
|
9
|
+
it("should successfully fetch Shopee IP ranges from the sandbox environment", async () => {
|
|
10
|
+
const response = await sdk.public.getShopeeIpRange();
|
|
11
|
+
expect(response).toBeDefined();
|
|
12
|
+
expect(response.request_id).toBeDefined();
|
|
13
|
+
if (response.response) {
|
|
14
|
+
expect(response.response.ip_list).toBeDefined();
|
|
15
|
+
expect(Array.isArray(response.response.ip_list)).toBe(true);
|
|
16
|
+
}
|
|
17
|
+
}, 60000);
|
|
18
|
+
it("should fetch shops associated with partner in the sandbox environment", async () => {
|
|
19
|
+
const response = await sdk.public.getShopsByPartner();
|
|
20
|
+
expect(response).toBeDefined();
|
|
21
|
+
expect(response.request_id).toBeDefined();
|
|
22
|
+
if (response.response) {
|
|
23
|
+
expect(Array.isArray(response.response.authed_shop_list)).toBe(true);
|
|
24
|
+
}
|
|
25
|
+
}, 60000);
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=public.integration.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public.integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/public.integration.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,oBAAoB,EAAE,CAAC;AAErD,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,mDAAmD,EAAE,GAAG,EAAE;IAC9F,IAAI,GAAc,CAAC;IAEnB,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,GAAG,GAAG,MAAM,OAAO,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACvF,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAErD,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/B,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1C,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACtB,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC,EAAE,KAAK,CAAC,CAAC;IAEV,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAEtD,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/B,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1C,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACtB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvE,CAAC;IACH,CAAC,EAAE,KAAK,CAAC,CAAC;AACZ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { ShopeeSDK } from "../../sdk.js";
|
|
2
|
+
import { ShopeeRegion } from "../../schemas/region.js";
|
|
3
|
+
import { getSandboxConfig, hasSandboxPartnerCredentials } from "../utils/env-helper.js";
|
|
4
|
+
export function setupIntegrationTest() {
|
|
5
|
+
const runTests = hasSandboxPartnerCredentials();
|
|
6
|
+
let sdk;
|
|
7
|
+
let hasValidToken = false;
|
|
8
|
+
const initSdk = async () => {
|
|
9
|
+
if (sdk)
|
|
10
|
+
return sdk;
|
|
11
|
+
const config = getSandboxConfig();
|
|
12
|
+
sdk = new ShopeeSDK({
|
|
13
|
+
partner_id: config.partner_id,
|
|
14
|
+
partner_key: config.partner_key,
|
|
15
|
+
shop_id: config.shop_id,
|
|
16
|
+
region: ShopeeRegion.TEST_GLOBAL, // TEST_GLOBAL serves local Vietnam sandbox accounts
|
|
17
|
+
});
|
|
18
|
+
// 1. If an explicit access token was provided in .env, pre-load it into storage
|
|
19
|
+
if (config.access_token) {
|
|
20
|
+
const token = {
|
|
21
|
+
access_token: config.access_token,
|
|
22
|
+
refresh_token: config.refresh_token || "",
|
|
23
|
+
expire_in: 3600,
|
|
24
|
+
expired_at: Date.now() + 3600000, // Valid for 1 hour
|
|
25
|
+
shop_id: config.shop_id,
|
|
26
|
+
request_id: "env-injected",
|
|
27
|
+
error: "",
|
|
28
|
+
message: "",
|
|
29
|
+
};
|
|
30
|
+
await sdk["tokenStorage"].store(token);
|
|
31
|
+
hasValidToken = typeof config.shop_id === "number" && !isNaN(config.shop_id);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
// 2. Check if there's already a valid token in the persistent token storage
|
|
35
|
+
const token = await sdk.getAuthToken();
|
|
36
|
+
if (token &&
|
|
37
|
+
typeof token.shop_id === "number" &&
|
|
38
|
+
token.expired_at &&
|
|
39
|
+
token.expired_at > Date.now()) {
|
|
40
|
+
hasValidToken = true;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return sdk;
|
|
44
|
+
};
|
|
45
|
+
return {
|
|
46
|
+
runTests,
|
|
47
|
+
initSdk,
|
|
48
|
+
hasValidToken: () => hasValidToken,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/__tests__/integration/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAGxF,MAAM,UAAU,oBAAoB;IAClC,MAAM,QAAQ,GAAG,4BAA4B,EAAE,CAAC;IAChD,IAAI,GAAc,CAAC;IACnB,IAAI,aAAa,GAAG,KAAK,CAAC;IAE1B,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;QACzB,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC;QACpB,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;QAClC,GAAG,GAAG,IAAI,SAAS,CAAC;YAClB,UAAU,EAAE,MAAM,CAAC,UAAW;YAC9B,WAAW,EAAE,MAAM,CAAC,WAAY;YAChC,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,YAAY,CAAC,WAAW,EAAE,oDAAoD;SACvF,CAAC,CAAC;QAEH,gFAAgF;QAChF,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACxB,MAAM,KAAK,GAAgB;gBACzB,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,EAAE;gBACzC,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,mBAAmB;gBACrD,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,UAAU,EAAE,cAAc;gBAC1B,KAAK,EAAE,EAAE;gBACT,OAAO,EAAE,EAAE;aACZ,CAAC;YACF,MAAM,GAAG,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACvC,aAAa,GAAG,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/E,CAAC;aAAM,CAAC;YACN,4EAA4E;YAC5E,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,YAAY,EAAE,CAAC;YACvC,IACE,KAAK;gBACL,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;gBACjC,KAAK,CAAC,UAAU;gBAChB,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,EAC7B,CAAC;gBACD,aAAa,GAAG,IAAI,CAAC;YACvB,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IAEF,OAAO;QACL,QAAQ;QACR,OAAO;QACP,aAAa,EAAE,GAAG,EAAE,CAAC,aAAa;KACnC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { describe, it, expect, beforeAll } from "@jest/globals";
|
|
2
|
+
import { setupIntegrationTest } from "./setup.js";
|
|
3
|
+
const { runTests, initSdk } = setupIntegrationTest();
|
|
4
|
+
(runTests ? describe : describe.skip)("ShopeeSDK ShopCategoryManager Sandbox Integration Tests", () => {
|
|
5
|
+
let sdk;
|
|
6
|
+
beforeAll(async () => {
|
|
7
|
+
sdk = await initSdk();
|
|
8
|
+
});
|
|
9
|
+
it("should successfully run the full shop category collection lifecycle", async () => {
|
|
10
|
+
// 1. Add a new custom shop collection category
|
|
11
|
+
const categoryName = "Sandbox Collection " + Date.now();
|
|
12
|
+
const addResponse = await sdk.shopCategory.addShopCategory({
|
|
13
|
+
name: categoryName,
|
|
14
|
+
sort_weight: 10,
|
|
15
|
+
});
|
|
16
|
+
expect(addResponse).toBeDefined();
|
|
17
|
+
expect(addResponse.error || "").toBe("");
|
|
18
|
+
expect(addResponse.response?.shop_category_id).toBeDefined();
|
|
19
|
+
const testCategoryId = addResponse.response.shop_category_id;
|
|
20
|
+
try {
|
|
21
|
+
// 2. Retrieve collections and verify presence
|
|
22
|
+
const listResponse = await sdk.shopCategory.getShopCategoryList({
|
|
23
|
+
page_size: 100,
|
|
24
|
+
page_no: 1,
|
|
25
|
+
});
|
|
26
|
+
expect(listResponse).toBeDefined();
|
|
27
|
+
expect(listResponse.error || "").toBe("");
|
|
28
|
+
expect(Array.isArray(listResponse.response?.shop_categorys)).toBe(true);
|
|
29
|
+
const createdCat = listResponse.response.shop_categorys.find((cat) => cat.shop_category_id === testCategoryId);
|
|
30
|
+
expect(createdCat).toBeDefined();
|
|
31
|
+
expect(createdCat?.name).toBe(categoryName);
|
|
32
|
+
// 3. Update the category name
|
|
33
|
+
const updatedName = "Sandbox Collection U " + Date.now();
|
|
34
|
+
const updateResponse = await sdk.shopCategory.updateShopCategory({
|
|
35
|
+
shop_category_id: testCategoryId,
|
|
36
|
+
name: updatedName,
|
|
37
|
+
});
|
|
38
|
+
expect(updateResponse).toBeDefined();
|
|
39
|
+
expect(updateResponse.error || "").toBe("");
|
|
40
|
+
expect(updateResponse.response?.shop_category_id).toBe(testCategoryId);
|
|
41
|
+
}
|
|
42
|
+
finally {
|
|
43
|
+
// 4. Delete the custom shop collection category immediately
|
|
44
|
+
const deleteResponse = await sdk.shopCategory.deleteShopCategory({
|
|
45
|
+
shop_category_id: testCategoryId,
|
|
46
|
+
});
|
|
47
|
+
expect(deleteResponse).toBeDefined();
|
|
48
|
+
expect(deleteResponse.error || "").toBe("");
|
|
49
|
+
expect(deleteResponse.response?.shop_category_id).toBe(testCategoryId);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
//# sourceMappingURL=shop-category.integration.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shop-category.integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/shop-category.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { describe, it, expect, beforeAll } from "@jest/globals";
|
|
2
|
+
import { setupIntegrationTest } from "./setup.js";
|
|
3
|
+
const { runTests, initSdk } = setupIntegrationTest();
|
|
4
|
+
(runTests ? describe : describe.skip)("ShopeeSDK ShopManager Sandbox Integration Tests", () => {
|
|
5
|
+
let sdk;
|
|
6
|
+
beforeAll(async () => {
|
|
7
|
+
sdk = await initSdk();
|
|
8
|
+
});
|
|
9
|
+
it("should retrieve shop info details", async () => {
|
|
10
|
+
const shopInfo = await sdk.shop.getShopInfo();
|
|
11
|
+
expect(shopInfo).toBeDefined();
|
|
12
|
+
expect(shopInfo.request_id).toBeDefined();
|
|
13
|
+
if (shopInfo.shop_name) {
|
|
14
|
+
expect(typeof shopInfo.shop_name).toBe("string");
|
|
15
|
+
}
|
|
16
|
+
}, 60000);
|
|
17
|
+
it("should retrieve shop profile details", async () => {
|
|
18
|
+
const profile = await sdk.shop.getProfile();
|
|
19
|
+
expect(profile).toBeDefined();
|
|
20
|
+
expect(profile.request_id).toBeDefined();
|
|
21
|
+
}, 60000);
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=shop.integration.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shop.integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/shop.integration.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,oBAAoB,EAAE,CAAC;AAErD,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,iDAAiD,EAAE,GAAG,EAAE;IAC5F,IAAI,GAAc,CAAC;IAEnB,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,GAAG,GAAG,MAAM,OAAO,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAE9C,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/B,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1C,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;YACvB,MAAM,CAAC,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnD,CAAC;IACH,CAAC,EAAE,KAAK,CAAC,CAAC;IAEV,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QAE5C,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9B,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;IAC3C,CAAC,EAAE,KAAK,CAAC,CAAC;AACZ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { describe, it, expect, beforeAll } from "@jest/globals";
|
|
2
|
+
import { setupIntegrationTest } from "./setup.js";
|
|
3
|
+
import { VoucherStatus } from "../../schemas/voucher.js";
|
|
4
|
+
const { runTests, initSdk } = setupIntegrationTest();
|
|
5
|
+
(runTests ? describe : describe.skip)("ShopeeSDK VoucherManager Sandbox Integration Tests", () => {
|
|
6
|
+
let sdk;
|
|
7
|
+
let testVoucherId;
|
|
8
|
+
beforeAll(async () => {
|
|
9
|
+
sdk = await initSdk();
|
|
10
|
+
});
|
|
11
|
+
it("should successfully run the full voucher lifecycle", async () => {
|
|
12
|
+
// 1. Create a Voucher starting tomorrow and ending in 3 days
|
|
13
|
+
const startTime = Math.floor(Date.now() / 1000) + 86400; // Tomorrow
|
|
14
|
+
const endTime = startTime + 86400 * 2; // Next 2 days
|
|
15
|
+
const addResponse = await sdk.voucher.addVoucher({
|
|
16
|
+
voucher_name: "Integration Test Voucher",
|
|
17
|
+
voucher_code: "IV" + Math.floor(100 + Math.random() * 899),
|
|
18
|
+
start_time: startTime,
|
|
19
|
+
end_time: endTime,
|
|
20
|
+
voucher_type: 1, // Shop Voucher
|
|
21
|
+
reward_type: 1, // Fix Amount Discount
|
|
22
|
+
usage_quantity: 10,
|
|
23
|
+
discount_amount: 10000, // 10k VND
|
|
24
|
+
min_basket_price: 50000, // 50k VND
|
|
25
|
+
});
|
|
26
|
+
expect(addResponse).toBeDefined();
|
|
27
|
+
expect(addResponse.error).toBe("");
|
|
28
|
+
expect(addResponse.response?.voucher_id).toBeDefined();
|
|
29
|
+
testVoucherId = addResponse.response?.voucher_id;
|
|
30
|
+
if (testVoucherId) {
|
|
31
|
+
// 2. Fetch the voucher detail to verify
|
|
32
|
+
const getResponse = await sdk.voucher.getVoucher({
|
|
33
|
+
voucher_id: testVoucherId,
|
|
34
|
+
});
|
|
35
|
+
expect(getResponse.error).toBe("");
|
|
36
|
+
expect(getResponse.response?.voucher_name).toBe("Integration Test Voucher");
|
|
37
|
+
// 3. Update the voucher limits
|
|
38
|
+
const updateResponse = await sdk.voucher.updateVoucher({
|
|
39
|
+
voucher_id: testVoucherId,
|
|
40
|
+
usage_quantity: 15,
|
|
41
|
+
});
|
|
42
|
+
expect(updateResponse.error).toBe("");
|
|
43
|
+
// 4. Delete the upcoming voucher (clean up)
|
|
44
|
+
const deleteResponse = await sdk.voucher.deleteVoucher({
|
|
45
|
+
voucher_id: testVoucherId,
|
|
46
|
+
});
|
|
47
|
+
expect(deleteResponse.error).toBe("");
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
it("should successfully list shop vouchers", async () => {
|
|
51
|
+
const listResponse = await sdk.voucher.getVoucherList({
|
|
52
|
+
status: VoucherStatus.ALL,
|
|
53
|
+
page_no: 1,
|
|
54
|
+
page_size: 10,
|
|
55
|
+
});
|
|
56
|
+
expect(listResponse).toBeDefined();
|
|
57
|
+
expect(listResponse.error).toBe("");
|
|
58
|
+
if (listResponse.response?.voucher_list) {
|
|
59
|
+
expect(Array.isArray(listResponse.response.voucher_list)).toBe(true);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
//# sourceMappingURL=voucher.integration.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voucher.integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/voucher.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,11 +31,13 @@ describe("LogisticsManager", () => {
|
|
|
31
31
|
order_sn: "220101000000001",
|
|
32
32
|
package_number: "PKG123456789",
|
|
33
33
|
logistics_status: "LOGISTICS_DELIVERED",
|
|
34
|
+
collection_pin_code: "562891",
|
|
34
35
|
tracking_info: [
|
|
35
36
|
{
|
|
36
37
|
update_time: 1640995200,
|
|
37
38
|
description: "Package has been delivered",
|
|
38
39
|
logistics_status: "LOGISTICS_DELIVERED",
|
|
40
|
+
return_code: "1234",
|
|
39
41
|
},
|
|
40
42
|
{
|
|
41
43
|
update_time: 1640995100,
|