71 lines
2.9 KiB
TypeScript
71 lines
2.9 KiB
TypeScript
import { describe, expect, it, vi } from "vitest";
|
|
import { buildAssistantAddressRuntimeInput } from "../src/services/assistantAddressRuntimeInputBuilder";
|
|
|
|
function buildInput(overrides: Record<string, unknown> = {}) {
|
|
return {
|
|
featureAssistantAddressQueryV1: true,
|
|
sessionId: "asst-1",
|
|
userMessage: "Show overdue docs",
|
|
sessionItems: [],
|
|
payload: {
|
|
llmProvider: "openai",
|
|
useMock: 1,
|
|
context: {
|
|
period_hint: "2020-07-31"
|
|
}
|
|
},
|
|
featureAddressLlmPredecomposeV1: true,
|
|
runAddressLlmPreDecompose: vi.fn(async () => ({})),
|
|
buildAddressLlmPredecomposeContractV1: vi.fn(() => ({})),
|
|
sanitizeAddressMessageForFallback: vi.fn((value: string) => value),
|
|
toNonEmptyString: vi.fn((value: unknown) =>
|
|
typeof value === "string" && value.trim().length > 0 ? value.trim() : null
|
|
),
|
|
resolveAddressFollowupCarryoverContext: vi.fn(() => null),
|
|
resolveAssistantOrchestrationDecision: vi.fn(() => ({ mode: "address_query", runAddressLane: true })),
|
|
buildAddressDialogContinuationContractV2: vi.fn(() => ({})),
|
|
runtimeAnalysisContextAsOfDate: "2020-07-31",
|
|
compactWhitespace: vi.fn((value: string) => value.trim()),
|
|
runAddressLaneAttempt: vi.fn(async () => null),
|
|
isRetryableAddressLimitedResult: vi.fn(() => false),
|
|
finalizeAddressLaneResponse: vi.fn(() => ({ kind: "address" })),
|
|
tryHandleLivingChat: vi.fn(async () => null),
|
|
logEvent: vi.fn(),
|
|
nowIso: vi.fn(() => "2026-04-11T00:00:00.000Z"),
|
|
runAddressOrchestrationRuntime: vi.fn(async () => ({})),
|
|
runAddressToolGateRuntime: vi.fn(async () => ({ handled: false, response: null })),
|
|
runAddressLaneRuntime: vi.fn(async () => ({ handled: false, selection: null, retryAudit: {} })),
|
|
...overrides
|
|
} as any;
|
|
}
|
|
|
|
describe("assistant address runtime input builder", () => {
|
|
it("maps payload provider/useMock/period hint into address runtime input", () => {
|
|
const runtimeInput = buildAssistantAddressRuntimeInput(buildInput());
|
|
|
|
expect(runtimeInput.llmProvider).toBe("openai");
|
|
expect(runtimeInput.useMock).toBe(true);
|
|
expect(runtimeInput.payloadContextPeriodHint).toBe("2020-07-31");
|
|
expect(runtimeInput.sessionId).toBe("asst-1");
|
|
expect(runtimeInput.userMessage).toBe("Show overdue docs");
|
|
});
|
|
|
|
it("keeps empty payload fields safe and preserves runtime callbacks", () => {
|
|
const runAddressLaneAttempt = vi.fn(async () => null);
|
|
const tryHandleLivingChat = vi.fn(async () => null);
|
|
const runtimeInput = buildAssistantAddressRuntimeInput(
|
|
buildInput({
|
|
payload: {},
|
|
runAddressLaneAttempt,
|
|
tryHandleLivingChat
|
|
})
|
|
);
|
|
|
|
expect(runtimeInput.llmProvider).toBeUndefined();
|
|
expect(runtimeInput.useMock).toBe(false);
|
|
expect(runtimeInput.payloadContextPeriodHint).toBeUndefined();
|
|
expect(runtimeInput.runAddressLaneAttempt).toBe(runAddressLaneAttempt);
|
|
expect(runtimeInput.tryHandleLivingChat).toBe(tryHandleLivingChat);
|
|
});
|
|
});
|