import { render, screen } from "@testing-library/svelte"; import Column from "./Column.test.svelte"; describe("Column", () => { it("should render with default props", () => { render(Column); const column = screen.getByTestId("content").parentElement!; expect(column).toHaveClass("bx--col"); }); it("should render with custom element when as is true", () => { render(Column, { props: { as: true } }); const column = screen.getByTestId("content").parentElement!; expect(column.tagName).toBe("DIV"); }); describe("Gutter modifiers", () => { it("should remove all gutters", () => { render(Column, { props: { noGutter: true } }); const column = screen.getByTestId("content").parentElement!; expect(column).toHaveClass("bx--no-gutter"); }); it("should remove left gutter", () => { render(Column, { props: { noGutterLeft: true } }); const column = screen.getByTestId("content").parentElement!; expect(column).toHaveClass("bx--no-gutter--left"); }); it("should remove right gutter", () => { render(Column, { props: { noGutterRight: true } }); const column = screen.getByTestId("content").parentElement!; expect(column).toHaveClass("bx--no-gutter--right"); }); }); it("should add padding", () => { render(Column, { props: { padding: true } }); const column = screen.getByTestId("content").parentElement!; expect(column).toHaveClass("bx--col-padding"); }); describe("Aspect ratio", () => { const ratios = ["2x1", "16x9", "9x16", "1x2", "4x3", "3x4", "1x1"] as const; ratios.forEach((ratio) => { it(`should apply ${ratio} aspect ratio`, () => { render(Column, { props: { aspectRatio: ratio }, }); const column = screen.getByTestId("content").parentElement!; expect(column).toHaveClass( `bx--aspect-ratio`, `bx--aspect-ratio--${ratio}`, ); }); }); }); describe("Breakpoints", () => { const breakpoints = ["sm", "md", "lg", "xlg", "max"] as const; breakpoints.forEach((bp) => { it(`should handle boolean ${bp} breakpoint`, () => { render(Column, { props: { [bp]: true }, }); const column = screen.getByTestId("content").parentElement!; expect(column).toHaveClass(`bx--col-${bp}`); }); it(`should handle numeric ${bp} breakpoint`, () => { render(Column, { props: { [bp]: 4 }, }); const column = screen.getByTestId("content").parentElement!; expect(column).toHaveClass(`bx--col-${bp}-4`); }); it(`should handle object ${bp} breakpoint with span`, () => { render(Column, { props: { [bp]: { span: 4, offset: 2 } }, }); const column = screen.getByTestId("content").parentElement!; expect(column).toHaveClass(`bx--col-${bp}-4`, `bx--offset-${bp}-2`); }); it(`should handle object ${bp} breakpoint with boolean span`, () => { render(Column, { props: { [bp]: { span: true, offset: 2 } }, }); const column = screen.getByTestId("content").parentElement!; expect(column).toHaveClass(`bx--col-${bp}`, `bx--offset-${bp}-2`); }); }); }); it("should combine multiple breakpoint classes", () => { render(Column, { props: { sm: 4, md: { span: 6, offset: 2 }, lg: true, }, }); const column = screen.getByTestId("content").parentElement!; expect(column).toHaveClass( "bx--col-sm-4", "bx--col-md-6", "bx--offset-md-2", "bx--col-lg", ); }); });