import React from 'react';
import { fireEvent, render, waitFor } from '@testing-library/react-native';
import { authenticatorTextUtil } from '@aws-amplify/ui';
import { SetupTOTP } from '..';
const code = {
name: 'code',
label: 'Code',
placeholder: 'Code',
type: 'default' as const,
};
const fields = [code];
const toSignIn = jest.fn();
const props = {
error: null as unknown as string,
fields,
Footer: SetupTOTP.Footer,
FormFields: SetupTOTP.FormFields,
Header: SetupTOTP.Header,
handleBlur: jest.fn(),
handleChange: jest.fn(),
handleSubmit: jest.fn(),
hasValidationErrors: false,
isPending: false,
toSignIn,
totpSecretCode: "Let's keep it hush hush",
};
const {
getBackToSignInText,
getConfirmingText,
getConfirmText,
getSetupTOTPText,
} = authenticatorTextUtil;
describe('SetupTOTP', () => {
beforeEach(() => {
jest.clearAllMocks();
});
it('renders as expected', () => {
const { toJSON, getAllByRole, getByText } = render(
);
expect(toJSON()).toMatchSnapshot();
expect(getAllByRole('header')).toBeDefined();
expect(getByText(getSetupTOTPText())).toBeDefined();
expect(getByText(getConfirmText())).toBeDefined();
});
it('renders an error message', () => {
const errorMessage = 'Test error message';
const { toJSON, getByText } = render(
);
expect(toJSON()).toMatchSnapshot();
expect(getByText(errorMessage)).toBeDefined();
});
it('calls toSignIn an secondary button press', () => {
const { getByText } = render();
const secondaryButton = getByText(getBackToSignInText());
expect(secondaryButton).toBeDefined();
fireEvent(secondaryButton, 'press');
expect(toSignIn).toHaveBeenCalledTimes(1);
});
it('shows the correct submit button based on isPending', async () => {
const { queryByText } = render();
await waitFor(() => {
expect(queryByText(getConfirmingText())).toBeDefined();
expect(queryByText(getConfirmText())).toBe(null);
});
});
});