Setup.test.tsx (2122B)
1 import { describe, it, expect, vi, beforeEach } from "vitest"; 2 import { render, screen, fireEvent } from "@testing-library/react"; 3 import { Setup } from "./Setup"; 4 import { useAuthStore } from "../../store/auth"; 5 6 beforeEach(() => { 7 useAuthStore.setState({ 8 authenticated: false, 9 configured: false, 10 loading: false, 11 error: null, 12 }); 13 vi.restoreAllMocks(); 14 vi.stubGlobal("fetch", vi.fn().mockResolvedValue({ 15 ok: true, 16 json: async () => ({}), 17 })); 18 Object.defineProperty(window, "location", { 19 value: { ...window.location, href: "/", assign: vi.fn() }, 20 writable: true, 21 configurable: true, 22 }); 23 }); 24 25 describe("Setup", () => { 26 it("renders setup form", () => { 27 render(<Setup />); 28 expect(screen.getByText("Initial Setup")).toBeInTheDocument(); 29 expect(screen.getByLabelText("Password")).toBeInTheDocument(); 30 expect(screen.getByLabelText("Confirm Password")).toBeInTheDocument(); 31 expect(screen.getByLabelText(/API Key/)).toBeInTheDocument(); 32 expect(screen.getByText("Create Account")).toBeInTheDocument(); 33 }); 34 35 it("shows optional label for API key", () => { 36 render(<Setup />); 37 expect(screen.getByText("(optional)")).toBeInTheDocument(); 38 }); 39 40 it("shows error when passwords don't match", async () => { 41 render(<Setup />); 42 fireEvent.change(screen.getByLabelText("Password"), { target: { value: "pass1" } }); 43 fireEvent.change(screen.getByLabelText("Confirm Password"), { target: { value: "pass2" } }); 44 fireEvent.click(screen.getByText("Create Account")); 45 expect(screen.getByText("Passwords do not match")).toBeInTheDocument(); 46 }); 47 48 it("disables submit when fields are empty", () => { 49 render(<Setup />); 50 expect(screen.getByText("Create Account")).toBeDisabled(); 51 }); 52 53 it("enables submit when all required fields filled", () => { 54 render(<Setup />); 55 fireEvent.change(screen.getByLabelText("Password"), { target: { value: "pass" } }); 56 fireEvent.change(screen.getByLabelText("Confirm Password"), { target: { value: "pass" } }); 57 expect(screen.getByText("Create Account")).not.toBeDisabled(); 58 }); 59 });