import React from 'react'; import SendMessage, { Props, } from 'components/Topics/Topic/SendMessage/SendMessage'; import { MessageSchemaSourceEnum } from 'generated-sources'; import { fireEvent, render, screen, waitFor } from '@testing-library/react'; const mockConvertToYup = jest .fn() .mockReturnValue(() => ({ validate: () => true })); jest.mock('yup-faker', () => ({ getFakeData: () => ({ f1: -93251214, schema: 'enim sit in fugiat dolor', f2: 'deserunt culpa sunt', }), })); const setupWrapper = (props?: Partial) => ( ); describe('SendMessage', () => { it('calls fetchTopicMessageSchema on first render', () => { const fetchTopicMessageSchemaMock = jest.fn(); render( setupWrapper({ fetchTopicMessageSchema: fetchTopicMessageSchemaMock }) ); expect(fetchTopicMessageSchemaMock).toHaveBeenCalledTimes(1); }); describe('when schema is fetched', () => { it('calls sendTopicMessage on submit', async () => { jest.mock('json-schema-yup-transformer', () => mockConvertToYup); jest.mock('../validateMessage', () => jest.fn().mockReturnValue(true)); const mockSendTopicMessage = jest.fn(); render( setupWrapper({ schemaIsFetched: true, sendTopicMessage: mockSendTopicMessage, }) ); const select = await screen.findByLabelText('Partition'); fireEvent.change(select, { target: { value: 2 }, }); await waitFor(async () => { fireEvent.click(await screen.findByText('Send')); expect(mockSendTopicMessage).toHaveBeenCalledTimes(1); }); }); }); });