@eeacms/volto-chatbot
Version:
@eeacms/volto-chatbot: Volto add-on
66 lines (54 loc) • 2 kB
JSX
import '@testing-library/jest-dom';
import { render, screen, fireEvent } from '@testing-library/react';
import ChatMessageFeedback from './ChatMessageFeedback';
jest.mock('./FeedbackModal', () => (props) => {
const { modalOpen, onClose, onToast } = props;
return modalOpen ? (
<div data-testid="feedback-modal">
Modal Open
<button
onClick={() => {
onToast('Thank you for your feedback!', 'success');
onClose();
}}
>
Submit Feedback
</button>
</div>
) : null;
});
jest.mock('./utils', () => ({
SVGIcon: ({ name }) => <img src={name} alt="icon" />,
}));
jest.mock('./../icons/thumbs-up.svg', () => 'thumbs-up.svg');
jest.mock('./../icons/thumbs-down.svg', () => 'thumbs-down.svg');
describe('ChatMessageFeedback', () => {
const defaultProps = {
message: 'Test message',
feedbackReasons: ['Reason 1', 'Reason 2'],
};
it('renders Like and Dislike buttons', () => {
render(<ChatMessageFeedback {...defaultProps} />);
expect(screen.getByLabelText('Like')).toBeInTheDocument();
expect(screen.getByLabelText('Dislike')).toBeInTheDocument();
});
it('opens modal when Like is clicked', () => {
render(<ChatMessageFeedback {...defaultProps} />);
fireEvent.click(screen.getByLabelText('Like'));
expect(screen.getByTestId('feedback-modal')).toBeInTheDocument();
});
it('opens modal when Dislike is clicked', () => {
render(<ChatMessageFeedback {...defaultProps} />);
fireEvent.click(screen.getByLabelText('Dislike'));
expect(screen.getByTestId('feedback-modal')).toBeInTheDocument();
});
it('shows toast after submitting feedback in modal', () => {
render(<ChatMessageFeedback {...defaultProps} />);
fireEvent.click(screen.getByLabelText('Like'));
const submitButton = screen.getByText('Submit Feedback');
fireEvent.click(submitButton);
expect(
screen.getByText('Thank you for your feedback!'),
).toBeInTheDocument();
});
});