import React from 'react';
import { fireEvent, render, renderHook } from '@testing-library/react-native';
import { icons } from '../../../../assets';
import FederatedProviderButton from '../FederatedProviderButton';
import { useTheme } from '../../../../theme';
import { getThemedStyles as getButtonThemedStyles } from '../../../../primitives/Button/styles';
import { styles } from '../styles';
const signInText = 'Sign In with Amazon';
describe('FederatedProviderButton', () => {
it('renders default button as expected', () => {
const { toJSON, getByRole } = render(
{signInText}
);
expect(toJSON()).toMatchSnapshot();
expect(getByRole('button')).toBeDefined();
const icon = getByRole('image');
expect(icon).toBeDefined();
expect(icon.props.source).toEqual(icons.amazonLogo);
});
it('handles an onPress callback', () => {
const toFederatedSignInMock = jest.fn();
const { getByText } = render(
{signInText}
);
const button = getByText(signInText);
fireEvent.press(button);
expect(toFederatedSignInMock).toHaveBeenCalledTimes(1);
});
it('applies style props', () => {
const customStyle = { backgroundColor: 'blue' };
const { toJSON, getByRole } = render(
{signInText}
);
const { result } = renderHook(() => useTheme());
const buttonThemedStyle = getButtonThemedStyles(result.current);
expect(getByRole('button').props.style).toStrictEqual([
{ ...buttonThemedStyle.container, ...buttonThemedStyle.containerDefault },
undefined, // button pressed styles
[
styles.container,
undefined, // pressed style
customStyle,
],
]);
expect(toJSON()).toMatchSnapshot();
});
});