provider-model-redirect-schema.test.ts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import { describe, expect, it } from "vitest";
  2. import { PROVIDER_RULE_LIMITS } from "@/lib/constants/provider.constants";
  3. import {
  4. PROVIDER_MODEL_REDIRECT_RULE_LIST_SCHEMA,
  5. PROVIDER_MODEL_REDIRECT_RULE_SCHEMA,
  6. } from "@/lib/provider-model-redirect-schema";
  7. const { MAX_ITEMS: MAX_PROVIDER_RULES, MAX_TEXT_LENGTH: MAX_PROVIDER_RULE_TEXT_LENGTH } =
  8. PROVIDER_RULE_LIMITS;
  9. function buildRedirectRules(count: number) {
  10. return Array.from({ length: count }, (_, index) => ({
  11. matchType: "exact" as const,
  12. source: `source-${index}`,
  13. target: `target-${index}`,
  14. }));
  15. }
  16. describe("provider-model-redirect-schema", () => {
  17. it("accepts source and target values longer than 255 characters when still within the new cap", () => {
  18. const result = PROVIDER_MODEL_REDIRECT_RULE_SCHEMA.safeParse({
  19. matchType: "exact",
  20. source: "s".repeat(MAX_PROVIDER_RULE_TEXT_LENGTH),
  21. target: "t".repeat(MAX_PROVIDER_RULE_TEXT_LENGTH),
  22. });
  23. expect(result.success).toBe(true);
  24. });
  25. it("accepts up to 100000 redirect rules", () => {
  26. const result = PROVIDER_MODEL_REDIRECT_RULE_LIST_SCHEMA.safeParse(
  27. buildRedirectRules(MAX_PROVIDER_RULES)
  28. );
  29. expect(result.success).toBe(true);
  30. });
  31. it("rejects more than 100000 redirect rules", () => {
  32. const result = PROVIDER_MODEL_REDIRECT_RULE_LIST_SCHEMA.safeParse(
  33. buildRedirectRules(MAX_PROVIDER_RULES + 1)
  34. );
  35. expect(result.success).toBe(false);
  36. });
  37. it("允许 exact redirect 同时包含 GLM-5 和 glm-5 两个 source", () => {
  38. const result = PROVIDER_MODEL_REDIRECT_RULE_LIST_SCHEMA.safeParse([
  39. { matchType: "exact", source: "GLM-5", target: "GLM-5" },
  40. { matchType: "exact", source: "glm-5", target: "GLM-5" },
  41. ]);
  42. expect(result.success).toBe(true);
  43. });
  44. });