import * as React from 'react' import renderWithTheme from '../../tests/helpers/renderWithTheme' import Grid from './Grid' describe('component: Grid', () => { describe('pseudo-flex mode', () => { // TODO So at the moment we can't actually test anything other than tiny, // because JSDOM apparently doesn't support interpreting media queries. // If we implement our own parser (see CACTUS-975) we may be able to use // ScreenSizeProvider in test mode to test other screen sizes. test('grid defaults', () => { const { getByTestId } = renderWithTheme() expect(getByTestId('grid')).toHaveStyle({ // Inherited from Box: boxSizing: 'border-box', // Inherited from Flex: flexWrap: 'wrap', // Original to Grid: display: 'grid', gap: '16px', justifyItems: 'normal', width: '100%', gridTemplateColumns: 'repeat(12,minmax(1px,1fr))', }) }) test('screen size: tiny', () => { const { getByTestId } = renderWithTheme( ) expect(getByTestId('item')).toHaveStyle({ gridColumnEnd: 'span 6' }) }) }) test('should render grid styles', () => { // JSDOM doesn't really interpret grid styles, so even though several of these // are invalid/conflicting, it shows that the styles are properly forwarded. const { getByTestId } = renderWithTheme( ) expect(getByTestId('grid')).toHaveStyle({ display: 'grid', grid: 'test1', gridTemplate: 'test2', gridTemplateAreas: 'test3', gridTemplateRows: 'repeat(4,200px)', gridTemplateColumns: '1fr 3fr 50px', justifyItems: 'start', justifyContent: 'end', alignItems: 'stretch', alignContent: 'center', gridAutoFlow: 'test4', gridAutoRows: 'test5', gridAutoColumns: 'test6', rowGap: '14px', columnGap: '24px', // `width` isn't overridden properly, possibly because it's defined in Box... width: '100%', }) }) test('should render grid row/col shortcuts', () => { const { getByTestId } = renderWithTheme() expect(getByTestId('grid')).toHaveStyle({ display: 'grid', gridTemplateRows: 'repeat(3,min-content)', gridTemplateColumns: 'repeat(7,1fr)', }) }) test('should render grid areas', () => { const { container } = renderWithTheme( ) expect(container.querySelector('.big')).toHaveStyle({ gridArea: '1/1/3/span 4' }) expect(container.querySelector('.right')).toHaveStyle({ gridArea: '1/5/span 3/6' }) expect(container.querySelector('.bottom')).toHaveStyle({ gridArea: '3/1/auto/-1' }) }) })