const assert = require("node:assert/strict"); const fs = require("node:fs"); const Module = require("node:module"); const path = require("node:path"); const test = require("node:test"); const ts = require("../node_modules/typescript"); const target = path.resolve(__dirname, "../src/services/api.ts"); let response; const calls = []; const originalLoad = Module._load; Module._load = function (request, parent, isMain) { if (parent?.filename === target && request === "@/requestErrorConfig") return { request: async (url) => { calls.push(url); return response; }, }; return originalLoad.call(this, request, parent, isMain); }; const source = ts.transpileModule(fs.readFileSync(target, "utf8"), { compilerOptions: { module: ts.ModuleKind.CommonJS }, }).outputText; const mod = new Module(target, module); mod.filename = target; mod.paths = module.paths; mod._compile(source, target); const { getList, resourcePaths } = mod.exports; test("comment aggregation transmits source, account, hours and pagination to dedicated endpoint", async () => { response = { data: [{ id: "comment-1" }], total: 201, has_next: true }; const result = await getList({ resource: "creator-comment-aggregation", page: 3, pageSize: 25, filters: { source_type: "owned", source_id: "account/1", hours: 6, unsupported: "ignored", }, }); const query = new URL(calls.at(-1), "https://example.test"); assert.equal(query.pathname, "/creator/comments/aggregation"); assert.equal(query.searchParams.get("source_type"), "owned"); assert.equal(query.searchParams.get("source_id"), "account/1"); assert.equal(query.searchParams.get("hours"), "6"); assert.equal(query.searchParams.get("page"), "3"); assert.equal(query.searchParams.get("page_size"), "25"); assert.equal(query.searchParams.has("unsupported"), false); assert.deepEqual(result, { data: [{ id: "comment-1" }], total: 201, hasNext: true, }); response = { data: [], total: 0, has_next: false }; assert.deepEqual( await getList({ resource: "creator-comment-aggregation", page: 1, pageSize: 25, filters: { source_type: "competitor", source_id: undefined, hours: 24 }, }), { data: [], total: 0, hasNext: false }, ); assert.equal( new URL(calls.at(-1), "https://example.test").searchParams.has("source_id"), false, ); assert.equal(resourcePaths["creator-comments"], "/creator/comments"); }); test("menu and page header expose comment aggregation", () => { const metadata = fs.readFileSync( path.resolve(__dirname, "../src/utils/metadata.tsx"), "utf8", ); assert.match(metadata, /path: '\/creator\/comments', name: '评论聚合'/); assert.match(metadata, /p === '\/creator\/comments', title: '评论聚合'/); });