You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
chajia/__tests__/workers/rpa/parked-quote-session.test.ts

75 lines
2.3 KiB

import { describe, expect, it, vi, beforeEach, afterEach } from "vitest";
import type { BrowserContext, Page } from "playwright";
vi.mock("@/workers/rpa/page-prep", () => ({
dismissCookieConsent: vi.fn().mockResolvedValue(undefined),
scrollQuoteWidgetIntoView: vi.fn().mockResolvedValue(undefined),
}));
import {
hasParkedQuoteSession,
parkQuoteSession,
preheatParkedQuoteSession,
releaseAllParkedQuoteSessions,
releaseParkedQuoteSession,
takeParkedQuoteSession,
canPersistParkedQuoteSession,
} from "@/workers/rpa/parked-quote-session";
function mockSession(id: string) {
const page = {
close: vi.fn().mockResolvedValue(undefined),
} as unknown as Page;
const context = {
close: vi.fn().mockResolvedValue(undefined),
} as unknown as BrowserContext;
return { id, page, context };
}
describe("parked-quote-session", () => {
beforeEach(async () => {
vi.stubEnv("RPA_WORKER_ID", "test-worker-1");
await releaseAllParkedQuoteSessions();
});
afterEach(async () => {
await releaseAllParkedQuoteSessions();
vi.unstubAllEnvs();
});
it("park → take 接管同一会话", async () => {
const { id, page, context } = mockSession("sess-a");
await parkQuoteSession(id, page, context);
expect(hasParkedQuoteSession(id)).toBe(true);
const taken = await takeParkedQuoteSession(id);
expect(taken?.page).toBe(page);
expect(hasParkedQuoteSession(id)).toBe(false);
});
it("release 关闭 page/context", async () => {
const { id, page, context } = mockSession("sess-b");
await parkQuoteSession(id, page, context);
expect(await releaseParkedQuoteSession(id)).toBe(true);
expect(page.close).toHaveBeenCalled();
expect(context.close).toHaveBeenCalled();
});
it("take 不存在的 session 返回 null", async () => {
expect(await takeParkedQuoteSession("missing")).toBeNull();
});
it("preheat 对驻留 session 返回 true", async () => {
const { id, page, context } = mockSession("sess-c");
await parkQuoteSession(id, page, context);
expect(await preheatParkedQuoteSession(id)).toBe(true);
});
it("canPersistParkedQuoteSession 需 RPA_WORKER_ID", () => {
vi.stubEnv("RPA_WORKER_ID", "");
expect(canPersistParkedQuoteSession()).toBe(false);
vi.stubEnv("RPA_WORKER_ID", "w1");
expect(canPersistParkedQuoteSession()).toBe(true);
});
});