import { describe, it, expect, vi } from "vitest"; import { render, screen } from "@testing-library/react"; import { DomainList } from "./DomainList"; import type { Domain } from "@mosaic/shared"; describe("DomainList", (): void => { const mockDomains: Domain[] = [ { id: "domain-1", workspaceId: "workspace-1", name: "Work", slug: "work", description: "Work-related tasks", color: "#3B82F6", icon: "💼", sortOrder: 0, metadata: {}, createdAt: new Date("2026-01-28"), updatedAt: new Date("2026-01-28"), }, { id: "domain-2", workspaceId: "workspace-1", name: "Personal", slug: "personal", description: "Personal tasks and projects", color: "#10B981", icon: "🏠", sortOrder: 1, metadata: {}, createdAt: new Date("2026-01-28"), updatedAt: new Date("2026-01-28"), }, ]; it("should render empty state when no domains", (): void => { render(); expect(screen.getByText(/no domains created yet/i)).toBeInTheDocument(); }); it("should render loading state", (): void => { render(); expect(screen.getByText(/loading domains/i)).toBeInTheDocument(); }); it("should render domains list", (): void => { render(); expect(screen.getByText("Work")).toBeInTheDocument(); expect(screen.getByText("Personal")).toBeInTheDocument(); }); it("should call onEdit when edit button clicked", (): void => { const onEdit = vi.fn(); render(); const editButtons = screen.getAllByRole("button", { name: /edit/i }); const firstButton = editButtons[0]; if (firstButton) { firstButton.click(); expect(onEdit).toHaveBeenCalledWith(mockDomains[0]); } }); it("should call onDelete when delete button clicked", (): void => { const onDelete = vi.fn(); render(); const deleteButtons = screen.getAllByRole("button", { name: /delete/i }); const firstButton = deleteButtons[0]; if (firstButton) { firstButton.click(); expect(onDelete).toHaveBeenCalledWith(mockDomains[0]); } }); it("should handle undefined domains gracefully", (): void => { // @ts-expect-error Testing error state render(); expect(screen.getByText(/no domains created yet/i)).toBeInTheDocument(); }); it("should handle null domains gracefully", (): void => { // @ts-expect-error Testing error state render(); expect(screen.getByText(/no domains created yet/i)).toBeInTheDocument(); }); });