52 lines
1.5 KiB
TypeScript
52 lines
1.5 KiB
TypeScript
import { describe, expect, test } from "vitest";
|
|
|
|
import {
|
|
listNumericMetricFilterGroups,
|
|
matchesMetricFilterRule,
|
|
parseDisplayNumber
|
|
} from "../src/content/market/metric-filter";
|
|
|
|
describe("metric-filter", () => {
|
|
test("keeps only numeric list fields while retaining numeric API and profile groups", () => {
|
|
const groups = listNumericMetricFilterGroups([
|
|
"达人信息",
|
|
"粉丝数",
|
|
"互动率",
|
|
"完播率",
|
|
"内容主题",
|
|
"21-60s报价"
|
|
]);
|
|
const listFields = groups.find((group) => group.label === "列表字段");
|
|
|
|
expect(listFields?.headers).toEqual([
|
|
"粉丝数",
|
|
"互动率",
|
|
"完播率",
|
|
"21-60s报价"
|
|
]);
|
|
expect(groups.map((group) => group.label)).toEqual(expect.arrayContaining([
|
|
"内容数据",
|
|
"效果预估",
|
|
"观众画像",
|
|
"粉丝画像",
|
|
"铁粉画像"
|
|
]));
|
|
});
|
|
|
|
test("compares displayed percentages, prices, and wan-unit values with both operators", () => {
|
|
expect(parseDisplayNumber("28.5%")).toBe(28.5);
|
|
expect(parseDisplayNumber("¥12,000")).toBe(12000);
|
|
expect(parseDisplayNumber("6.2w")).toBe(62000);
|
|
expect(parseDisplayNumber("缺失")).toBeNull();
|
|
|
|
expect(matchesMetricFilterRule(
|
|
{ 完播率: "28.5%" },
|
|
{ field: "完播率", operator: "gte", threshold: 28 }
|
|
)).toBe(true);
|
|
expect(matchesMetricFilterRule(
|
|
{ 完播率: "28.5%" },
|
|
{ field: "完播率", operator: "lte", threshold: 28 }
|
|
)).toBe(false);
|
|
});
|
|
});
|