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.
106 lines
3.2 KiB
106 lines
3.2 KiB
import { describe, expect, it, vi, beforeEach } from "vitest";
|
|
|
|
vi.mock("@/lib/axel/candidates", () => ({
|
|
resolveAxelMothershipCandidates: vi.fn(),
|
|
}));
|
|
|
|
vi.mock("@/modules/address/candidates-cache", () => ({
|
|
loadAddressCandidatesCache: vi.fn(),
|
|
saveAddressCandidatesCache: vi.fn(),
|
|
}));
|
|
|
|
import { resolveMothershipCandidates } from "@/modules/address/mothership-candidates";
|
|
import { resolveAxelMothershipCandidates } from "@/lib/axel/candidates";
|
|
import {
|
|
loadAddressCandidatesCache,
|
|
saveAddressCandidatesCache,
|
|
} from "@/modules/address/candidates-cache";
|
|
|
|
describe("resolveMothershipCandidates", () => {
|
|
beforeEach(() => {
|
|
vi.clearAllMocks();
|
|
vi.mocked(loadAddressCandidatesCache).mockResolvedValue(null);
|
|
vi.mocked(saveAddressCandidatesCache).mockResolvedValue(undefined);
|
|
});
|
|
const input = {
|
|
pickup: {
|
|
street: "5678 Distribution Dr",
|
|
city: "Dallas",
|
|
state: "TX",
|
|
zip: "75201",
|
|
},
|
|
delivery: {
|
|
street: "1234 Warehouse Blvd",
|
|
city: "Los Angeles",
|
|
state: "CA",
|
|
zip: "90001",
|
|
},
|
|
};
|
|
|
|
it("非 mock 模式统一走 axel search", async () => {
|
|
process.env.RPA_MOCK_MODE = "false";
|
|
vi.mocked(resolveAxelMothershipCandidates).mockResolvedValue({
|
|
pickup_candidates: [
|
|
{
|
|
option_id: "ChIJpickup",
|
|
display_label: "5678 Distribution Dr, Dallas, TX 75201",
|
|
formatted_address: "5678 Distribution Dr, Dallas, TX 75201",
|
|
street: "5678 Distribution Dr",
|
|
city: "Dallas",
|
|
state: "TX",
|
|
zip: "75201",
|
|
},
|
|
],
|
|
delivery_candidates: [
|
|
{
|
|
option_id: "ChIJdelivery",
|
|
display_label: "1234 Warehouse Blvd, Los Angeles, CA 90001",
|
|
formatted_address: "1234 Warehouse Blvd, Los Angeles, CA 90001",
|
|
street: "1234 Warehouse Blvd",
|
|
city: "Los Angeles",
|
|
state: "CA",
|
|
zip: "90001",
|
|
},
|
|
],
|
|
});
|
|
|
|
const result = await resolveMothershipCandidates(input);
|
|
expect(resolveAxelMothershipCandidates).toHaveBeenCalledWith(input);
|
|
expect(saveAddressCandidatesCache).toHaveBeenCalled();
|
|
expect(result.pickup_candidates[0].option_id).toBe("ChIJpickup");
|
|
});
|
|
|
|
it("命中缓存时不调用 axel", async () => {
|
|
process.env.RPA_MOCK_MODE = "false";
|
|
vi.mocked(loadAddressCandidatesCache).mockResolvedValue({
|
|
pickup_candidates: [
|
|
{
|
|
option_id: "ChIJcached-pickup",
|
|
display_label: "cached pickup",
|
|
formatted_address: "cached pickup",
|
|
street: "5678 Distribution Dr",
|
|
city: "Dallas",
|
|
state: "TX",
|
|
zip: "75201",
|
|
},
|
|
],
|
|
delivery_candidates: [
|
|
{
|
|
option_id: "ChIJcached-delivery",
|
|
display_label: "cached delivery",
|
|
formatted_address: "cached delivery",
|
|
street: "1234 Warehouse Blvd",
|
|
city: "Los Angeles",
|
|
state: "CA",
|
|
zip: "90001",
|
|
},
|
|
],
|
|
});
|
|
|
|
const result = await resolveMothershipCandidates(input);
|
|
expect(resolveAxelMothershipCandidates).not.toHaveBeenCalled();
|
|
expect(saveAddressCandidatesCache).not.toHaveBeenCalled();
|
|
expect(result.pickup_candidates[0].option_id).toBe("ChIJcached-pickup");
|
|
});
|
|
});
|