NODEDC_1C/llm_normalizer/backend/tests/sessionBackwardCompat.test.ts

81 lines
3.1 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { AssistantSessionStore } from "../src/services/assistantSessionStore";
import { createEmptyInvestigationState } from "../src/services/investigationState";
describe("assistant session backward compatibility", () => {
it("lazy-upgrades legacy session objects without investigation_state", () => {
const store = new AssistantSessionStore();
const sessionsMap = (store as unknown as { sessions: Map<string, unknown> }).sessions;
const sessionId = "legacy-session-1";
sessionsMap.set(sessionId, {
session_id: sessionId,
updated_at: "2026-03-25T10:00:00.000Z",
items: []
});
const session = store.getSession(sessionId);
expect(session).toBeTruthy();
expect(session?.session_id).toBe(sessionId);
expect(Array.isArray(session?.items)).toBe(true);
expect(session?.investigation_state?.schema_version).toBe("investigation_state_v1");
expect(session?.address_navigation_state?.schema_version).toBe("address_navigation_state_v1");
});
it("normalizes malformed legacy sessions with missing items array", () => {
const store = new AssistantSessionStore();
const sessionsMap = (store as unknown as { sessions: Map<string, unknown> }).sessions;
const sessionId = "legacy-session-2";
sessionsMap.set(sessionId, {
session_id: sessionId
});
const ensured = store.ensureSession(sessionId);
expect(ensured.session_id).toBe(sessionId);
expect(Array.isArray(ensured.items)).toBe(true);
expect(ensured.items.length).toBe(0);
expect(ensured.investigation_state?.schema_version).toBe("investigation_state_v1");
expect(ensured.address_navigation_state?.schema_version).toBe("address_navigation_state_v1");
});
it("preserves optional stage2 problem_unit_state in session clone flow", () => {
const store = new AssistantSessionStore();
const sessionsMap = (store as unknown as { sessions: Map<string, unknown> }).sessions;
const sessionId = "legacy-session-3";
const baseState = createEmptyInvestigationState(sessionId, "2026-03-26T10:00:00.000Z");
sessionsMap.set(sessionId, {
session_id: sessionId,
updated_at: "2026-03-26T10:00:00.000Z",
items: [],
investigation_state: {
...baseState,
status: "active",
problem_unit_state: {
active_problem_units: ["pu-1", "pu-2"],
resolved_problem_units: ["pu-0"],
problem_unit_backlinks: [
{
problem_unit_id: "pu-1",
entity_backlinks: [
{
entity: "counterparty",
id: "cp-1"
}
]
}
],
focus_problem_types: ["broken_chain_segment"]
}
}
});
const session = store.getSession(sessionId);
expect(session).toBeTruthy();
expect(session?.investigation_state?.problem_unit_state?.active_problem_units).toEqual(["pu-1", "pu-2"]);
expect(session?.investigation_state?.problem_unit_state?.focus_problem_types).toEqual(["broken_chain_segment"]);
expect(session?.address_navigation_state?.schema_version).toBe("address_navigation_state_v1");
});
});