26 lines
1.3 KiB
TypeScript
26 lines
1.3 KiB
TypeScript
import { getOpsPaidConversionKpi } from "@/lib/ops-conversion";
|
|
|
|
function assert(condition: unknown, message: string) {
|
|
if (!condition) throw new Error(message);
|
|
}
|
|
|
|
export function runTests() {
|
|
const trialKpi = getOpsPaidConversionKpi([
|
|
{ key: "landing_view", label: "访问落地页", count: 909, uniqueActors: 500 },
|
|
{ key: "trial_created", label: "试用开通", count: 24, uniqueActors: 20 },
|
|
{ key: "payment_success", label: "支付成功", count: 11, uniqueActors: 10 },
|
|
]);
|
|
|
|
assert(trialKpi.rateLabel === "50.0%", "ops overview paid conversion should use trial unique actors before landing sessions");
|
|
assert(trialKpi.subLabel === "试用 20 → 10 · 访客 2.0%", "ops overview paid conversion should keep visitor conversion as secondary context");
|
|
|
|
const signupKpi = getOpsPaidConversionKpi([
|
|
{ key: "landing_view", label: "访问落地页", count: 100, uniqueActors: 80 },
|
|
{ key: "signup_success", label: "注册成功", count: 8, uniqueActors: 8 },
|
|
{ key: "payment_success", label: "支付成功", count: 2, uniqueActors: 2 },
|
|
]);
|
|
|
|
assert(signupKpi.rateLabel === "25.0%", "ops overview paid conversion should fall back to signup unique actors when no trial data exists");
|
|
assert(signupKpi.subLabel === "注册 8 → 2 · 访客 2.5%", "ops overview paid conversion should label the active denominator");
|
|
}
|