import * as React from 'react';
import { render, screen } from '@testing-library/react';
import { Flex } from '../Flex';
import { FlexItem } from '../FlexItem';
describe('Flex', () => {
test('Simple flex with single item', () => {
const { asFragment } = render(
Test
);
expect(asFragment()).toMatchSnapshot();
});
test('Nested flex', () => {
const { asFragment } = render(
Test
);
expect(asFragment()).toMatchSnapshot();
});
test('className is added to the root element', () => {
render();
expect(screen.getByTestId('test-id')).toHaveClass('extra-class');
});
const flexModifiers = {
spacer: [
'spacerNone',
'spacerXs',
'spacerSm',
'spacerMd',
'spacerLg',
'spacerXl',
'spacer2xl',
'spacer3xl',
'spacer4xl'
],
spaceItems: [
'spaceItemsNone',
'spaceItemsXs',
'spaceItemsSm',
'spaceItemsMd',
'spaceItemsLg',
'spaceItemsXl',
'spaceItems2xl',
'spaceItems3xl',
'spaceItems4xl'
],
grow: ['grow'],
shrink: ['shrink'],
flex: ['flexDefault', 'flexNone', 'flex_1', 'flex_2', 'flex_3', 'flex_4'],
direction: ['column', 'columnReverse', 'row', 'rowReverse'],
alignItems: [
'alignItemsFlexStart',
'alignItemsFlexEnd',
'alignItemsCenter',
'alignItemsStretch',
'alignItemsBaseline'
],
alignContent: [
'alignContentFlexStart',
'alignContentFlexEnd',
'alignContentCenter',
'alignContentStretch',
'alignContentSpaceBetween',
'alignContentSpaceAround'
],
alignSelf: ['alignSelfFlexStart', 'alignSelfFlexEnd', 'alignSelfCenter', 'alignSelfStretch', 'alignSelfBaseline'],
align: ['alignLeft', 'alignRight'],
justifyContent: [
'justifyContentFlexStart',
'justifyContentFlexEnd',
'justifyContentCenter',
'justifyContentSpaceBetween',
'justifyContentSpaceAround',
'justifyContentSpaceEvenly'
],
display: ['inlineFlex'],
fullWidth: ['fullWidth'],
flexWrap: ['wrap', 'wrapReverse', 'nowrap'],
gap: ['gapNone', 'gapXs', 'gapSm', 'gapMd', 'gapLg', 'gapXl', 'gap2xl', 'gap3xl', 'gap4xl'],
rowGap: [
'rowGapNone',
'rowGapXs',
'rowGapSm',
'rowGapMd',
'rowGapLg',
'rowGapXl',
'rowGap2xl',
'rowGap3xl',
'rowGap4xl'
],
columnGap: [
'columnGapNone',
'columnGapXs',
'columnGapSm',
'columnGapMd',
'columnGapLg',
'columnGapXl',
'columnGap2xl',
'columnGap3xl',
'columnGap4xl'
]
};
describe('flex modifiers', () => {
Object.entries(flexModifiers)
.map(([mod, values]) =>
values.map((value) => ({
[mod]: {
default: value,
sm: value,
md: value,
lg: value,
xl: value,
'2xl': value
}
}))
)
.reduce((acc, val) => acc.concat(val), [])
.forEach((props) =>
test(`${JSON.stringify(props)} add valid classes to Flex`, () => {
render(
{JSON.stringify(props)}
);
const className = screen.getByTestId('test-id').className.replace('pf-v5-l-flex', '').trim();
expect(className).not.toBe("''");
expect(className).not.toBe('');
})
);
});
const flexItemModifiers = {
spacer: flexModifiers.spacer,
grow: flexModifiers.grow,
shrink: flexModifiers.shrink,
flex: flexModifiers.flex,
alignSelf: flexModifiers.alignSelf,
align: flexModifiers.align,
fullWidth: flexModifiers.fullWidth
};
describe('flexItem modifiers', () => {
Object.entries(flexItemModifiers)
.map(([mod, values]) =>
values.map((value) => ({
[mod]: {
default: value,
sm: value,
lg: value,
xl: value,
'2xl': value
}
}))
)
.reduce((acc, val) => acc.concat(val), [])
.forEach((props) =>
test(`${JSON.stringify(props)} add valid classes to FlexItem`, () => {
render(
{JSON.stringify(props)}
);
const className = screen.getByTestId('test-id').className.trim();
expect(className).not.toBe("''");
expect(className).not.toBe('');
})
);
});
test('alternative component', () => {
const { asFragment } = render(
Test
);
expect(asFragment()).toMatchSnapshot();
});
});