feat: add csv exporter
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
import { describe, expect, test } from "vitest";
|
||||
|
||||
import { buildMarketCsv } from "../src/content/market/csv-exporter";
|
||||
import type { MarketRecord } from "../src/content/market/types";
|
||||
|
||||
describe("csv-exporter", () => {
|
||||
test("uses the expected header order", () => {
|
||||
const csv = buildMarketCsv([]);
|
||||
const [headerLine] = csv.split("\n");
|
||||
|
||||
expect(headerLine).toBe(
|
||||
[
|
||||
"达人ID",
|
||||
"达人名称",
|
||||
"地区",
|
||||
"21-60s报价",
|
||||
"单视频看后搜率",
|
||||
"个人视频看后搜率",
|
||||
"插件数据状态"
|
||||
].join(",")
|
||||
);
|
||||
});
|
||||
|
||||
test("escapes commas and quotes", () => {
|
||||
const csv = buildMarketCsv([
|
||||
{
|
||||
authorId: "123",
|
||||
authorName: "Alice, \"A\"",
|
||||
location: "Hangzhou",
|
||||
price21To60s: "450000",
|
||||
status: "success",
|
||||
rates: {
|
||||
singleVideoAfterSearchRate: "0.5%-1%",
|
||||
personalVideoAfterSearchRate: "1% - 3%"
|
||||
}
|
||||
}
|
||||
]);
|
||||
|
||||
const [, rowLine] = csv.split("\n");
|
||||
expect(rowLine).toContain("\"Alice, \"\"A\"\"\"");
|
||||
});
|
||||
|
||||
test("emits empty rate fields plus failed status for failed rows", () => {
|
||||
const csv = buildMarketCsv([
|
||||
{
|
||||
authorId: "123",
|
||||
authorName: "Alice",
|
||||
status: "failed",
|
||||
failureReason: "request-failed"
|
||||
}
|
||||
]);
|
||||
|
||||
const [, rowLine] = csv.split("\n");
|
||||
expect(rowLine).toBe("123,Alice,,,,,failed");
|
||||
});
|
||||
|
||||
test("uses normalized display values in export rows", () => {
|
||||
const csv = buildMarketCsv([
|
||||
{
|
||||
authorId: "123",
|
||||
authorName: "Alice",
|
||||
status: "success",
|
||||
rates: {
|
||||
singleVideoAfterSearchRate: "0.5%-1%",
|
||||
personalVideoAfterSearchRate: "0.02 - 0.1%"
|
||||
}
|
||||
} satisfies MarketRecord
|
||||
]);
|
||||
|
||||
const [, rowLine] = csv.split("\n");
|
||||
expect(rowLine).toContain("0.5% - 1%");
|
||||
expect(rowLine).toContain("0.02% - 0.1%");
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user