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();
});
});