63 lines
1.8 KiB
TypeScript
63 lines
1.8 KiB
TypeScript
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()
|
|
};
|
|
}
|