|
| 1 | +import { expect, test } from "bun:test"; |
| 2 | +import Client from "../../client.node"; |
| 3 | +import { serve } from "../../test"; |
| 4 | + |
| 5 | +test("GET /api/admin/users returns 403 for non-admin user", async () => { |
| 6 | + const { helpers } = await serve(); |
| 7 | + const { client } = await helpers.createUser({ site_role: "member" }); |
| 8 | + |
| 9 | + await expect(client.admin.users.list()).rejects.toThrow("Forbidden"); |
| 10 | +}); |
| 11 | + |
| 12 | +test("GET /api/admin/users returns users for site admin", async () => { |
| 13 | + const { helpers } = await serve(); |
| 14 | + const { client: adminClient } = await helpers.createUser({ |
| 15 | + site_role: "admin", |
| 16 | + }); |
| 17 | + const { user: regularUser } = await helpers.createUser({ |
| 18 | + site_role: "member", |
| 19 | + }); |
| 20 | + |
| 21 | + const response = await adminClient.admin.users.list(); |
| 22 | + |
| 23 | + expect(response.items).toBeDefined(); |
| 24 | + expect(response.items.length).toBeGreaterThanOrEqual(2); |
| 25 | + |
| 26 | + const regularUserInList = response.items.find((u) => u.id === regularUser.id); |
| 27 | + expect(regularUserInList).toBeDefined(); |
| 28 | + expect(regularUserInList?.site_role).toBe("member"); |
| 29 | +}); |
| 30 | + |
| 31 | +test("GET /api/admin/users returns 401 for unauthenticated request", async () => { |
| 32 | + const { url } = await serve(); |
| 33 | + |
| 34 | + const unauthClient = new Client({ |
| 35 | + baseURL: url.toString(), |
| 36 | + }); |
| 37 | + |
| 38 | + await expect(unauthClient.admin.users.list()).rejects.toThrow("Unauthorized"); |
| 39 | +}); |
| 40 | + |
| 41 | +test("GET /api/admin/users filters by site_role", async () => { |
| 42 | + const { helpers } = await serve(); |
| 43 | + const { client: adminClient, user: adminUser } = await helpers.createUser({ |
| 44 | + site_role: "admin", |
| 45 | + }); |
| 46 | + const { user: memberUser } = await helpers.createUser({ |
| 47 | + site_role: "member", |
| 48 | + }); |
| 49 | + |
| 50 | + const adminOnly = await adminClient.admin.users.list({ site_role: "admin" }); |
| 51 | + |
| 52 | + expect(adminOnly.items.every((u) => u.site_role === "admin")).toBe(true); |
| 53 | + expect(adminOnly.items.some((u) => u.id === adminUser.id)).toBe(true); |
| 54 | + expect(adminOnly.items.some((u) => u.id === memberUser.id)).toBe(false); |
| 55 | +}); |
| 56 | + |
| 57 | +test("GET /api/admin/users filters by query", async () => { |
| 58 | + const { helpers } = await serve(); |
| 59 | + const { client: adminClient, user: adminUser } = await helpers.createUser({ |
| 60 | + site_role: "admin", |
| 61 | + email: "admin-unique-email@example.com", |
| 62 | + }); |
| 63 | + const { user: otherUser } = await helpers.createUser({ |
| 64 | + site_role: "member", |
| 65 | + email: "other-user@example.com", |
| 66 | + }); |
| 67 | + |
| 68 | + const results = await adminClient.admin.users.list({ |
| 69 | + query: "admin-unique-email", |
| 70 | + }); |
| 71 | + |
| 72 | + expect(results.items.length).toBeGreaterThanOrEqual(1); |
| 73 | + expect(results.items.some((u) => u.id === adminUser.id)).toBe(true); |
| 74 | + expect(results.items.some((u) => u.id === otherUser.id)).toBe(false); |
| 75 | +}); |
0 commit comments