import React from 'react';
import { fireEvent, render, renderHook } from '@testing-library/react-native';
import { useTheme } from '../../../theme';
import { CLOSE_BUTTON_TEST_ID } from '../ErrorMessage';
import ErrorMessage from '../ErrorMessage';
import { getThemedStyles } from '../styles';
describe('ErrorMessage', () => {
it('renders default ErrorMessage as expected', () => {
const { toJSON, queryByTestId } = render(
Default ErrorMessage
);
expect(toJSON()).toMatchSnapshot();
expect(queryByTestId(CLOSE_BUTTON_TEST_ID)).toBeFalsy();
});
it('handles an onDismiss callback', () => {
const customOnDismiss = jest.fn();
const { getByTestId } = render(
Default ErrorMessage
);
const dismissButton = getByTestId(CLOSE_BUTTON_TEST_ID);
fireEvent.press(dismissButton);
expect(customOnDismiss).toHaveBeenCalledTimes(1);
});
it('applies theme and style props', () => {
const customStyle = { backgroundColor: 'blue' };
const customLabelStyle = { color: 'white' };
const labelText = 'Themed ErrorMessage';
const { getByRole, getByText, toJSON } = render(
{labelText}
);
const { result } = renderHook(() => useTheme());
const themedStyle = getThemedStyles(result.current);
const alert = getByRole('alert');
const label = getByText(labelText);
expect(alert.props.style).toStrictEqual([
themedStyle.container,
customStyle,
]);
expect(label.props.style).toStrictEqual([
themedStyle.label,
customLabelStyle,
]);
expect(toJSON()).toMatchSnapshot();
});
});