Files
koc-loop/tests/koc-detail.test.mjs

91 lines
4.4 KiB
JavaScript
Raw Normal View History

import { strict as assert } from "node:assert";
import { readFileSync } from "node:fs";
import test from "node:test";
const source = readFileSync(new URL("../app/admin-app.tsx", import.meta.url), "utf8");
test("KOC 详情弹窗组件:三段式(基本信息 / 绑定账号 / 参与记录)", () => {
const start = source.indexOf("function KocDetailModal");
assert.ok(start > 0, "应存在 KocDetailModal 组件");
const body = source.slice(start, source.indexOf("function RecoveryPage"));
assert.match(body, /KOC详情:\$\{partner\.name\}/);
assert.match(body, /① 基本信息/);
assert.match(body, /② 绑定 KOC 账号(资源)/);
assert.match(body, /③ 参与任务记录/);
assert.match(body, /暂无领取记录/);
// 概览漏斗:领取 → 发布 → 回收完成
assert.match(body, /领取 <b>\{history\.length\}<\/b>/);
assert.match(body, /发布 <b>\{publishedCount\}<\/b>/);
assert.match(body, /回收完成 <b>\{completedCount\}<\/b>/);
// 绑定账号缺失时的兜底文案区分群主与外部KOC
assert.match(body, /群主合作方无需绑定 KOC 资源账号/);
});
test("工作台:按 id 挂载 KOC 详情,操作刷新后内容自动更新", () => {
assert.match(source, /const \[detailPartnerId, setDetailPartnerId\] = useState<string \| null>\(null\);/);
assert.match(
source,
/data\.partners\.find\(\(partner\) => partner\.id === detailPartnerId\)/,
);
assert.match(source, /item\.partner_id === partnerRow\.id/);
assert.match(source, /<KocDetailModal/);
});
test("工作台最近分发:行可点开分发详情,合作方可点开 KOC 详情", () => {
const start = source.indexOf("function OverviewPage");
const body = source.slice(start, source.indexOf("function OwnerLinkRow"));
assert.match(body, /onOpenDetail=\{onOpenDetail\}/);
assert.match(body, /onOpenPartner=\{onOpenPartner\}/);
});
test("分发表/截图回收表:合作方名为 KOC 详情入口且不触发行点击", () => {
const tableStart = source.indexOf("function DistributionTable");
const tableBody = source.slice(tableStart, source.indexOf("type AdminPreviewImage"));
assert.match(tableBody, /onOpenPartner\?: \(partnerId: string\) => void;/);
assert.match(tableBody, /className="koc-link"/);
assert.match(tableBody, /event\.stopPropagation\(\);\s*onOpenPartner\(item\.partner_id\)/);
const shotStart = source.indexOf("function ScreenshotTaskTable");
const shotBody = source.slice(shotStart, source.indexOf("const RESOURCE_PAGE_SIZE"));
assert.match(shotBody, /onOpenPartner\?: \(partnerId: string\) => void;/);
assert.match(shotBody, /onOpenPartner\(item\.partner_id\)/);
});
test("数据回收页:回收队列账号名与截图回收合作方均可点开 KOC 详情", () => {
const start = source.indexOf("function RecoveryPage");
const body = source.slice(start);
assert.match(body, /onOpenPartner: \(partnerId: string\) => void;/);
// 回收队列:账号名(待识别账号兜底)为入口,且阻断行点击冒泡
assert.match(body, /\{item\.account_nickname \|\| "待识别账号"\}\s*<\/button>/);
assert.match(
body,
/event\.stopPropagation\(\);\s*onOpenPartner\(item\.partner_id\)/,
);
// 截图回收表透传
assert.match(body, /<ScreenshotTaskTable\s+distributions=\{taskDistributions\}\s+onOpenPartner=\{onOpenPartner\}/);
});
test("合作方页:合作方名称单元格可点开 KOC 详情", () => {
const start = source.indexOf("function PartnersPage");
const body = source.slice(start, source.indexOf("function ResourcesPage"));
assert.match(body, /onOpenPartner: \(partner: Partner\) => void;/);
assert.match(body, /className="partner-name-cell"/);
assert.match(body, /onClick=\{\(\) => onOpenPartner\(partner\)\}/);
});
test("分发详情弹窗:头部合作方可跳转 KOC 详情", () => {
const start = source.indexOf("function DistributionDetailModal");
const body = source.slice(start, source.indexOf("function KocDetailModal"));
assert.match(body, /onOpenPartner\?: \(partnerId: string\) => void;/);
assert.match(body, /detail-meta-koc/);
assert.match(body, /onOpenPartner\(item\.partner_id\)/);
});
test("KOC 详情样式:入口链接与历史记录列表", () => {
const css = readFileSync(new URL("../app/globals.css", import.meta.url), "utf8");
assert.match(css, /^\.koc-link \{/m);
assert.match(css, /^\.partner-name-cell \{/m);
assert.match(css, /^\.koc-history-list \{/m);
assert.match(css, /^\.koc-summary-strip \{/m);
});