import { describe, expect, test, vi } from "vitest"; import { registerBackgroundMessageHandler } from "../src/background/index"; describe("background-index", () => { test("downloads csv files when the content script sends a download message", async () => { const listeners: Array< (message: unknown, sender: unknown, sendResponse: (response: unknown) => void) => boolean | void > = []; const download = vi.fn(async () => undefined); const sendResponse = vi.fn(); registerBackgroundMessageHandler({ downloads: { download }, runtime: { onMessage: { addListener(listener) { listeners.push(listener); } } } }); expect(listeners).toHaveLength(1); const result = listeners[0]( { csv: "列1,列2\n值1,值2", filename: "market.csv", type: "download-market-csv" }, {}, sendResponse ); expect(result).toBe(true); await new Promise((resolve) => setTimeout(resolve, 0)); expect(download).toHaveBeenCalledTimes(1); expect(download).toHaveBeenCalledWith( expect.objectContaining({ filename: "market.csv", saveAs: false, url: expect.stringContaining("data:text/csv;charset=utf-8,") }) ); expect(sendResponse).toHaveBeenCalledWith({ ok: true }); }); test("responds to auth:get-state with auth status", async () => { const listeners: Array< (message: unknown, sender: unknown, sendResponse: (response: unknown) => void) => boolean | void > = []; const sendResponse = vi.fn(); registerBackgroundMessageHandler( { runtime: { onMessage: { addListener(listener) { listeners.push(listener); } } } }, { authController: { getAccessToken: vi.fn(), getAuthState: vi.fn(async () => ({ isAuthenticated: false })), signIn: vi.fn(), signOut: vi.fn() } } ); const result = listeners[0]({ type: "auth:get-state" }, {}, sendResponse); expect(result).toBe(true); await new Promise((resolve) => setTimeout(resolve, 0)); expect(sendResponse).toHaveBeenCalledWith({ ok: true, type: "auth:state", value: { isAuthenticated: false } }); }); test("responds to auth:get-access-token with the current token", async () => { const listeners: Array< (message: unknown, sender: unknown, sendResponse: (response: unknown) => void) => boolean | void > = []; const sendResponse = vi.fn(); registerBackgroundMessageHandler( { runtime: { onMessage: { addListener(listener) { listeners.push(listener); } } } }, { authController: { getAccessToken: vi.fn(async () => "test-access-token"), getAuthState: vi.fn(), signIn: vi.fn(), signOut: vi.fn() } } ); const result = listeners[0]( { type: "auth:get-access-token" }, {}, sendResponse ); expect(result).toBe(true); await new Promise((resolve) => setTimeout(resolve, 0)); expect(sendResponse).toHaveBeenCalledWith({ ok: true, type: "auth:token", value: { accessToken: "test-access-token" } }); }); });