users-search-users-compat.test.ts 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import { beforeEach, describe, expect, test, vi } from "vitest";
  2. const searchUsersMock = vi.fn();
  3. const validateAuthTokenMock = vi.fn();
  4. const runWithAuthSessionMock = vi.fn();
  5. vi.mock("@/actions/users", () => ({
  6. getUsers: vi.fn(),
  7. getUsersBatch: vi.fn(),
  8. searchUsers: searchUsersMock,
  9. addUser: vi.fn(),
  10. editUser: vi.fn(),
  11. removeUser: vi.fn(),
  12. getUserLimitUsage: vi.fn(),
  13. }));
  14. vi.mock("@/lib/auth", async (importOriginal) => {
  15. const actual = await importOriginal<typeof import("@/lib/auth")>();
  16. return {
  17. ...actual,
  18. AUTH_COOKIE_NAME: "auth-token",
  19. validateAuthToken: validateAuthTokenMock,
  20. runWithAuthSession: runWithAuthSessionMock,
  21. };
  22. });
  23. describe("users searchUsers route compatibility", () => {
  24. beforeEach(() => {
  25. vi.resetModules();
  26. searchUsersMock.mockReset();
  27. validateAuthTokenMock.mockReset();
  28. runWithAuthSessionMock.mockReset();
  29. validateAuthTokenMock.mockResolvedValue({
  30. user: { id: 1, role: "admin" },
  31. key: { canLoginWebUi: true },
  32. });
  33. runWithAuthSessionMock.mockImplementation(async (_session, callback) => callback());
  34. searchUsersMock.mockResolvedValue({
  35. ok: true,
  36. data: [{ id: 1, name: "Alice" }],
  37. });
  38. });
  39. test("falls back to trimmed query when searchTerm is blank", async () => {
  40. const { POST } = await import("@/app/api/actions/[...route]/route");
  41. const response = await POST(
  42. new Request("http://localhost/api/actions/users/searchUsers", {
  43. method: "POST",
  44. headers: {
  45. "content-type": "application/json",
  46. authorization: "Bearer test-token",
  47. cookie: "auth-token=test-token",
  48. },
  49. body: JSON.stringify({
  50. searchTerm: " ",
  51. query: " alice ",
  52. keyword: "bob",
  53. }),
  54. })
  55. );
  56. expect(response.status).toBe(200);
  57. expect(searchUsersMock).toHaveBeenCalledWith("alice");
  58. await expect(response.json()).resolves.toEqual({
  59. ok: true,
  60. data: [{ id: 1, name: "Alice" }],
  61. });
  62. });
  63. });