Files
diegosouzapw--omniroute/tests/unit/service-context-handoff.test.ts
2026-07-13 13:39:12 +08:00

99 lines
3.4 KiB
TypeScript

import { describe, it } from "node:test";
import assert from "node:assert/strict";
const mod = await import("../../open-sse/services/contextHandoff.ts");
describe("contextHandoff helpers", () => {
describe("selectMessagesForSummary", () => {
it("returns messages within limit", () => {
const messages = [
{ role: "system", content: "You are helpful." },
{ role: "user", content: "Hello" },
{ role: "assistant", content: "Hi there!" },
];
const result = mod.selectMessagesForSummary(messages, 10);
assert.equal(result.length, 3);
});
it("preserves system messages and limits non-system", () => {
const messages = [
{ role: "system", content: "System prompt" },
{ role: "user", content: "msg1" },
{ role: "assistant", content: "reply1" },
{ role: "user", content: "msg2" },
{ role: "assistant", content: "reply2" },
];
const result = mod.selectMessagesForSummary(messages, 2);
// Should keep system + last 2 non-system
assert.equal(result.length, 3);
assert.equal(result[0].role, "system");
});
it("filters out null/invalid messages", () => {
const messages = [null, { role: "user", content: "valid" }, undefined, 42];
const result = mod.selectMessagesForSummary(messages as any, 10);
assert.equal(result.length, 1);
});
it("returns empty array for empty input", () => {
const result = mod.selectMessagesForSummary([], 10);
assert.equal(result.length, 0);
});
});
describe("parseHandoffJSON", () => {
it("parses valid handoff JSON", () => {
const content = JSON.stringify({
summary: "Working on auth module",
keyDecisions: ["Use JWT", "Short expiry"],
taskProgress: "50% complete",
activeEntities: ["auth.ts", "middleware.ts"],
});
const result = mod.parseHandoffJSON(content);
assert.notEqual(result, null);
assert.equal(result!.summary, "Working on auth module");
assert.equal(result!.keyDecisions.length, 2);
assert.equal(result!.taskProgress, "50% complete");
});
it("returns null for empty summary", () => {
const content = JSON.stringify({ summary: "", keyDecisions: [] });
const result = mod.parseHandoffJSON(content);
assert.equal(result, null);
});
it("returns null for invalid JSON", () => {
const result = mod.parseHandoffJSON("not json at all");
assert.equal(result, null);
});
it("truncates long summary", () => {
const longSummary = "x".repeat(5000);
const content = JSON.stringify({ summary: longSummary });
const result = mod.parseHandoffJSON(content);
assert.notEqual(result, null);
assert.ok(result!.summary.length <= 2000);
});
it("normalizes keyDecisions array", () => {
const content = JSON.stringify({
summary: "Test",
keyDecisions: ["valid", "", 123, null, "also valid"],
});
const result = mod.parseHandoffJSON(content);
assert.notEqual(result, null);
assert.equal(result!.keyDecisions.length, 2);
});
});
describe("constants", () => {
it("HANDOFF_WARNING_THRESHOLD is 0.85", () => {
assert.equal(mod.HANDOFF_WARNING_THRESHOLD, 0.85);
});
it("HANDOFF_EXHAUSTION_THRESHOLD is 0.95", () => {
assert.equal(mod.HANDOFF_EXHAUSTION_THRESHOLD, 0.95);
});
});
});