1import { describe, expect, it } from "vite-plus/test";
2import { ProviderInstanceId } from "@t3tools/contracts";
3
4import {
5 providerModelKey,
6 sortModelsForProviderInstance,
7 sortProviderModelItems,
8} from "./modelOrdering";
9
10const CODEX_WORK_ID = ProviderInstanceId.make("codex_work");
11const CLAUDE_ID = ProviderInstanceId.make("claudeAgent");
12
13describe("model ordering", () => {
14 it("groups favorites first while preserving provider model order inside each group", () => {
15 const models = [
16 { slug: "gpt-5.5" },
17 { slug: "gpt-5.4-mini" },
18 { slug: "crest-alpha" },
19 { slug: "gpt-5.3-codex" },
20 ];
21
22 expect(
23 sortModelsForProviderInstance(models, {
24 favoriteModels: ["gpt-5.5", "gpt-5.4-mini", "crest-alpha"],
25 groupFavorites: true,
26 modelOrder: ["gpt-5.4-mini", "gpt-5.5", "crest-alpha", "gpt-5.3-codex"],
27 }).map((model) => model.slug),
28 ).toEqual(["gpt-5.4-mini", "gpt-5.5", "crest-alpha", "gpt-5.3-codex"]);
29 });
30
31 it("sorts the favorites view by provider order, then provider model order", () => {
32 const items = [
33 { instanceId: CODEX_WORK_ID, slug: "gpt-5.4-mini" },
34 { instanceId: CODEX_WORK_ID, slug: "gpt-5.5" },
35 { instanceId: CODEX_WORK_ID, slug: "crest-alpha" },
36 { instanceId: CLAUDE_ID, slug: "claude-opus-4-6" },
37 ];
38 const favoriteKeys = [
39 providerModelKey(CODEX_WORK_ID, "gpt-5.5"),
40 providerModelKey(CLAUDE_ID, "claude-opus-4-6"),
41 providerModelKey(CODEX_WORK_ID, "gpt-5.4-mini"),
42 providerModelKey(CODEX_WORK_ID, "crest-alpha"),
43 ];
44
45 expect(
46 sortProviderModelItems(items, {
47 favoriteModelKeys: favoriteKeys,
48 instanceOrder: [CODEX_WORK_ID, CLAUDE_ID],
49 }).map((item) => item.slug),
50 ).toEqual(["gpt-5.4-mini", "gpt-5.5", "crest-alpha", "claude-opus-4-6"]);
51 });
52});