AkurAI Build
Menu

popagent

public

Latest change 6edc7e928c57dab23c0973ed3f7ee70b3ebb72d5 - Initial popagent baseline by AkurAI Build

import { describe, expect, test } from "bun:test";
import { filterModels, groupModels, modelLabel, providerLabel } from "./model-picker";

const models = [
  "high-coding",
  "cx/gpt-5.6-sol",
  "cx/gpt-5.6-sol-review",
  "cc/claude-sonnet-5",
  "openrouter/cohere/north-mini-code:free",
];

describe("model picker presentation", () => {
  test("turns route identifiers into compact human labels", () => {
    expect(modelLabel("cx/gpt-5.6-sol")).toBe("GPT 5.6 Sol");
    expect(modelLabel("cc/claude-sonnet-5")).toBe("Claude Sonnet 5");
    expect(modelLabel("high-coding")).toBe("High Coding");
  });

  test("uses recognizable provider labels", () => {
    expect(providerLabel("cx/gpt-5.6-sol")).toBe("Codex");
    expect(providerLabel("openrouter/cohere/north-mini-code:free")).toBe("OpenRouter");
    expect(providerLabel("high-coding")).toBe("Routes");
  });

  test("groups routes in first-seen provider order", () => {
    expect(groupModels(models).map((group) => [group.provider, group.models])).toEqual([
      ["Routes", ["high-coding"]],
      ["Codex", ["cx/gpt-5.6-sol", "cx/gpt-5.6-sol-review"]],
      ["Claude", ["cc/claude-sonnet-5"]],
      ["OpenRouter", ["openrouter/cohere/north-mini-code:free"]],
    ]);
  });

  test("searches friendly names, providers, and raw route ids", () => {
    expect(filterModels(models, "sonnet")).toEqual(["cc/claude-sonnet-5"]);
    expect(filterModels(models, "codex")).toEqual(["cx/gpt-5.6-sol", "cx/gpt-5.6-sol-review"]);
    expect(filterModels(models, "openrouter/cohere")).toEqual(["openrouter/cohere/north-mini-code:free"]);
  });
});