// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 import '@testing-library/jest-dom'; import { fireEvent } from '@testing-library/dom'; import { act } from '@testing-library/react'; import React from 'react'; import EditableChatBubble from '../../../../../src/components/ui/Chat/ChatBubble/EditableChatBubble'; import lightTheme from '../../../../../src/theme/light'; import { renderWithTheme } from '../../../../test-helpers'; describe('ChatBubble', () => { const save = jest.fn((e) => e.preventDefault()); const cancel = jest.fn((e) => e.preventDefault()); it('should render an EditableChatBubble component in the document', () => { const component = ( ); const { getByTestId } = renderWithTheme(lightTheme, component); const message = getByTestId('editable-chat-bubble'); expect(message).toBeInTheDocument(); }); it('should render an input in the EditableChatBubble component input', () => { const component = ( ); const { getByTestId } = renderWithTheme(lightTheme, component); const input = getByTestId('input'); expect(input).toBeInTheDocument(); }); it('should render the name in the EditableChatBubble component', () => { const component = ( ); const { getByText } = renderWithTheme(lightTheme, component); const name = getByText('test user'); expect(name).toBeInTheDocument(); }); it('should not render the name in the EditableChatBubble component if showName is false', () => { const component = ( ); const { queryByText } = renderWithTheme(lightTheme, component); const name = queryByText('test user'); expect(name).not.toBeInTheDocument(); }); it('should render a bubble tail in the EditableChatBubble component', () => { const component = ( ); const { getByTestId } = renderWithTheme(lightTheme, component); const content = getByTestId('tail'); expect(content).toBeInTheDocument(); }); it('should not render a bubble tail in the EditableChatBubble component if showTail is false', () => { const component = ( ); const { queryByTestId } = renderWithTheme(lightTheme, component); const name = queryByTestId('tail'); expect(name).not.toBeInTheDocument(); }); it('show call save function with save button is clicked', () => { const component = ( ); const { getByLabelText } = renderWithTheme(lightTheme, component); const saveButton = getByLabelText('Save'); act(() => { fireEvent.click(saveButton); }); expect(save).toHaveBeenCalled(); }); it('show call save function with enter button is clicked', () => { const component = ( ); renderWithTheme(lightTheme, component); act(() => { fireEvent.keyDown(document.activeElement || document.body, { key: 'enter', keyCode: 13, }); }); expect(save).toHaveBeenCalled(); }); it('show call cancel function with cancel button is clicked', () => { const component = ( ); const { getByLabelText } = renderWithTheme(lightTheme, component); const cancelButton = getByLabelText('Cancel'); act(() => { fireEvent.click(cancelButton); }); expect(cancel).toHaveBeenCalled(); }); });