=test_update_homework_tests_and_work_log
Some checks failed
CI / build-deploy (push) Has been cancelled
Some checks failed
CI / build-deploy (push) Has been cancelled
This commit is contained in:
78
tests/integration/api-onboarding-status.route.test.ts
Normal file
78
tests/integration/api-onboarding-status.route.test.ts
Normal file
@@ -0,0 +1,78 @@
|
||||
import { beforeEach, describe, expect, it, vi } from "vitest"
|
||||
|
||||
const mocks = vi.hoisted(() => {
|
||||
const whereMock = vi.fn()
|
||||
const innerJoinMock = vi.fn(() => ({ where: whereMock }))
|
||||
const fromMock = vi.fn(() => ({ innerJoin: innerJoinMock }))
|
||||
const selectMock = vi.fn(() => ({ from: fromMock }))
|
||||
return {
|
||||
authMock: vi.fn(),
|
||||
findFirstMock: vi.fn(),
|
||||
whereMock,
|
||||
selectMock,
|
||||
}
|
||||
})
|
||||
|
||||
vi.mock("@/auth", () => ({
|
||||
auth: mocks.authMock,
|
||||
}))
|
||||
|
||||
vi.mock("@/shared/db", () => ({
|
||||
db: {
|
||||
query: {
|
||||
users: {
|
||||
findFirst: mocks.findFirstMock,
|
||||
},
|
||||
},
|
||||
select: mocks.selectMock,
|
||||
},
|
||||
}))
|
||||
|
||||
vi.mock("@/shared/db/schema", () => ({
|
||||
roles: { name: "name", id: "id" },
|
||||
users: { id: "id" },
|
||||
usersToRoles: { roleId: "roleId", userId: "userId" },
|
||||
}))
|
||||
|
||||
import { GET } from "@/app/api/onboarding/status/route"
|
||||
|
||||
describe("GET /api/onboarding/status", () => {
|
||||
beforeEach(() => {
|
||||
vi.resetAllMocks()
|
||||
})
|
||||
|
||||
it("returns not required when user is unauthenticated", async () => {
|
||||
mocks.authMock.mockResolvedValue(null)
|
||||
|
||||
const response = await GET()
|
||||
const data = await response.json()
|
||||
|
||||
expect(response.status).toBe(200)
|
||||
expect(data).toEqual({ required: false })
|
||||
expect(mocks.findFirstMock).not.toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it("returns teacher role for grade head and requires onboarding when missing onboardedAt", async () => {
|
||||
mocks.authMock.mockResolvedValue({ user: { id: "u_1" } })
|
||||
mocks.findFirstMock.mockResolvedValue({ onboardedAt: null })
|
||||
mocks.whereMock.mockResolvedValue([{ name: "grade_head" }])
|
||||
|
||||
const response = await GET()
|
||||
const data = await response.json()
|
||||
|
||||
expect(response.status).toBe(200)
|
||||
expect(data).toEqual({ required: true, role: "teacher" })
|
||||
})
|
||||
|
||||
it("prioritizes admin role and marks not required when onboarded", async () => {
|
||||
mocks.authMock.mockResolvedValue({ user: { id: "u_2" } })
|
||||
mocks.findFirstMock.mockResolvedValue({ onboardedAt: new Date("2026-01-01") })
|
||||
mocks.whereMock.mockResolvedValue([{ name: "student" }, { name: "admin" }])
|
||||
|
||||
const response = await GET()
|
||||
const data = await response.json()
|
||||
|
||||
expect(response.status).toBe(200)
|
||||
expect(data).toEqual({ required: false, role: "admin" })
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user