Files
cfw-autumn/server/tests/utils/genUtils.ts
2025-09-22 14:45:25 +01:00

109 lines
2.0 KiB
TypeScript

import { CusService } from "@/internal/customers/CusService.js";
import {
CusProductStatus,
FullCusProduct,
UsagePriceConfig,
} from "@autumn/shared";
import { AutumnCli } from "tests/cli/AutumnCli.js";
export const timeout = (ms: number) => {
return new Promise((resolve) => setTimeout(resolve, ms));
};
export const batchSendCountEvents = async ({
customerId,
eventCount,
featureId,
}: {
customerId: string;
eventCount: number;
featureId: string;
}) => {
const batchEvents = [];
for (let i = 0; i < eventCount; i++) {
batchEvents.push(
AutumnCli.sendEvent({
customerId: customerId,
eventName: featureId,
}),
);
}
await Promise.all(batchEvents);
await timeout(10000);
};
export const searchCusProducts = ({
productId,
cusProducts,
status,
}: {
productId: string;
cusProducts: FullCusProduct[];
status?: CusProductStatus;
}) => {
if (!cusProducts) {
return undefined;
}
return cusProducts.find(
(cusProduct: FullCusProduct) =>
cusProduct.product.id === productId &&
(status ? cusProduct.status === status : true),
);
};
export const getFixedPriceAmount = (product: any) => {
let amount = 0;
for (const price of product.prices) {
if (price.config.type === "fixed") {
amount += price.config.amount;
}
}
return amount;
};
export const getUsagePriceTiers = ({
product,
featureId,
}: {
product: any;
featureId: string;
}) => {
for (const price of product.prices) {
if (
price.config.type === "usage" &&
price.config.feature_id === featureId
) {
return price.config.usage_tiers;
}
}
return [];
};
export const getFeaturePrice = ({
product,
featureId,
cusProducts,
subId,
}: {
product: any;
featureId: string;
cusProducts: FullCusProduct[];
subId?: string;
}) => {
if (cusProducts.length == 0) {
return null;
}
let mainProduct = cusProducts[0];
for (const cusPrice of mainProduct.customer_prices) {
let price = cusPrice.price;
if ((price.config! as UsagePriceConfig).feature_id === featureId) {
return price;
}
}
return null;
};