key.test.ts 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. import { describe, expect, it, vi } from "vitest";
  2. const row = {
  3. keyId: 1,
  4. keyUserId: 2,
  5. keyString: "sk-test",
  6. keyName: "k1",
  7. keyIsEnabled: true,
  8. keyExpiresAt: null,
  9. keyCanLoginWebUi: true,
  10. keyLimit5hUsd: "1.00",
  11. keyLimitDailyUsd: "2.00",
  12. keyDailyResetMode: "fixed",
  13. keyDailyResetTime: "00:00",
  14. keyLimitWeeklyUsd: "3.00",
  15. keyLimitMonthlyUsd: "4.00",
  16. keyLimitTotalUsd: "5.00",
  17. keyLimitConcurrentSessions: 6,
  18. keyProviderGroup: "default",
  19. keyCacheTtlPreference: null,
  20. keyCreatedAt: new Date("2024-01-01T00:00:00.000Z"),
  21. keyUpdatedAt: new Date("2024-01-01T00:00:00.000Z"),
  22. keyDeletedAt: null,
  23. userId: 2,
  24. userName: "u1",
  25. userDescription: "",
  26. userRole: "user",
  27. userRpm: 100,
  28. userDailyQuota: "10.00",
  29. userProviderGroup: "default",
  30. userLimit5hUsd: "1.25",
  31. userLimitWeeklyUsd: "2.5",
  32. userLimitMonthlyUsd: "3.75",
  33. userLimitTotalUsd: "20.00",
  34. userLimitConcurrentSessions: 7,
  35. userDailyResetMode: "rolling",
  36. userDailyResetTime: "01:00",
  37. userIsEnabled: true,
  38. userExpiresAt: null,
  39. userAllowedClients: [],
  40. userAllowedModels: [],
  41. userCreatedAt: new Date("2024-01-01T00:00:00.000Z"),
  42. userUpdatedAt: new Date("2024-01-01T00:00:00.000Z"),
  43. userDeletedAt: null,
  44. };
  45. const selectMock = vi.fn(() => ({
  46. from: vi.fn(() => ({
  47. innerJoin: vi.fn(() => ({
  48. where: vi.fn(async () => [row]),
  49. })),
  50. })),
  51. }));
  52. vi.mock("@/drizzle/db", () => ({
  53. db: {
  54. select: selectMock,
  55. },
  56. }));
  57. vi.mock("@/drizzle/schema", () => ({
  58. keys: {
  59. id: "keys.id",
  60. userId: "keys.userId",
  61. key: "keys.key",
  62. name: "keys.name",
  63. isEnabled: "keys.isEnabled",
  64. expiresAt: "keys.expiresAt",
  65. canLoginWebUi: "keys.canLoginWebUi",
  66. limit5hUsd: "keys.limit5hUsd",
  67. limitDailyUsd: "keys.limitDailyUsd",
  68. dailyResetMode: "keys.dailyResetMode",
  69. dailyResetTime: "keys.dailyResetTime",
  70. limitWeeklyUsd: "keys.limitWeeklyUsd",
  71. limitMonthlyUsd: "keys.limitMonthlyUsd",
  72. limitTotalUsd: "keys.limitTotalUsd",
  73. limitConcurrentSessions: "keys.limitConcurrentSessions",
  74. providerGroup: "keys.providerGroup",
  75. cacheTtlPreference: "keys.cacheTtlPreference",
  76. createdAt: "keys.createdAt",
  77. updatedAt: "keys.updatedAt",
  78. deletedAt: "keys.deletedAt",
  79. },
  80. users: {
  81. id: "users.id",
  82. name: "users.name",
  83. description: "users.description",
  84. role: "users.role",
  85. rpmLimit: "users.rpmLimit",
  86. dailyLimitUsd: "users.dailyLimitUsd",
  87. providerGroup: "users.providerGroup",
  88. limit5hUsd: "users.limit5hUsd",
  89. limitWeeklyUsd: "users.limitWeeklyUsd",
  90. limitMonthlyUsd: "users.limitMonthlyUsd",
  91. limitTotalUsd: "users.limitTotalUsd",
  92. limitConcurrentSessions: "users.limitConcurrentSessions",
  93. dailyResetMode: "users.dailyResetMode",
  94. dailyResetTime: "users.dailyResetTime",
  95. isEnabled: "users.isEnabled",
  96. expiresAt: "users.expiresAt",
  97. allowedClients: "users.allowedClients",
  98. allowedModels: "users.allowedModels",
  99. createdAt: "users.createdAt",
  100. updatedAt: "users.updatedAt",
  101. deletedAt: "users.deletedAt",
  102. },
  103. messageRequest: {
  104. blockedBy: "messageRequest.blockedBy",
  105. },
  106. }));
  107. vi.mock("drizzle-orm", () => ({
  108. and: (...args: unknown[]) => args,
  109. or: (...args: unknown[]) => args,
  110. eq: (...args: unknown[]) => args,
  111. gt: (...args: unknown[]) => args,
  112. isNull: (...args: unknown[]) => args,
  113. count: (...args: unknown[]) => args,
  114. desc: (...args: unknown[]) => args,
  115. gte: (...args: unknown[]) => args,
  116. inArray: (...args: unknown[]) => args,
  117. lt: (...args: unknown[]) => args,
  118. sql: (...args: unknown[]) => args,
  119. sum: (...args: unknown[]) => args,
  120. }));
  121. describe("repository/key validateApiKeyAndGetUser", () => {
  122. it("should return user with limit fields populated", async () => {
  123. const { validateApiKeyAndGetUser } = await import("@/repository/key");
  124. const result = await validateApiKeyAndGetUser("sk-test");
  125. expect(result?.user.limit5hUsd).toBe(1.25);
  126. expect(result?.user.limitWeeklyUsd).toBe(2.5);
  127. expect(result?.user.limitMonthlyUsd).toBe(3.75);
  128. expect(result?.user.limitTotalUsd).toBe(20);
  129. expect(result?.user.limitConcurrentSessions).toBe(7);
  130. expect(result?.user.dailyResetMode).toBe("rolling");
  131. expect(result?.user.dailyResetTime).toBe("01:00");
  132. });
  133. });