Files
cfw-autumn/server/tests/utils/testInitUtils/initTestScenario.ts
John Yeo 6f21ec4a07 wip
2026-01-07 10:25:01 +00:00

89 lines
2.2 KiB
TypeScript

import { ApiVersion, type ProductV2 } from "@autumn/shared";
import type { CustomerData } from "autumn-js";
import { AutumnInt } from "@/external/autumn/autumnCli.js";
import { initCustomerV3 } from "@/utils/scriptUtils/testUtils/initCustomerV3.js";
import { initProductsV0 } from "@/utils/scriptUtils/testUtils/initProductsV0.js";
import ctx from "./createTestContext.js";
/**
* Initialize a complete test scenario with customer, products, and optional attachment.
* Combines initCustomerV3, initProductsV0, and attach into a single call.
*
* @param customerId - Unique identifier used as customerId and product prefix
* @param products - Array of products to create (use constructProduct)
* @param attachProducts - Array of product IDs to attach to customer
* @param customerOptions - Customer initialization options
*/
export const initTestScenario = async ({
customerId,
products,
attachProducts,
customerOptions = {},
}: {
customerId: string;
products: ProductV2[];
attachProducts?: string[];
customerOptions?: {
customerData?: CustomerData;
attachPm?: "success" | "fail" | "authenticate";
withDefault?: boolean;
withTestClock?: boolean;
};
}) => {
const {
customerData,
attachPm,
withDefault = false,
withTestClock = true,
} = customerOptions;
// 1. Initialize customer
const { testClockId, customer } = await initCustomerV3({
ctx,
customerId,
customerData,
attachPm,
withTestClock,
withDefault,
});
// 2. Initialize products (prefix = customerId for isolation)
await initProductsV0({
ctx,
products,
prefix: customerId,
});
// 3. Create autumn clients
const autumnV1 = new AutumnInt({
version: ApiVersion.V1_2,
secretKey: ctx.orgSecretKey,
});
const autumnV2 = new AutumnInt({
version: ApiVersion.V2_0,
secretKey: ctx.orgSecretKey,
});
// 4. Attach products if requested (prefix IDs to match mutated products)
if (attachProducts && attachProducts.length > 0) {
for (const productId of attachProducts) {
const prefixedId = `${customerId}_${productId}`;
await autumnV1.attach({
customer_id: customerId,
product_id: prefixedId,
});
}
}
return {
customerId,
products,
autumnV1,
autumnV2,
testClockId,
customer,
ctx,
};
};