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.
75 lines
2.3 KiB
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);
|
|
});
|
|
});
|