// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
import '@testing-library/jest-dom/extend-expect';
import { I18n } from '@aws-amplify/core';
import { fireEvent, queryByAttribute, render, screen, waitFor } from '@testing-library/react';
import MessageModal from '../MessageModal';
import { MessageModalProps, MessageModalType } from '../../util/types';
const getById = queryByAttribute.bind(null, 'id');
test('renders the message type MessageModal component', async () => {
const props: MessageModalProps = {
show: true,
hide: () => console.log('hide'),
message: 'Test message',
modalType: MessageModalType.MESSAGE
};
const messageModal = render();
await waitFor(() => {
getById(messageModal.container, 'message-modal');
});
expect(screen.getByText(props.message as string)).toBeInTheDocument();
expect(messageModal.baseElement).toMatchSnapshot();
});
test('renders the message type MessageModal component with confirm action', async () => {
const props: MessageModalProps = {
show: true,
hide: () => console.log('hide'),
message: 'Test message',
modalType: MessageModalType.MESSAGE,
confirmAction: () => console.log('confirm action')
};
const messageModal = render();
await waitFor(() => {
getById(messageModal.container, 'message-modal');
});
expect(screen.getByText(props.message as string)).toBeInTheDocument();
expect(messageModal.baseElement).toMatchSnapshot();
});
test('renders the confirm type MessageModal component', async () => {
const props: MessageModalProps = {
show: true,
hide: () => console.log('hide'),
message: 'Test message',
modalType: MessageModalType.CONFIRM,
confirmAction: () => console.log('confirm action')
};
const messageModal = render();
await waitFor(() => {
getById(messageModal.container, 'message-modal');
});
expect(screen.getByText(props.message as string)).toBeInTheDocument();
expect(messageModal.baseElement).toMatchSnapshot();
});
test('throws an error when confirm action is missing for the confirm type MessageModal component', async () => {
const props: MessageModalProps = {
show: true,
hide: () => console.log('hide'),
message: 'Test message',
modalType: MessageModalType.CONFIRM
};
expect(() => render()).toThrowError(Error(I18n.get('error.message.missing.action')));
});
test('tests handleConfirm function - async', async () => {
const props: MessageModalProps = {
show: true,
hide: () => console.log('hide'),
message: 'Test message',
modalType: MessageModalType.MESSAGE,
confirmAction: async () => console.log('confirm action')
};
const messageModal = render();
await waitFor(() => {
getById(messageModal.container, 'message-modal');
});
expect(screen.queryByText(I18n.get('ok'))).not.toBeNull();
fireEvent.click(screen.getByText(I18n.get('ok')));
});
test('tests handleConfirm function - sync', async () => {
const props: MessageModalProps = {
show: true,
hide: () => console.log('hide'),
message: 'Test message',
modalType: MessageModalType.CONFIRM,
confirmAction: () => console.log('confirm action')
};
const messageModal = render();
await waitFor(() => {
getById(messageModal.container, 'message-modal');
});
expect(screen.queryByText(I18n.get('confirm'))).not.toBeNull();
fireEvent.click(screen.getByText(I18n.get('confirm')));
});
test('tests clicking cancel', async () => {
const props: MessageModalProps = {
show: true,
hide: () => console.log('hide'),
message: 'Test message',
modalType: MessageModalType.CONFIRM,
confirmAction: () => console.log('confirm action')
};
const messageModal = render();
await waitFor(() => {
getById(messageModal.container, 'message-modal');
});
expect(screen.queryByText(I18n.get('cancel'))).not.toBeNull();
fireEvent.click(screen.getByText(I18n.get('cancel')));
});