import { render, renderHook, screen } from '@testing-library/react-native';
import { useRef } from 'react';
import { View } from 'react-native';
import type { ReactTestRendererJSON } from 'react-test-renderer';
import { flex, Flex } from './flex';
describe('Flex', () => {
it(`Flex is rendered as `, () => {
const treeJSON = render().toJSON() as ReactTestRendererJSON;
expect(treeJSON.type).toBe('View');
});
it('Flex.Center applies align="center" justify="center"', () => {
render();
expect(screen.getByTestId('flex')).toHaveStyle({
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
flexDirection: 'column',
});
});
it('Flex.CenterVertical applies justify="center"', () => {
render();
expect(screen.getByTestId('flex')).toHaveStyle({
display: 'flex',
justifyContent: 'center',
alignItems: 'stretch',
flexDirection: 'column',
});
});
it('Flex.CenterHorizontal applies justyfyContent="center"', () => {
render();
expect(screen.getByTestId('flex')).toHaveStyle({
display: 'flex',
justifyContent: 'flex-start',
alignItems: 'center',
flexDirection: 'column',
});
});
describe('ref', () => {
it(`Flex should be able to receive ref`, () => {
const {
result: { current: ref },
} = renderHook(() => useRef(null));
render();
expect(ref.current).not.toBeNull();
});
});
});
describe('flex', () => {
it(`when passing an empty object to flex, it returns defaultProps with display="flex" direction="column" justify="flex-start" align="stretch"`, () => {
const result = flex({});
expect(result).toMatchInlineSnapshot(`
{
"alignItems": "stretch",
"display": "flex",
"flexDirection": "column",
"justifyContent": "flex-start",
}
`);
});
it(`when passing string to flex, it returns with align, justify, direction applied`, () => {
const result = flex('flex-start', 'center', 'row');
expect(result).toMatchInlineSnapshot(`
{
"alignItems": "flex-start",
"display": "flex",
"flexDirection": "row",
"justifyContent": "center",
}
`);
});
it('flex.center() returns with justyfy="center" align="center"', () => {
const result = flex.center();
expect(result).toMatchInlineSnapshot(`
{
"alignItems": "center",
"display": "flex",
"flexDirection": "column",
"justifyContent": "center",
}
`);
});
});