test: dedupe sessions command tests and cover active filtering

This commit is contained in:
Peter Steinberger
2026-02-18 05:30:51 +00:00
parent 23f2150190
commit e3292b9af1
3 changed files with 170 additions and 128 deletions

View File

@@ -1,50 +1,35 @@
import fs from "node:fs";
import os from "node:os";
import path from "node:path";
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
import { mockSessionsConfig, runSessionsJson, writeStore } from "./sessions.test-helpers.js";
vi.mock("../config/config.js", async (importOriginal) => {
const actual = await importOriginal<typeof import("../config/config.js")>();
return {
...actual,
loadConfig: () => ({
agents: {
defaults: {
model: { primary: "pi:opus" },
models: { "pi:opus": {} },
contextTokens: 32000,
},
},
}),
};
});
mockSessionsConfig();
import { sessionsCommand } from "./sessions.js";
const makeRuntime = () => {
const logs: string[] = [];
return {
runtime: {
log: (msg: unknown) => logs.push(String(msg)),
error: (msg: unknown) => {
throw new Error(String(msg));
},
exit: (code: number) => {
throw new Error(`exit ${code}`);
},
},
logs,
} as const;
type SessionsJsonPayload = {
sessions?: Array<{
key: string;
model?: string | null;
}>;
};
const writeStore = (data: unknown) => {
const file = path.join(
os.tmpdir(),
`sessions-model-${Date.now()}-${Math.random().toString(16).slice(2)}.json`,
async function resolveSubagentModel(
runtimeFields: Record<string, unknown>,
sessionId: string,
): Promise<string | null | undefined> {
const store = writeStore(
{
"agent:research:subagent:demo": {
sessionId,
updatedAt: Date.now() - 2 * 60_000,
...runtimeFields,
},
},
"sessions-model",
);
fs.writeFileSync(file, JSON.stringify(data, null, 2));
return file;
};
const payload = await runSessionsJson<SessionsJsonPayload>(sessionsCommand, store);
return payload.sessions?.find((row) => row.key === "agent:research:subagent:demo")?.model;
}
describe("sessionsCommand model resolution", () => {
beforeEach(() => {
@@ -57,52 +42,22 @@ describe("sessionsCommand model resolution", () => {
});
it("prefers runtime model fields for subagent sessions in JSON output", async () => {
const store = writeStore({
"agent:research:subagent:demo": {
sessionId: "subagent-1",
updatedAt: Date.now() - 2 * 60_000,
const model = await resolveSubagentModel(
{
modelProvider: "openai-codex",
model: "gpt-5.3-codex",
modelOverride: "pi:opus",
},
});
const { runtime, logs } = makeRuntime();
await sessionsCommand({ store, json: true }, runtime);
fs.rmSync(store);
const payload = JSON.parse(logs[0] ?? "{}") as {
sessions?: Array<{
key: string;
model?: string | null;
}>;
};
const subagent = payload.sessions?.find((row) => row.key === "agent:research:subagent:demo");
expect(subagent?.model).toBe("gpt-5.3-codex");
"subagent-1",
);
expect(model).toBe("gpt-5.3-codex");
});
it("falls back to modelOverride when runtime model is missing", async () => {
const store = writeStore({
"agent:research:subagent:demo": {
sessionId: "subagent-2",
updatedAt: Date.now() - 2 * 60_000,
modelOverride: "openai-codex/gpt-5.3-codex",
},
});
const { runtime, logs } = makeRuntime();
await sessionsCommand({ store, json: true }, runtime);
fs.rmSync(store);
const payload = JSON.parse(logs[0] ?? "{}") as {
sessions?: Array<{
key: string;
model?: string | null;
}>;
};
const subagent = payload.sessions?.find((row) => row.key === "agent:research:subagent:demo");
expect(subagent?.model).toBe("gpt-5.3-codex");
const model = await resolveSubagentModel(
{ modelOverride: "openai-codex/gpt-5.3-codex" },
"subagent-2",
);
expect(model).toBe("gpt-5.3-codex");
});
});