| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- 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" })
- })
|