import { render, screen } from '@testing-library/react' import GridMask from './index' import Style from './style.module.css' function renderGridMask(props: Partial> = {}, children: React.ReactNode = Child) { const { container } = render({children}) const wrapper = container.firstElementChild as HTMLElement const canvasLayer = wrapper.children[0] as HTMLElement const gradientLayer = wrapper.children[1] as HTMLElement const contentLayer = wrapper.children[2] as HTMLElement return { container, wrapper, canvasLayer, gradientLayer, contentLayer } } describe('GridMask', () => { describe('Rendering', () => { it('should render children in the content layer', () => { renderGridMask({}, ) expect(screen.getByRole('button', { name: 'Run' })).toBeInTheDocument() }) it('should render correctly without optional className props', () => { const { wrapper, canvasLayer, gradientLayer, contentLayer } = renderGridMask({}, Plain child) expect(wrapper).toHaveClass('bg-saas-background') expect(canvasLayer).toHaveClass('absolute') expect(gradientLayer).toHaveClass('absolute') expect(contentLayer).toHaveTextContent('Plain child') }) it('should render wrapper, canvas, gradient and content layers in order', () => { const { wrapper, canvasLayer, gradientLayer, contentLayer } = renderGridMask({}, Content) expect(wrapper).toBeInTheDocument() expect(wrapper.children).toHaveLength(3) expect(canvasLayer).toHaveClass('z-0') expect(gradientLayer).toHaveClass('z-[1]') expect(contentLayer).toHaveClass('z-[2]') expect(contentLayer).toHaveTextContent('Content') }) }) describe('Props', () => { it('should apply wrapperClassName to wrapper element', () => { const { wrapper } = renderGridMask({ wrapperClassName: 'custom-wrapper' }, Child) expect(wrapper).toHaveClass('custom-wrapper') expect(wrapper).toHaveClass('relative') }) it('should apply canvasClassName and grid background class to canvas layer', () => { const { canvasLayer } = renderGridMask({ canvasClassName: 'custom-canvas' }, Child) expect(canvasLayer).toHaveClass('custom-canvas') expect(canvasLayer).toHaveClass(Style.gridBg) }) it('should apply gradientClassName to gradient layer', () => { const { gradientLayer } = renderGridMask({ gradientClassName: 'custom-gradient' }, Child) expect(gradientLayer).toHaveClass('custom-gradient') expect(gradientLayer).toHaveClass('bg-grid-mask-background') }) }) })