provider-selector-allowed-model-rules.test.ts 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import { describe, expect, test } from "vitest";
  2. import type { AllowedModelRule, Provider } from "@/types/provider";
  3. import { providerSupportsModel } from "@/app/v1/_lib/proxy/provider-selector";
  4. function createProvider(allowedModels: Provider["allowedModels"]): Provider {
  5. return {
  6. id: 1,
  7. name: "provider-1",
  8. isEnabled: true,
  9. providerType: "claude",
  10. groupTag: null,
  11. weight: 1,
  12. priority: 0,
  13. costMultiplier: 1,
  14. allowedModels,
  15. } as Provider;
  16. }
  17. describe("providerSupportsModel", () => {
  18. test("supports advanced rule-based model whitelist matching", () => {
  19. const allowedModels: AllowedModelRule[] = [
  20. { matchType: "prefix", pattern: "claude-opus-" },
  21. { matchType: "suffix", pattern: "-latest" },
  22. ];
  23. expect(providerSupportsModel(createProvider(allowedModels), "claude-opus-4-1")).toBe(true);
  24. expect(providerSupportsModel(createProvider(allowedModels), "gpt-4o-latest")).toBe(true);
  25. expect(providerSupportsModel(createProvider(allowedModels), "claude-sonnet-4-1")).toBe(false);
  26. });
  27. test("keeps backward compatibility with legacy string arrays", () => {
  28. const legacyAllowedModels = ["claude-opus-4-1"] as unknown as Provider["allowedModels"];
  29. expect(providerSupportsModel(createProvider(legacyAllowedModels), "claude-opus-4-1")).toBe(
  30. true
  31. );
  32. expect(providerSupportsModel(createProvider(legacyAllowedModels), "claude-opus-4-2")).toBe(
  33. false
  34. );
  35. });
  36. });