terminate-active-sessions-batch.test.ts 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import { describe, expect, test } from "vitest";
  2. import {
  3. type AggregateSessionStatsEntry,
  4. summarizeTerminateSessionsBatch,
  5. } from "@/actions/active-sessions-utils";
  6. let sessionIndex = 0;
  7. function buildSessionEntry(
  8. overrides: Partial<AggregateSessionStatsEntry>
  9. ): AggregateSessionStatsEntry {
  10. const sessionId = overrides.sessionId ?? `session-${sessionIndex++}`;
  11. return {
  12. sessionId,
  13. requestCount: overrides.requestCount ?? 1,
  14. totalCostUsd: overrides.totalCostUsd ?? "0",
  15. totalInputTokens: overrides.totalInputTokens ?? 0,
  16. totalOutputTokens: overrides.totalOutputTokens ?? 0,
  17. totalCacheCreationTokens: overrides.totalCacheCreationTokens ?? 0,
  18. totalCacheReadTokens: overrides.totalCacheReadTokens ?? 0,
  19. totalDurationMs: overrides.totalDurationMs ?? 0,
  20. firstRequestAt: overrides.firstRequestAt ?? null,
  21. lastRequestAt: overrides.lastRequestAt ?? null,
  22. providers: overrides.providers ?? [],
  23. models: overrides.models ?? [],
  24. userName: overrides.userName ?? "user",
  25. userId: overrides.userId ?? 1,
  26. keyName: overrides.keyName ?? "default-key",
  27. keyId: overrides.keyId ?? 1,
  28. userAgent: overrides.userAgent ?? null,
  29. apiType: overrides.apiType ?? "chat",
  30. };
  31. }
  32. describe("Session 批量终止摘要", () => {
  33. test("普通用户应该正确分类允许/未授权/缺失的 Session", () => {
  34. const requestedIds = ["sess-1", "sess-1", "sess-2", "sess-3"];
  35. const sessionsData = [
  36. buildSessionEntry({ sessionId: "sess-1", userId: 10 }),
  37. buildSessionEntry({ sessionId: "sess-2", userId: 99 }),
  38. ];
  39. const summary = summarizeTerminateSessionsBatch(requestedIds, sessionsData, 10, false);
  40. expect(summary.uniqueRequestedIds).toEqual(["sess-1", "sess-2", "sess-3"]);
  41. expect(summary.allowedSessionIds).toEqual(["sess-1"]);
  42. expect(summary.unauthorizedSessionIds).toEqual(["sess-2"]);
  43. expect(summary.missingSessionIds).toEqual(["sess-3"]);
  44. });
  45. test("管理员应该对所有找到的 Session 有权限(仍追踪缺失的)", () => {
  46. const requestedIds = ["sess-4", "sess-5"];
  47. const sessionsData = [buildSessionEntry({ sessionId: "sess-4", userId: 200 })];
  48. const summary = summarizeTerminateSessionsBatch(requestedIds, sessionsData, 1, true);
  49. expect(summary.allowedSessionIds).toEqual(["sess-4"]);
  50. expect(summary.unauthorizedSessionIds).toEqual([]);
  51. expect(summary.missingSessionIds).toEqual(["sess-5"]);
  52. });
  53. });