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.
53 lines
1.7 KiB
53 lines
1.7 KiB
import { describe, expect, it } from "vitest";
|
|
import { AddressCommitStateMachine } from "@/workers/rpa/address-adapter/commit-state-machine";
|
|
import { formatDiagnosticsFailure } from "@/workers/rpa/address-adapter/diagnostics";
|
|
import { getRpaAddressMode } from "@/lib/rpa/address-mode";
|
|
|
|
describe("AddressCommitStateMachine", () => {
|
|
it("COMMITTED 可进入下游", () => {
|
|
const sm = new AddressCommitStateMachine();
|
|
sm.transition("COMMITTED");
|
|
expect(sm.canProceedToCargo()).toBe(true);
|
|
expect(() => sm.assertCommittedForDownstream("pickup")).not.toThrow();
|
|
});
|
|
|
|
it("FAILED 禁止进入 cargo", () => {
|
|
const sm = new AddressCommitStateMachine();
|
|
sm.transition("FAILED");
|
|
expect(sm.canProceedToCargo()).toBe(false);
|
|
expect(() => sm.assertCommittedForDownstream("pickup")).toThrow(/COMMITTED/);
|
|
});
|
|
});
|
|
|
|
describe("formatDiagnosticsFailure", () => {
|
|
it("区分 no_place_request", () => {
|
|
const msg = formatDiagnosticsFailure({
|
|
address: "123 Main",
|
|
placeId: "ChIJ_x",
|
|
method: "keyboard",
|
|
events: [],
|
|
placeRequestObserved: false,
|
|
status: "no_place_request",
|
|
commitState: "FAILED",
|
|
});
|
|
expect(msg).toContain("未发起 GET place 请求");
|
|
expect(msg).toContain("selection event");
|
|
});
|
|
});
|
|
|
|
describe("getRpaAddressMode", () => {
|
|
it("默认 real", () => {
|
|
const prev = process.env.RPA_ADDRESS_MODE;
|
|
delete process.env.RPA_ADDRESS_MODE;
|
|
expect(getRpaAddressMode()).toBe("real");
|
|
process.env.RPA_ADDRESS_MODE = prev;
|
|
});
|
|
|
|
it("mock 显式启用", () => {
|
|
const prev = process.env.RPA_ADDRESS_MODE;
|
|
process.env.RPA_ADDRESS_MODE = "mock";
|
|
expect(getRpaAddressMode()).toBe("mock");
|
|
process.env.RPA_ADDRESS_MODE = prev;
|
|
});
|
|
});
|