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();  });});