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.
81 lines
2.3 KiB
81 lines
2.3 KiB
import { describe, expect, it, vi } from "vitest";
|
|
import {
|
|
isFlockLoggedInQuoteForm,
|
|
selectFlockComboboxOption,
|
|
} from "@/workers/rpa/flock/logged-in-form";
|
|
|
|
function mockLocator(opts: {
|
|
count?: number;
|
|
visible?: boolean;
|
|
click?: () => Promise<void>;
|
|
}) {
|
|
const click = opts.click ?? (async () => undefined);
|
|
return {
|
|
first: () => mockLocator(opts),
|
|
count: async () => opts.count ?? 0,
|
|
isVisible: async () => opts.visible ?? false,
|
|
click,
|
|
waitFor: async () => undefined,
|
|
fill: async () => undefined,
|
|
getAttribute: async () => null,
|
|
scrollIntoViewIfNeeded: async () => undefined,
|
|
page: () => ({ isClosed: () => false }),
|
|
};
|
|
}
|
|
|
|
describe("flock logged-in form", () => {
|
|
it("识别 Let's build a quote 为登录后表单", async () => {
|
|
const heading = mockLocator({ count: 1, visible: true });
|
|
const page = {
|
|
getByTestId: () => mockLocator({ count: 0 }),
|
|
getByRole: (role: string) => {
|
|
if (role === "heading") return heading;
|
|
return mockLocator({ count: 0 });
|
|
},
|
|
getByText: () => mockLocator({ count: 0 }),
|
|
};
|
|
expect(await isFlockLoggedInQuoteForm(page as never)).toBe(true);
|
|
});
|
|
|
|
it("combobox 按候选选 option", async () => {
|
|
const clicks: string[] = [];
|
|
const option70 = mockLocator({
|
|
count: 1,
|
|
visible: true,
|
|
click: async () => {
|
|
clicks.push("70");
|
|
},
|
|
});
|
|
const combo = mockLocator({
|
|
count: 1,
|
|
visible: true,
|
|
click: async () => {
|
|
clicks.push("open");
|
|
},
|
|
});
|
|
const page = {
|
|
getByRole: (role: string, opts?: { name?: RegExp | string }) => {
|
|
if (role === "combobox") return combo;
|
|
if (role === "button") return mockLocator({ count: 0 });
|
|
if (role === "option") {
|
|
const name = String(opts?.name ?? "");
|
|
if (name.includes("70") || name === "70") return option70;
|
|
return mockLocator({ count: 0 });
|
|
}
|
|
return mockLocator({ count: 0 });
|
|
},
|
|
waitForTimeout: async () => undefined,
|
|
keyboard: { press: async () => undefined },
|
|
};
|
|
|
|
const ok = await selectFlockComboboxOption(
|
|
page as never,
|
|
/Freight Class/i,
|
|
["70", "50"],
|
|
);
|
|
expect(ok).toBe(true);
|
|
expect(clicks).toContain("open");
|
|
expect(clicks).toContain("70");
|
|
});
|
|
});
|