ГЛОБАЛЬНЫЙ РЕФАКТОРИНГ АРХИТЕКТУРЫ - Рефакторинг этапов 2.42: вынос finalizeAddressLaneResponse из assistantService в отдельный attempt-bridge (как для living chat), для уменьшения монолита без изменения поведения.
This commit is contained in:
+84
@@ -0,0 +1,84 @@
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
import { runAssistantAddressLaneResponseAttemptRuntime } from "../src/services/assistantAddressLaneResponseAttemptRuntimeAdapter";
|
||||
|
||||
function buildInput(overrides: Record<string, unknown> = {}) {
|
||||
return {
|
||||
sessionId: "asst-1",
|
||||
userMessage: "где хвост по оплате",
|
||||
effectiveAddressUserMessage: "где хвост по оплате",
|
||||
addressLane: {
|
||||
reply_text: "address reply",
|
||||
reply_type: "factual_with_explanation",
|
||||
debug: { extracted_filters: {} }
|
||||
},
|
||||
carryoverMeta: null,
|
||||
llmPreDecomposeMeta: null,
|
||||
knownOrganizations: [],
|
||||
activeOrganization: null,
|
||||
sanitizeOutgoingAssistantText: (value: unknown, fallback = "") => {
|
||||
const text = String(value ?? "").trim();
|
||||
return text || fallback;
|
||||
},
|
||||
buildAddressDebugPayload: () => ({}),
|
||||
buildAddressFollowupOffer: () => null,
|
||||
mergeKnownOrganizations: (value: string[]) => value,
|
||||
toNonEmptyString: (value: unknown) => (typeof value === "string" && value.trim() ? value.trim() : null),
|
||||
appendItem: () => {},
|
||||
getSession: () => ({
|
||||
session_id: "asst-1",
|
||||
updated_at: "",
|
||||
items: [],
|
||||
investigation_state: null
|
||||
}),
|
||||
persistSession: () => {},
|
||||
cloneConversation: (items: unknown[]) => items,
|
||||
logEvent: () => {},
|
||||
messageIdFactory: () => "msg-1",
|
||||
...overrides
|
||||
} as any;
|
||||
}
|
||||
|
||||
describe("assistant address lane response attempt runtime adapter", () => {
|
||||
it("returns delegated runtime response", () => {
|
||||
const runAddressLaneResponseRuntime = vi.fn(() => ({
|
||||
response: { ok: true, lane: "address" },
|
||||
debug: { marker: "v1" }
|
||||
}));
|
||||
|
||||
const response = runAssistantAddressLaneResponseAttemptRuntime(
|
||||
buildInput({ runAddressLaneResponseRuntime })
|
||||
);
|
||||
|
||||
expect(response).toEqual({ ok: true, lane: "address" });
|
||||
expect(runAddressLaneResponseRuntime).toHaveBeenCalledWith(
|
||||
expect.objectContaining({
|
||||
sessionId: "asst-1",
|
||||
userMessage: "где хвост по оплате"
|
||||
})
|
||||
);
|
||||
});
|
||||
|
||||
it("forwards carryover and llm predecompose metadata", () => {
|
||||
const carryoverMeta = { previousReplyType: "partial_coverage" };
|
||||
const llmPreDecomposeMeta = { mode: "supported", confidence: "high" };
|
||||
const runAddressLaneResponseRuntime = vi.fn(() => ({
|
||||
response: { ok: true },
|
||||
debug: {}
|
||||
}));
|
||||
|
||||
runAssistantAddressLaneResponseAttemptRuntime(
|
||||
buildInput({
|
||||
carryoverMeta,
|
||||
llmPreDecomposeMeta,
|
||||
runAddressLaneResponseRuntime
|
||||
})
|
||||
);
|
||||
|
||||
expect(runAddressLaneResponseRuntime).toHaveBeenCalledWith(
|
||||
expect.objectContaining({
|
||||
carryoverMeta,
|
||||
llmPreDecomposeMeta
|
||||
})
|
||||
);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user