import React from 'react'; import '@testing-library/jest-dom'; import { DropdownItem } from '@patternfly/react-core'; import { fireEvent, render, screen, waitFor } from '@testing-library/react'; import ChatbotConversationHistoryDropdown from './ChatbotConversationHistoryDropdown'; describe('ChatbotConversationHistoryDropdown', () => { const onSelect = jest.fn(); const menuItems = ( <> Rename Delete ); it('should render the dropdown', () => { render(); expect(screen.queryByRole('menuitem', { name: /Conversation options/i })).toBeInTheDocument(); }); it('should display the dropdown menuItems', () => { render(); const toggle = screen.queryByRole('menuitem', { name: /Conversation options/i })!; expect(toggle).toBeInTheDocument(); fireEvent.click(toggle); waitFor(() => { expect(screen.getByText('Rename')).toBeInTheDocument(); expect(screen.getByText('Delete')).toBeInTheDocument(); }); }); it('should invoke onSelect callback when menuitem is clicked', () => { render(); const toggle = screen.queryByRole('menuitem', { name: /Conversation options/i })!; fireEvent.click(toggle); fireEvent.click(screen.getByText('Rename')); expect(onSelect).toHaveBeenCalled(); }); it('should toggle the dropdown when menuitem is clicked', () => { render(); const toggle = screen.queryByRole('menuitem', { name: /Conversation options/i })!; fireEvent.click(toggle); fireEvent.click(screen.getByText('Delete')); expect(onSelect).toHaveBeenCalled(); expect(screen.queryByText('Delete')).not.toBeInTheDocument(); }); it('should close the dropdown when user clicks outside', () => { render(); const toggle = screen.queryByRole('menuitem', { name: /Conversation options/i })!; fireEvent.click(toggle); expect(screen.queryByText('Delete')).toBeInTheDocument(); fireEvent.click(toggle.parentElement!); expect(screen.queryByText('Delete')).not.toBeInTheDocument(); }); it('should show the tooltip when the user hovers over the toggle button', async () => { render(); const toggle = screen.queryByRole('menuitem', { name: /Actions dropdown/i })!; fireEvent( toggle, new MouseEvent('mouseenter', { bubbles: false, cancelable: false }) ); await waitFor(() => { expect(screen.queryByText('Actions dropdown')).toBeInTheDocument(); }); }); });