import { fireEvent, render, screen, within } from '@testing-library/react'; import '@testing-library/jest-dom'; import AttachmentEdit, { AttachmentEditProps } from './AttachmentEdit'; describe('AttachmentEdit', () => { it('should open AttachmentEdit modal', () => { const props: AttachmentEditProps = { code: 'code', fileName: 'fileName', onCancel: jest.fn(), onSave: jest.fn(), isModalOpen: true, handleModalToggle: jest.fn() }; render(); expect(screen.getByText('Edit attachment')).toBeTruthy(); }); it('should call onSave handler when the save button is clicked', () => { const onSaveHandler = jest.fn(); const props: AttachmentEditProps = { code: 'code', fileName: 'fileName', onCancel: jest.fn(), onSave: onSaveHandler, isModalOpen: true, handleModalToggle: jest.fn() }; render(); // Click on save button fireEvent.click(screen.getByText('Save')); expect(onSaveHandler).toHaveBeenCalledWith(expect.any(Object), 'code'); }); it('should call cancel handler when the cancel button is clicked', () => { const onCancelHandler = jest.fn(); const props: AttachmentEditProps = { code: 'code', fileName: 'fileName', onCancel: onCancelHandler, onSave: jest.fn(), isModalOpen: true, handleModalToggle: jest.fn() }; render(); // Click on cancel button fireEvent.click(screen.getByText('Cancel')); expect(onCancelHandler).toHaveBeenCalled(); }); it('should render custom button text for footer actions buttons', () => { render( ); expect(screen.getByText('Save')).toBeInTheDocument(); expect(screen.getByText('Close')).toBeInTheDocument(); }); it('should render AttachmentEdit with custom classNames', async () => { render( ); const modal = screen.getByRole('dialog'); const modalHeader = within(modal).getByRole('banner'); expect(modalHeader).toHaveClass('custom-header-class'); const modalBody = modal.querySelector('#code-modal-body'); expect(modalBody).toHaveClass('custom-body-class'); const modalfooter = within(modal).getByRole('contentinfo'); expect(modalfooter).toHaveClass('custom-footer-class'); }); });