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

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;
});
});