homeio
PublikFork dari doctor-io/homeio
route.test.ts
import { NextRequest } from "next/server";
import { describe, expect, it, vi } from "vitest";
vi.mock("@/lib/server/modules/auth/service", () => {
class AuthError extends Error {
constructor(
message: string,
public readonly statusCode: number,
) {
super(message);
}
}
return {
AuthError,
verifyUnlockPassword: vi.fn(),
};
});
import { POST } from "@/app/api/auth/unlock/route";
import { AuthError, verifyUnlockPassword } from "@/lib/server/modules/auth/service";
describe("POST /api/auth/unlock", () => {
it("unlocks session when password is valid", async () => {
vi.mocked(verifyUnlockPassword).mockResolvedValueOnce({
userId: "u1",
username: "admin",
});
const request = new NextRequest("http://localhost/api/auth/unlock", {
method: "POST",
headers: {
cookie: "homeio_session=session-token",
},
body: JSON.stringify({ password: "StrongPass123" }),
});
const response = await POST(request);
expect(response.status).toBe(200);
});
it("returns auth error when password is invalid", async () => {
vi.mocked(verifyUnlockPassword).mockRejectedValueOnce(
new AuthError("Invalid password", 401),
);
const request = new NextRequest("http://localhost/api/auth/unlock", {
method: "POST",
headers: {
cookie: "homeio_session=session-token",
},
body: JSON.stringify({ password: "bad-pass" }),
});
const response = await POST(request);
expect(response.status).toBe(401);
});
});