1import { ProviderDriverKind } from "@t3tools/contracts";
2import { describe, expect, it } from "vite-plus/test";
3
4import { formatProviderUpdateRequiredNotice } from "./providerUpdateRequiredModels.ts";
5
6describe("formatProviderUpdateRequiredNotice", () => {
7 it("names the CLI and the version that unlocks every listed model", () => {
8 expect(
9 formatProviderUpdateRequiredNotice({
10 driver: ProviderDriverKind.make("claudeAgent"),
11 updateRequiredModels: [
12 { slug: "a", name: "Model A", minVersion: "2.1.9" },
13 { slug: "b", name: "Model B", minVersion: "2.1.10" },
14 ],
15 }),
16 ).toBe("Update Claude Code to v2.1.10 or newer to use Model A and Model B.");
17 expect(
18 formatProviderUpdateRequiredNotice({ driver: ProviderDriverKind.make("codex") }),
19 ).toBeNull();
20 });
21
22 it("names only the gated models a search matches", () => {
23 const provider = {
24 driver: ProviderDriverKind.make("claudeAgent"),
25 updateRequiredModels: [
26 { slug: "claude-a", name: "Model A", minVersion: "2.1.9" },
27 { slug: "claude-b", name: "Model B", minVersion: "2.1.10" },
28 ],
29 };
30 expect(formatProviderUpdateRequiredNotice(provider, " model a ")).toBe(
31 "Update Claude Code to v2.1.9 or newer to use Model A.",
32 );
33 expect(formatProviderUpdateRequiredNotice(provider, "gpt")).toBeNull();
34 });
35
36 it("names the release, not a prerelease of it", () => {
37 expect(
38 formatProviderUpdateRequiredNotice({
39 driver: ProviderDriverKind.make("codex"),
40 updateRequiredModels: [
41 { slug: "a", name: "A", minVersion: "2.1.0-beta" },
42 { slug: "b", name: "B", minVersion: "2.1.0" },
43 ],
44 }),
45 ).toBe("Update the Codex CLI to v2.1.0 or newer to use A and B.");
46 });
47});