From 6374a95fb247dd898086ed28bbfe307e444a1d8d Mon Sep 17 00:00:00 2001 From: Christian Klotz Date: Sat, 1 Aug 2026 22:53:41 +0300 Subject: [PATCH] fix(coding-agent): make model reload test deterministic --- .../6999-models-json-hot-reload.test.ts | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/packages/coding-agent/test/suite/regressions/6999-models-json-hot-reload.test.ts b/packages/coding-agent/test/suite/regressions/6999-models-json-hot-reload.test.ts index 9e3c7c842..a009bdbb7 100644 --- a/packages/coding-agent/test/suite/regressions/6999-models-json-hot-reload.test.ts +++ b/packages/coding-agent/test/suite/regressions/6999-models-json-hot-reload.test.ts @@ -1,12 +1,15 @@ -import { writeFileSync } from "node:fs"; +import { mkdtempSync, rmSync, writeFileSync } from "node:fs"; +import { tmpdir } from "node:os"; import { join } from "node:path"; import { setKeybindings, type TUI } from "@earendil-works/pi-tui"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { AuthStorage } from "../../../src/core/auth-storage.ts"; import { KeybindingsManager } from "../../../src/core/keybindings.ts"; +import { SettingsManager } from "../../../src/core/settings-manager.ts"; import { ModelSelectorComponent } from "../../../src/modes/interactive/components/model-selector.ts"; import { initTheme } from "../../../src/modes/interactive/theme/theme.ts"; import { stripAnsi } from "../../../src/utils/ansi.ts"; -import { createHarness, type Harness } from "../harness.ts"; +import { createModelRegistry, getModelRuntime } from "../../model-runtime-test-utils.ts"; function createFakeTui(): TUI { return { @@ -28,7 +31,7 @@ function modelsJson(provider: string, model: string): Record { } describe("issue #6999 models.json hot reload", () => { - let harness: Harness | undefined; + let tempDir: string | undefined; beforeAll(() => { initTheme("dark"); @@ -39,20 +42,23 @@ describe("issue #6999 models.json hot reload", () => { }); afterEach(() => { - harness?.cleanup(); - harness = undefined; + if (tempDir) rmSync(tempDir, { recursive: true, force: true }); + tempDir = undefined; }); it("reloads models.json when opening /model", async () => { - harness = await createHarness({ modelsJson: modelsJson("old-provider", "old-model") }); - expect(harness.session.modelRuntime.getModel("old-provider", "old-model")).toBeDefined(); + tempDir = mkdtempSync(join(tmpdir(), "pi-models-json-hot-reload-")); + const modelsPath = join(tempDir, "models.json"); + writeFileSync(modelsPath, JSON.stringify(modelsJson("old-provider", "old-model"))); + const modelRuntime = getModelRuntime(await createModelRegistry(AuthStorage.inMemory(), modelsPath)); + expect(modelRuntime.getModel("old-provider", "old-model")).toBeDefined(); - writeFileSync(join(harness.tempDir, "models.json"), JSON.stringify(modelsJson("new-provider", "new-model"))); + writeFileSync(modelsPath, JSON.stringify(modelsJson("new-provider", "new-model"))); const selector = new ModelSelectorComponent( createFakeTui(), - harness.getModel(), - harness.settingsManager, - harness.session.modelRuntime, + undefined, + SettingsManager.inMemory(), + modelRuntime, [], () => {}, () => {}, @@ -63,6 +69,6 @@ describe("issue #6999 models.json hot reload", () => { expect(rendered).toContain("new-model [new-provider]"); expect(rendered).toContain("Model catalogs refreshed."); }); - expect(harness.session.modelRuntime.getModel("old-provider", "old-model")).toBeUndefined(); + expect(modelRuntime.getModel("old-provider", "old-model")).toBeUndefined(); }); });