2
0

provider-group-match.test.ts 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import { describe, expect, test } from "vitest";
  2. import { checkProviderGroupMatch } from "@/app/v1/_lib/proxy/provider-selector";
  3. describe("checkProviderGroupMatch - 供应商分组匹配逻辑", () => {
  4. describe("当用户拥有全局访问权限时", () => {
  5. test("用户分组包含 * 时,应匹配任意供应商分组", () => {
  6. expect(checkProviderGroupMatch("premium", "*")).toBe(true);
  7. expect(checkProviderGroupMatch("cli,chat", "*")).toBe(true);
  8. });
  9. test("用户分组包含 * 和其他分组时,应匹配任意供应商分组", () => {
  10. expect(checkProviderGroupMatch("premium", "default,*")).toBe(true);
  11. });
  12. test("用户分组仅包含 * 时,应匹配 null 供应商分组", () => {
  13. expect(checkProviderGroupMatch(null, "*")).toBe(true);
  14. });
  15. });
  16. describe("当供应商未配置分组标签时", () => {
  17. test("供应商分组为 null,用户分组包含 default,应匹配", () => {
  18. expect(checkProviderGroupMatch(null, "default")).toBe(true);
  19. expect(checkProviderGroupMatch(null, "cli,default")).toBe(true);
  20. });
  21. test("供应商分组为 null,用户分组不包含 default,应不匹配", () => {
  22. expect(checkProviderGroupMatch(null, "premium")).toBe(false);
  23. expect(checkProviderGroupMatch(null, "cli,chat")).toBe(false);
  24. });
  25. });
  26. describe("当供应商和用户分组有交集时", () => {
  27. test("单个分组完全匹配,应返回 true", () => {
  28. expect(checkProviderGroupMatch("cli", "cli")).toBe(true);
  29. });
  30. test("多个分组中有一个匹配,应返回 true", () => {
  31. expect(checkProviderGroupMatch("cli", "cli,premium")).toBe(true);
  32. expect(checkProviderGroupMatch("premium", "cli,premium")).toBe(true);
  33. });
  34. test("供应商多标签匹配用户单标签", () => {
  35. expect(checkProviderGroupMatch("cli,chat", "cli")).toBe(true);
  36. expect(checkProviderGroupMatch("cli,chat", "chat")).toBe(true);
  37. });
  38. test("用户多分组匹配供应商单标签", () => {
  39. expect(checkProviderGroupMatch("premium", "cli,premium")).toBe(true);
  40. });
  41. });
  42. describe("当供应商和用户分组无交集时", () => {
  43. test("完全不同的分组,应返回 false", () => {
  44. expect(checkProviderGroupMatch("premium", "cli")).toBe(false);
  45. expect(checkProviderGroupMatch("cli,chat", "premium,vip")).toBe(false);
  46. });
  47. test("供应商分组为 beta,用户分组为 default,应不匹配", () => {
  48. expect(checkProviderGroupMatch("beta", "default")).toBe(false);
  49. });
  50. });
  51. describe("边界情况处理", () => {
  52. test("用户分组含有多余空格时,应正确解析", () => {
  53. expect(checkProviderGroupMatch("cli", " cli , premium ")).toBe(true);
  54. });
  55. test("供应商分组含有多余空格时,应正确解析", () => {
  56. expect(checkProviderGroupMatch(" cli , chat ", "cli")).toBe(true);
  57. });
  58. test("空字符串分组项应被过滤", () => {
  59. expect(checkProviderGroupMatch("cli", "cli,,")).toBe(true);
  60. expect(checkProviderGroupMatch("cli", ",,,cli")).toBe(true);
  61. });
  62. });
  63. });