diff --git a/packages/ui/components/dialog/Dialog.tsx b/packages/ui/components/dialog/Dialog.tsx index 7555bec29b..e40ace97f3 100644 --- a/packages/ui/components/dialog/Dialog.tsx +++ b/packages/ui/components/dialog/Dialog.tsx @@ -93,7 +93,9 @@ export const DialogContent = React.forwardRef -
{children}
+
+ {children} +
)} {type === "confirmation" && ( @@ -105,7 +107,9 @@ export const DialogContent = React.forwardRef -
{children}
+
+ {children} +
)} @@ -126,7 +130,10 @@ export function DialogHeader(props: DialogHeaderProps) { return (
- {props.subtitle &&
{props.subtitle}
} @@ -144,7 +151,10 @@ export function DialogFooter(props: {
{props.showDivider && ( // TODO: the -mx-8 is causing overflow in the dialog buttons -
+
)}
({ + useRouter() { + return { + route: "/", + pathname: "", + query: "", + asPath: "", + push: vi.fn(), + events: { + on: vi.fn(), + off: vi.fn(), + }, + beforePopState: vi.fn(() => null), + prefetch: vi.fn(() => null), + }; + }, +})); + +const title = "Dialog Header"; +const subtitle = "Dialog Subtitle"; + +const DialogComponent = (props: { + open: boolean; + title?: string; + subtitle?: string; + type?: "creation" | "confirmation"; + showDivider?: boolean; + color?: "primary" | "secondary" | "minimal" | "destructive"; +}) => { + return ( + + +
+ +

Dialog Content

+ + +

Dialog Footer

+
+
+
+
+ ); +}; + +describe("Tests for Dialog component", () => { + test("Should render Dialog with header", () => { + render(); + + expect(screen.queryByText("Dialog Header")).toBeInTheDocument(); + expect(screen.getByText("Dialog Content")).toBeInTheDocument(); + expect(screen.getByText("Dialog Footer")).toBeInTheDocument(); + }); + + test("Should render Dialog without header", () => { + render(); + + expect(screen.queryByTestId("dialog-title")).toBeNull(); + expect(screen.getByText("Dialog Content")).toBeInTheDocument(); + expect(screen.getByText("Dialog Footer")).toBeInTheDocument(); + }); + + test("Should render Dialog with header and subtitle", () => { + render(); + + expect(screen.queryByText("Dialog Header")).toBeInTheDocument(); + expect(screen.queryByText("Dialog Subtitle")).toBeInTheDocument(); + expect(screen.getByText("Dialog Content")).toBeInTheDocument(); + expect(screen.getByText("Dialog Footer")).toBeInTheDocument(); + }); + + test("Should render Dialog with default type creation", () => { + render(); + + expect(screen.getByTestId("dialog-creation")).toBeInTheDocument(); + expect(screen.getByText("Dialog Content")).toBeInTheDocument(); + expect(screen.getByText("Dialog Footer")).toBeInTheDocument(); + }); + + test("Should render Dialog with type creation", () => { + render(); + + expect(screen.getByTestId("dialog-creation")).toBeInTheDocument(); + expect(screen.getByText("Dialog Content")).toBeInTheDocument(); + expect(screen.getByText("Dialog Footer")).toBeInTheDocument(); + }); + + test("Should render Dialog with type confirmation", () => { + render(); + + expect(screen.getByTestId("dialog-confirmation")).toBeInTheDocument(); + expect(screen.getByText("Dialog Content")).toBeInTheDocument(); + expect(screen.getByText("Dialog Footer")).toBeInTheDocument(); + }); + + test("Should open Dialog", async () => { + const { rerender } = render(); + + expect(screen.queryByText("Dialog Content")).not.toBeInTheDocument(); + expect(screen.queryByText("Dialog Footer")).not.toBeInTheDocument(); + + rerender(); + + expect(screen.getByText("Dialog Content")).toBeInTheDocument(); + expect(screen.getByText("Dialog Footer")).toBeInTheDocument(); + }); + + test("Should close Dialog", async () => { + const { rerender } = render(); + + expect(screen.getByText("Dialog Content")).toBeInTheDocument(); + expect(screen.getByText("Dialog Footer")).toBeInTheDocument(); + + rerender(); + + expect(screen.queryByText("Dialog Content")).not.toBeInTheDocument(); + expect(screen.queryByText("Dialog Footer")).not.toBeInTheDocument(); + }); + + test("Should use color from props in CloseDialog", async () => { + render(); + const closeBtn = screen.getByText("Close"); + expect(closeBtn.classList.toString()).toContain("hover:text-red-700"); + }); + + test("Should show divider with showDivider", async () => { + render(); + + expect(screen.getByTestId("divider")).toBeInTheDocument(); + }); +});