import { expect, test } from "bun:test" import path from "node:path" import { createModelPreferenceRepository, decodeModelPreference } from "../src/model-preference" import { tmpdir } from "./fixture/fixture" test("repairs known model preferences and preserves unrelated fields", () => { expect( decodeModelPreference({ unrelated: { keep: true }, recent: [{ providerID: "openai", modelID: "gpt-5", ignored: true }, null], favorite: "malformed", variant: { "openai/gpt-5": "high", default: "default", invalid: 42 }, }), ).toEqual({ unrelated: { keep: true }, recent: [{ providerID: "openai", modelID: "gpt-5" }], favorite: [], variant: { "openai/gpt-5": "high" }, }) }) test("atomically serializes patches and variant updates", async () => { await using tmp = await tmpdir() const file = path.join(tmp.path, "model.json") await Bun.write(file, JSON.stringify({ unrelated: "keep", favorite: [], variant: {} })) const repository = createModelPreferenceRepository(file) const openai = { providerID: "openai", modelID: "org/gpt-5" } const anthropic = { providerID: "anthropic", modelID: "claude/sonnet" } await Promise.all([ repository.patch({ recent: [openai] }), repository.saveVariant(openai, "high"), repository.saveVariant(anthropic, "low"), ]) expect(await Bun.file(file).json()).toEqual({ unrelated: "keep", recent: [openai], favorite: [], variant: { "openai/org/gpt-5": "high", "anthropic/claude/sonnet": "low" }, }) await repository.saveVariant(openai, "default") expect(await repository.resolveVariant(openai)).toBeUndefined() expect((await Bun.file(file).json()).variant).toEqual({ "anthropic/claude/sonnet": "low" }) })