Files
cfw-autumn/server/tests/utils/testProductUtils/testProductUtils.ts

76 lines
1.6 KiB
TypeScript

import {
type BillingInterval,
type FixedPriceConfig,
isFixedPrice,
type Price,
type ProductItem,
type ProductV2,
} from "@autumn/shared";
import { isPriceItem } from "@/internal/products/product-items/productItemUtils/getItemType.js";
import { nullish } from "@/utils/genUtils.js";
export const addPrefixToProducts = ({
products,
prefix,
}: {
products: ProductV2[];
prefix: string;
}) => {
for (const product of products) {
product.id = `${prefix}_${product.id}`;
product.name = `${prefix} ${product.name}`;
product.group = prefix;
}
return products;
};
export const replaceItems = ({
featureId,
interval,
intervalCount,
newItem,
items,
}: {
featureId?: string;
interval?: BillingInterval;
intervalCount?: number;
newItem: ProductItem;
items: ProductItem[];
}) => {
const newItems = structuredClone(items);
let index;
if (featureId) {
index = newItems.findIndex((item) => item.feature_id === featureId);
}
if (interval) {
index = newItems.findIndex(
(item) =>
item.interval === (interval as any) &&
(intervalCount ? item.interval_count === intervalCount : true) &&
nullish(item.feature_id),
);
}
if (index === -1) {
throw new Error("Item not found");
}
newItems[index!] = newItem;
return newItems;
};
export const getBasePrice = ({ product }: { product: ProductV2 }) => {
return product.items.find((item) => isPriceItem(item))?.price || 0;
};
export const v1ProductToBasePrice = ({ prices }: { prices: Price[] }) => {
const fixedPrice = prices.find((price) => isFixedPrice(price));
if (fixedPrice) {
return (fixedPrice.config as FixedPriceConfig).amount;
} else return 0;
};