// @vitest-environment jsdom // @vitest-environment-options {"url":"https://www.xingtu.cn/ad/creator/market"} import { afterEach, beforeEach, describe, expect, test, vi } from "vitest"; describe("market-page-bridge", () => { beforeEach(() => { document.body.innerHTML = '
'; document.documentElement.removeAttribute("data-sces-market-request-snapshot"); vi.spyOn(window, "setInterval").mockReturnValue(0 as unknown as number); }); afterEach(() => { delete ( window as Window & { __SCES_MARKET_PAGE_BRIDGE_INSTALLED__?: boolean; } ).__SCES_MARKET_PAGE_BRIDGE_INSTALLED__; vi.restoreAllMocks(); vi.resetModules(); }); test("ignores non-search market list responses when capturing the export snapshot", async () => { const originalFetch = vi.fn(async () => ({ clone() { return this; }, json: async () => ({ authors: [ { attribute_datas: { nickname: "推荐达人" }, star_id: "recommend-1" } ], pagination: { limit: 20, page: 1, total_count: 20 } }) })); ( window as Window & { fetch: typeof fetch; } ).fetch = originalFetch as unknown as typeof fetch; await import("../src/content/market/page-bridge"); await window.fetch("/gw/api/gauthor/demander_get_recommend_author_lists_v2", { headers: { Accept: "application/json, text/plain, */*" }, method: "GET" }); await Promise.resolve(); await Promise.resolve(); expect( document.documentElement.getAttribute("data-sces-market-request-snapshot") ).toBeNull(); }); test("captures the search_for_author_square request for silent export", async () => { const originalFetch = vi.fn(async () => ({ clone() { return this; }, json: async () => ({ authors: [ { attribute_datas: { nickname: "搜索达人" }, star_id: "search-1" } ], pagination: { limit: 20, page: 1, total_count: 20 } }) })); ( window as Window & { fetch: typeof fetch; } ).fetch = originalFetch as unknown as typeof fetch; await import("../src/content/market/page-bridge"); await window.fetch("/gw/api/gsearch/search_for_author_square", { body: JSON.stringify({ page_param: { page: "1" } }), headers: { "Content-Type": "application/json" }, method: "POST" }); await Promise.resolve(); await Promise.resolve(); expect( JSON.parse( document.documentElement.getAttribute( "data-sces-market-request-snapshot" ) ?? "null" ) ).toEqual( expect.objectContaining({ body: JSON.stringify({ page_param: { page: "1" } }), method: "POST", url: "/gw/api/gsearch/search_for_author_square" }) ); }); });