131 lines · 3.4 KB · TypeScript
RawDownload
import { describe, expect, it } from "vite-plus/test"; import { buildModelPickerSearchText, scoreModelPickerSearch } from "./modelPickerSearch"; describe("buildModelPickerSearchText", () => {  it("builds provider-agnostic search text from generic fields", () => {    expect(      buildModelPickerSearchText({        driverKind: "opencode",        providerDisplayName: "opencode",        name: "Claude Opus 4.7",        subProvider: "GitHub Copilot",      }),    ).toBe("claude opus 4.7 github copilot opencode opencode");  });}); describe("scoreModelPickerSearch", () => {  it("matches typo-tolerant multi-token queries", () => {    expect(      scoreModelPickerSearch(        {          driverKind: "opencode",          providerDisplayName: "opencode",          name: "Claude Opus 4.7",          subProvider: "GitHub Copilot",        },        "coplt op",      ),    ).not.toBeNull();  });   it("rejects results when any query token does not match", () => {    expect(      scoreModelPickerSearch(        {          driverKind: "codex",          providerDisplayName: "codex",          name: "GPT-5 Codex",        },        "coplt op",      ),    ).toBeNull();  });   it("ranks exact token matches ahead of fuzzier matches", () => {    const exactScore = scoreModelPickerSearch(      {        driverKind: "opencode",        providerDisplayName: "opencode",        name: "Claude Opus 4.7",        subProvider: "GitHub Copilot",      },      "copilot opus",    );    const fuzzyScore = scoreModelPickerSearch(      {        driverKind: "opencode",        providerDisplayName: "opencode",        name: "Claude Opus 4.7",        subProvider: "GitHub Copilot",      },      "coplt op",    );     expect(exactScore).not.toBeNull();    expect(fuzzyScore).not.toBeNull();    expect(exactScore!).toBeLessThan(fuzzyScore!);  });   it("gives favorite models a strong enough ranking boost for partial queries", () => {    const favoriteScore = scoreModelPickerSearch(      {        driverKind: "claudeAgent",        providerDisplayName: "Claude",        name: "Claude Opus 4.7",        isFavorite: true,      },      "opu",    );    const nonFavoriteScore = scoreModelPickerSearch(      {        driverKind: "cursor",        providerDisplayName: "Cursor",        name: "Opus 4.5",      },      "opu",    );     expect(favoriteScore).not.toBeNull();    expect(nonFavoriteScore).not.toBeNull();    expect(favoriteScore!).toBeLessThan(nonFavoriteScore!);  });   it("does not let the favorite boost outrank clearly better textual matches", () => {    const favoriteScore = scoreModelPickerSearch(      {        driverKind: "claudeAgent",        providerDisplayName: "Claude",        name: "Claude Opus 4.7",        isFavorite: true,      },      "opus 4.7",    );    const nonFavoriteExactScore = scoreModelPickerSearch(      {        driverKind: "cursor",        providerDisplayName: "Cursor",        name: "Opus 4.7",      },      "opus 4.7",    );     expect(favoriteScore).not.toBeNull();    expect(nonFavoriteExactScore).not.toBeNull();    expect(nonFavoriteExactScore!).toBeLessThan(favoriteScore!);  });   it("matches a custom instance's display name against its models", () => {    expect(      scoreModelPickerSearch(        {          driverKind: "codex",          providerDisplayName: "Codex Personal",          name: "GPT-5 Codex",        },        "personal",      ),    ).not.toBeNull();  });});

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t