Files
stack/apps/web/src/components/domains/DomainList.test.tsx
Jason Woltje ac1f2c176f
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
fix: Resolve all ESLint errors and warnings in web package
Fixes all 542 ESLint problems in the web package to achieve 0 errors and 0 warnings.

Changes:
- Fixed 144 issues: nullish coalescing, return types, unused variables
- Fixed 118 issues: unnecessary conditions, type safety, template literals
- Fixed 79 issues: non-null assertions, unsafe assignments, empty functions
- Fixed 67 issues: explicit return types, promise handling, enum comparisons
- Fixed 45 final warnings: missing return types, optional chains
- Fixed 25 typecheck-related issues: async/await, type assertions, formatting
- Fixed JSX.Element namespace errors across 90+ files

All Quality Rails violations resolved. Lint and typecheck both pass with 0 problems.

Files modified: 118 components, tests, hooks, and utilities

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-31 00:10:03 -06:00

88 lines
2.9 KiB
TypeScript

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(<DomainList domains={[]} isLoading={false} />);
expect(screen.getByText(/no domains created yet/i)).toBeInTheDocument();
});
it("should render loading state", (): void => {
render(<DomainList domains={[]} isLoading={true} />);
expect(screen.getByText(/loading domains/i)).toBeInTheDocument();
});
it("should render domains list", (): void => {
render(<DomainList domains={mockDomains} isLoading={false} />);
expect(screen.getByText("Work")).toBeInTheDocument();
expect(screen.getByText("Personal")).toBeInTheDocument();
});
it("should call onEdit when edit button clicked", (): void => {
const onEdit = vi.fn();
render(<DomainList domains={mockDomains} isLoading={false} onEdit={onEdit} />);
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(<DomainList domains={mockDomains} isLoading={false} onDelete={onDelete} />);
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(<DomainList domains={undefined} isLoading={false} />);
expect(screen.getByText(/no domains created yet/i)).toBeInTheDocument();
});
it("should handle null domains gracefully", (): void => {
// @ts-expect-error Testing error state
render(<DomainList domains={null} isLoading={false} />);
expect(screen.getByText(/no domains created yet/i)).toBeInTheDocument();
});
});