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.
107 lines
3.5 KiB
107 lines
3.5 KiB
import { describe, expect, it } from "vitest";
|
|
import { AxelSelectionBridge, formatPlaceCommitFailure, normalizeAxelPlaceId } from "@/workers/rpa/axel-selection-bridge";
|
|
|
|
describe("AxelSelectionBridge", () => {
|
|
it("resolveSelection 从 googlePlacesResults 绑定 placeId", () => {
|
|
const bridge = new AxelSelectionBridge();
|
|
bridge.ingestSearchResults({
|
|
googlePlacesResults: [
|
|
{
|
|
description: "1234 Warehouse Street, Los Angeles, CA 90001, USA",
|
|
mainText: "1234 Warehouse Street",
|
|
placeId: "ChIJ_test_la",
|
|
secondaryText: "Los Angeles, CA 90001, USA",
|
|
},
|
|
],
|
|
});
|
|
|
|
const binding = bridge.resolveSelection(
|
|
"1234 Warehouse StreetLos Angeles, CA",
|
|
{
|
|
street: "1234 Warehouse Street",
|
|
city: "Los Angeles",
|
|
state: "CA",
|
|
zip: "90001",
|
|
},
|
|
);
|
|
|
|
expect(binding).toEqual({
|
|
label: "1234 Warehouse StreetLos Angeles, CA",
|
|
placeId: "ChIJ_test_la",
|
|
description: "1234 Warehouse Street, Los Angeles, CA 90001, USA",
|
|
});
|
|
});
|
|
|
|
it("记录 place/{id} 200 为 commit", () => {
|
|
const bridge = new AxelSelectionBridge();
|
|
bridge.recordPlaceCommit("ChIJ_commit_ok");
|
|
|
|
expect(bridge.hasPlaceCommit("ChIJ_commit_ok")).toBe(true);
|
|
expect(bridge.getObservedPlaceCommitIds()).toContain("ChIJ_commit_ok");
|
|
});
|
|
|
|
it("normalizeAxelPlaceId 从 base64 复合串提取 ChIJ", () => {
|
|
const raw =
|
|
"EisxMjM0IFdhcmVob3VzZSBTdHJlZXQsIExvcyBBbmdlbGVzLCBDQSwgVVNBIjESLwoUChIJywDT6CXGwoARuoz5HIJe20gQ0gkqFAoSCSEaJHUmxsKAEY2YXFohyZol";
|
|
expect(normalizeAxelPlaceId(raw)).toBe("ChIJywDT6CXGwoARuoz5HIJe20g");
|
|
});
|
|
|
|
it("normalizeAxelPlaceId 截断 ChIJ 后粘连 base64 尾巴", () => {
|
|
const composite =
|
|
"ChIJywDT6CXGwoARuoz5HIJe20gQ0gkqFAoSCSEaJHUmxsKAEY2YXFohyZol";
|
|
expect(normalizeAxelPlaceId(composite)).toBe("ChIJywDT6CXGwoARuoz5HIJe20g");
|
|
});
|
|
|
|
it("resolveSelection 有门牌 query 时优先带门牌的 placeId", () => {
|
|
const bridge = new AxelSelectionBridge();
|
|
bridge.ingestSearchResults({
|
|
googlePlacesResults: [
|
|
{
|
|
description: "Distribution Way, Farmers Branch, TX, USA",
|
|
mainText: "Distribution Way",
|
|
placeId: "ChIJ_generic_way",
|
|
secondaryText: "Farmers Branch, TX, USA",
|
|
},
|
|
{
|
|
description: "5678 Distribution Way, Farmers Branch, TX, USA",
|
|
mainText: "5678 Distribution Way",
|
|
placeId: "ChIJ_numbered_way",
|
|
secondaryText: "Farmers Branch, TX, USA",
|
|
},
|
|
],
|
|
});
|
|
|
|
const binding = bridge.resolveSelection("Distribution WayFarmers Branch, TX", {
|
|
street: "5678 Distribution Way",
|
|
city: "Farmers Branch",
|
|
state: "TX",
|
|
zip: "",
|
|
});
|
|
|
|
expect(binding?.placeId).toBe("ChIJ_numbered_way");
|
|
});
|
|
|
|
it("无 search 结果时 resolveSelection 返回 null", () => {
|
|
const bridge = new AxelSelectionBridge();
|
|
expect(
|
|
bridge.resolveSelection("1234 Warehouse StreetLos Angeles, CA"),
|
|
).toBeNull();
|
|
});
|
|
|
|
it("formatPlaceCommitFailure 区分无请求与 HTTP 错误", () => {
|
|
expect(
|
|
formatPlaceCommitFailure("ChIJ_expected", ["keyboard-bound-0"], {
|
|
committedPlaceIds: [],
|
|
placeNetworkLog: [],
|
|
}),
|
|
).toContain("未发起 GET place 请求");
|
|
|
|
expect(
|
|
formatPlaceCommitFailure("ChIJ_expected", ["pac-item-0"], {
|
|
committedPlaceIds: [],
|
|
placeNetworkLog: [{ placeId: "ChIJ_other", status: 404, url: "", at: 0 }],
|
|
}),
|
|
).toContain("placeId 不匹配");
|
|
});
|
|
});
|