import { describe, expect, it, vi, afterEach } from "vitest"; import type { Page } from "playwright"; import { shouldKeepBrowserOpen } from "@/lib/rpa/env"; import { dismissCookieConsent, isQuoterWidgetHydrated, } from "@/workers/rpa/page-prep"; describe("page-prep", () => { const envBackup = { ...process.env }; afterEach(() => { process.env = { ...envBackup }; }); it("shouldKeepBrowserOpen:headed 默认保留", () => { process.env.RPA_HEADLESS = "false"; delete process.env.RPA_KEEP_BROWSER_OPEN; expect(shouldKeepBrowserOpen()).toBe(true); }); it("shouldKeepBrowserOpen:显式 false 关闭", () => { process.env.RPA_HEADLESS = "false"; process.env.RPA_KEEP_BROWSER_OPEN = "false"; expect(shouldKeepBrowserOpen()).toBe(false); }); it("dismissCookieConsent:点击 Accept All", async () => { const click = vi.fn().mockResolvedValue(undefined); const page = { getByRole: vi.fn().mockReturnValue({ first: () => ({ isVisible: vi.fn().mockResolvedValue(true), click, }), }), locator: vi.fn().mockReturnValue({ first: () => ({ isVisible: vi.fn().mockResolvedValue(false), click, }), }), waitForTimeout: vi.fn().mockResolvedValue(undefined), evaluate: vi.fn().mockResolvedValue(undefined), } as unknown as Page; await dismissCookieConsent(page); expect(click).toHaveBeenCalled(); }); it("isQuoterWidgetHydrated:骨架屏文案无输入框时为 false", () => { expect(isQuoterWidgetHydrated(0, "Sign up and book now")).toBe(false); }); it("isQuoterWidgetHydrated:有可编辑输入框时为 true", () => { expect(isQuoterWidgetHydrated(1, "Pick up from Search address")).toBe(true); }); it("isQuoterWidgetHydrated:中文提货分区文案时 isQuoterWidgetHydrated 仍依赖输入框", () => { expect(isQuoterWidgetHydrated(0, "从何处取货 送货至")).toBe(false); }); });