provider-allowed-model-schema.test.ts 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import { describe, expect, it } from "vitest";
  2. import { PROVIDER_RULE_LIMITS } from "@/lib/constants/provider.constants";
  3. import {
  4. PROVIDER_ALLOWED_MODEL_RULE_INPUT_LIST_SCHEMA,
  5. PROVIDER_ALLOWED_MODEL_RULE_SCHEMA,
  6. } from "@/lib/provider-allowed-model-schema";
  7. const { MAX_ITEMS: MAX_PROVIDER_RULES, MAX_TEXT_LENGTH: MAX_PROVIDER_RULE_TEXT_LENGTH } =
  8. PROVIDER_RULE_LIMITS;
  9. function buildAllowedModelRules(count: number) {
  10. return Array.from({ length: count }, (_, index) => ({
  11. matchType: "exact" as const,
  12. pattern: `model-${index}`,
  13. }));
  14. }
  15. describe("provider-allowed-model-schema", () => {
  16. it("accepts match patterns longer than 255 characters when still within the new cap", () => {
  17. const result = PROVIDER_ALLOWED_MODEL_RULE_SCHEMA.safeParse({
  18. matchType: "exact",
  19. pattern: "m".repeat(MAX_PROVIDER_RULE_TEXT_LENGTH),
  20. });
  21. expect(result.success).toBe(true);
  22. });
  23. it("accepts up to 100000 allowlist rules", () => {
  24. const result = PROVIDER_ALLOWED_MODEL_RULE_INPUT_LIST_SCHEMA.safeParse(
  25. buildAllowedModelRules(MAX_PROVIDER_RULES)
  26. );
  27. expect(result.success).toBe(true);
  28. });
  29. it("rejects more than 100000 allowlist rules", () => {
  30. const result = PROVIDER_ALLOWED_MODEL_RULE_INPUT_LIST_SCHEMA.safeParse(
  31. buildAllowedModelRules(MAX_PROVIDER_RULES + 1)
  32. );
  33. expect(result.success).toBe(false);
  34. });
  35. });