import { screen, render, fireEvent } from '@testing-library/react'; import SequenceSubmission from '../sequence-submission'; import { validResponse } from '../../sequence-utils/sequenceValidator'; describe('SequenceSubmission', () => { const multipleSequences = `> sequence_1 ACTGUACTGUACTGU > sequence_2 ACTGAUTTGUATTGUUUGU `; it('should render', () => { const { asFragment } = render(); expect(asFragment()).toMatchSnapshot(); }); it('should render with sequence is invalid error', () => { const { asFragment } = render( ); expect(asFragment()).toMatchSnapshot(); }); it('should render with sequence is missing error', () => { const { asFragment } = render(); expect(asFragment()).toMatchSnapshot(); }); it('should validate after onChange event', async () => { render(); const textarea = screen.getByTestId('sequence-submission-input'); fireEvent.change(textarea, { target: { value: 'ACTGUACTGUACTGU+' } }); const error = await screen.findByTestId('sequence-submission-error'); expect(error).toBeInTheDocument(); }); it('should call custom onChange callback once', async () => { const onChange = jest.fn(); const value = 'ACTGUACTGUACTGU'; render( onChange(e)} />); const textarea = screen.getByTestId('sequence-submission-input'); fireEvent.change(textarea, { target: { value } }); expect(onChange).toHaveBeenCalledTimes(1); expect(onChange).toHaveBeenCalledWith([ { ...validResponse, header: '', name: '', sequence: value, likelyType: 'na', raw: value, }, ]); }); it('should render with too many sequences error', () => { render( ); expect( screen.getByText( 'Your input contains 2 sequences which exceeds the submission limit of 1.' ) ).toBeInTheDocument(); }); it('should render with too few sequences error', () => { render( ); expect( screen.getByText( 'Your input contains 2 sequences. At least 3 sequences are required.' ) ).toBeInTheDocument(); }); });