import { describe, it, expect, vi, beforeEach } from "vitest"; import { render, screen } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import { LoginButton } from "./LoginButton"; const { mockOAuth2 } = vi.hoisted(() => ({ mockOAuth2: vi.fn(), })); vi.mock("@/lib/auth-client", () => ({ signIn: { oauth2: mockOAuth2, }, })); describe("LoginButton", (): void => { beforeEach((): void => { mockOAuth2.mockClear(); }); it("should render sign in button", (): void => { render(); const button = screen.getByRole("button", { name: /sign in/i }); expect(button).toBeInTheDocument(); }); it("should initiate OAuth2 sign-in on click", async (): Promise => { const user = userEvent.setup(); render(); const button = screen.getByRole("button", { name: /sign in/i }); await user.click(button); expect(mockOAuth2).toHaveBeenCalledWith({ providerId: "authentik", callbackURL: "/", }); }); it("should have proper styling", (): void => { render(); const button = screen.getByRole("button", { name: /sign in/i }); expect(button).toHaveClass("w-full"); }); });