batch-edit-prefill.test.ts 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import { describe, expect, it } from "vitest";
  2. import type { ProviderDisplay } from "@/types/provider";
  3. import { createInitialState } from "@/app/[locale]/settings/providers/_components/forms/provider-form/provider-form-context";
  4. describe("批量编辑预填充集成测试", () => {
  5. it("应该在批量模式下预填充相同的设置值", () => {
  6. const providers: ProviderDisplay[] = [
  7. {
  8. id: 1,
  9. name: "Provider A",
  10. priority: 10,
  11. weight: 5,
  12. costMultiplier: 1.5,
  13. modelRedirects: [{ matchType: "exact", source: "model-a", target: "model-b" }],
  14. allowedModels: ["model-1", "model-2"],
  15. limit5hUsd: 100,
  16. circuitBreakerFailureThreshold: 5,
  17. circuitBreakerOpenDuration: 300000, // 5 minutes
  18. } as ProviderDisplay,
  19. {
  20. id: 2,
  21. name: "Provider B",
  22. priority: 10,
  23. weight: 5,
  24. costMultiplier: 1.5,
  25. modelRedirects: [{ matchType: "exact", source: "model-a", target: "model-b" }],
  26. allowedModels: ["model-1", "model-2"],
  27. limit5hUsd: 100,
  28. circuitBreakerFailureThreshold: 5,
  29. circuitBreakerOpenDuration: 300000,
  30. } as ProviderDisplay,
  31. ];
  32. const state = createInitialState("batch", undefined, undefined, undefined, providers);
  33. // 验证预填充的值
  34. expect(state.routing.priority).toBe(10);
  35. expect(state.routing.weight).toBe(5);
  36. expect(state.routing.costMultiplier).toBe(1.5);
  37. expect(state.routing.modelRedirects).toEqual([
  38. { matchType: "exact", source: "model-a", target: "model-b" },
  39. ]);
  40. expect(state.routing.allowedModels).toEqual([
  41. { matchType: "exact", pattern: "model-1" },
  42. { matchType: "exact", pattern: "model-2" },
  43. ]);
  44. expect(state.rateLimit.limit5hUsd).toBe(100);
  45. expect(state.circuitBreaker.failureThreshold).toBe(5);
  46. expect(state.circuitBreaker.openDurationMinutes).toBe(5);
  47. });
  48. it("应该在批量模式下对不同的设置值使用默认值", () => {
  49. const providers: ProviderDisplay[] = [
  50. {
  51. id: 1,
  52. name: "Provider A",
  53. priority: 10,
  54. weight: 5,
  55. } as ProviderDisplay,
  56. {
  57. id: 2,
  58. name: "Provider B",
  59. priority: 20, // 不同的值
  60. weight: 10, // 不同的值
  61. } as ProviderDisplay,
  62. ];
  63. const state = createInitialState("batch", undefined, undefined, undefined, providers);
  64. // 验证使用默认值
  65. expect(state.routing.priority).toBe(0); // 默认值
  66. expect(state.routing.weight).toBe(1); // 默认值
  67. });
  68. it("应该在没有 batchProviders 时使用默认值", () => {
  69. const state = createInitialState("batch");
  70. // 验证所有字段都是默认值
  71. expect(state.routing.priority).toBe(0);
  72. expect(state.routing.weight).toBe(1);
  73. expect(state.routing.costMultiplier).toBe(1.0);
  74. expect(state.routing.modelRedirects).toEqual([]);
  75. expect(state.routing.allowedModels).toEqual([]);
  76. expect(state.rateLimit.limit5hUsd).toBeNull();
  77. expect(state.circuitBreaker.failureThreshold).toBeUndefined();
  78. });
  79. });