import { JSDOM } from "jsdom"; import { afterEach, describe, expect, test, vi } from "vitest"; import { createContentController } from "../src/content/index"; const doms: JSDOM[] = []; describe("content entry", () => { afterEach(() => { while (doms.length > 0) { doms.pop()?.window.close(); } }); test("bootstraps the detail controller on creator detail urls", () => { const dom = createDom( "https://xingtu.cn/ad/creator/author-homepage/douyin-video/6629661559960371207" ); const detailController = { dispose: vi.fn() }; const detailControllerFactory = vi.fn(() => detailController); const controller = createContentController({ chromeRuntime: { getURL: (value: string) => `chrome-extension://test/${value}` }, detailControllerFactory, document: dom.window.document, logger: createLogger(), window: dom.window }); expect(detailControllerFactory).toHaveBeenCalledTimes(1); expect(controller).toBe(detailController); }); test("returns a no-op controller on unsupported urls", () => { const dom = createDom("https://xingtu.cn/"); const detailControllerFactory = vi.fn(() => ({ dispose: vi.fn() })); const controller = createContentController({ chromeRuntime: { getURL: (value: string) => `chrome-extension://test/${value}` }, detailControllerFactory, document: dom.window.document, logger: createLogger(), window: dom.window }); expect(detailControllerFactory).not.toHaveBeenCalled(); expect(() => controller.dispose()).not.toThrow(); }); }); function createDom(url: string) { const dom = new JSDOM("", { url }); return doms.push(dom), dom; } function createLogger() { return { debug: vi.fn(), info: vi.fn(), warn: vi.fn() }; }