Skip to content

Commit b461942

Browse files
authored
Merge pull request #401 from ut-code/test/userutil
Create UserUtil.test.ts
2 parents c7a62fa + 27661f0 commit b461942

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed

backend/src/utils/UserUtil.test.ts

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import { Request } from "express"
2+
import { extractUserFromRequest } from "./UserUtil"
3+
import { supabase } from "../supabaseClient"
4+
import { User } from "@supabase/supabase-js"
5+
6+
jest.mock("../supabaseClient", () => ({
7+
supabase: {
8+
auth: {
9+
getUser: jest.fn(),
10+
},
11+
},
12+
}))
13+
14+
describe("extractUserFromRequest", () => {
15+
let req: Partial<Request>
16+
17+
beforeEach(() => {
18+
req = {
19+
headers: {},
20+
}
21+
})
22+
23+
beforeAll(() => {
24+
// Suppress console.error
25+
jest.spyOn(console, "error").mockImplementation(() => {})
26+
})
27+
28+
it("should return null if no authorization header is present", async () => {
29+
const user = await extractUserFromRequest(req as Request)
30+
expect(user).toBeNull()
31+
})
32+
33+
it("should return null if the authorization header is malformed", async () => {
34+
req.headers = req.headers || {}
35+
req.headers["authorization"] = "InvalidToken"
36+
const user = await extractUserFromRequest(req as Request)
37+
expect(user).toBeNull()
38+
})
39+
40+
it("should return null if Supabase returns no user", async () => {
41+
req.headers = req.headers || {}
42+
req.headers["authorization"] = "Bearer validToken"
43+
;(supabase.auth.getUser as jest.Mock).mockResolvedValue({ data: null })
44+
45+
const user = await extractUserFromRequest(req as Request)
46+
expect(user).toBeNull()
47+
})
48+
49+
it("should return the user if the token is valid and Supabase returns a user", async () => {
50+
const mockUser: User = { id: "123", email: "[email protected]" } as User
51+
req.headers = req.headers || {}
52+
req.headers["authorization"] = "Bearer validToken"
53+
;(supabase.auth.getUser as jest.Mock).mockResolvedValue({ data: { user: mockUser } })
54+
55+
const user = await extractUserFromRequest(req as Request)
56+
expect(user).toEqual(mockUser)
57+
})
58+
59+
it("should handle errors and return null", async () => {
60+
req.headers = req.headers || {}
61+
req.headers["authorization"] = "Bearer validToken"
62+
;(supabase.auth.getUser as jest.Mock).mockRejectedValue(new Error("Some error"))
63+
64+
const user = await extractUserFromRequest(req as Request)
65+
expect(user).toBeNull()
66+
})
67+
68+
afterAll(() => {
69+
jest.restoreAllMocks()
70+
})
71+
})

0 commit comments

Comments
 (0)