diff --git a/package/src/components/MessageInput/__tests__/MessageInput.test.js b/package/src/components/MessageInput/__tests__/MessageInput.test.js index 68b8c1681b..c76e38fdfd 100644 --- a/package/src/components/MessageInput/__tests__/MessageInput.test.js +++ b/package/src/components/MessageInput/__tests__/MessageInput.test.js @@ -1,9 +1,10 @@ -import React from 'react'; +import React, { useEffect } from 'react'; import { Alert } from 'react-native'; -import { cleanup, fireEvent, render, userEvent, waitFor } from '@testing-library/react-native'; +import { act, cleanup, fireEvent, render, userEvent, waitFor } from '@testing-library/react-native'; +import { useMessagesContext } from '../../../contexts'; import * as AttachmentPickerUtils from '../../../contexts/attachmentPickerContext/AttachmentPickerContext'; import { OverlayProvider } from '../../../contexts/overlayContext/OverlayProvider'; import { getOrCreateChannelApi } from '../../../mock-builders/api/getOrCreateChannel'; @@ -188,4 +189,117 @@ describe('MessageInput', () => { expect(Alert.alert).toHaveBeenCalledWith('Hold to start recording.'); }); }); + + it('should render the SendMessageDisallowedIndicator if the send-message capability is not present', async () => { + await initializeChannel(generateChannelResponse()); + + const { queryByTestId } = render( + + + + + , + ); + + await waitFor(() => { + expect(queryByTestId('send-message-disallowed-indicator')).toBeNull(); + }); + + act(() => { + chatClient.dispatchEvent({ + cid: channel.data.cid, + own_capabilities: channel.data.own_capabilities.filter( + (capability) => capability !== 'send-message', + ), + type: 'capabilities.changed', + }); + }); + + await waitFor(() => { + expect(queryByTestId('send-message-disallowed-indicator')).toBeTruthy(); + }); + }); + + it('should not render the SendMessageDisallowedIndicator if the channel is frozen and the send-message capability is present', async () => { + await initializeChannel(generateChannelResponse({ channel: { frozen: true } })); + + const { queryByTestId } = render( + + + + + , + ); + + await waitFor(() => { + expect(queryByTestId('send-message-disallowed-indicator')).toBeNull(); + }); + }); + + it('should render the SendMessageDisallowedIndicator in a frozen channel only if the send-message capability is not present', async () => { + await initializeChannel(generateChannelResponse({ channel: { frozen: true } })); + + const { queryByTestId } = render( + + + + + , + ); + + act(() => { + chatClient.dispatchEvent({ + channel: { + ...channel.data, + own_capabilities: channel.data.own_capabilities.filter( + (capability) => capability !== 'send-message', + ), + }, + cid: channel.data.cid, + type: 'channel.updated', + }); + }); + + await waitFor(() => { + expect(queryByTestId('send-message-disallowed-indicator')).toBeTruthy(); + }); + }); + + const EditingStateMessageInput = () => { + const { setEditingState } = useMessagesContext(); + useEffect(() => { + setEditingState({ id: 'some-message-id' }); + }, []); + return ; + }; + + it('should not render the SendMessageDisallowedIndicator if we are editing a message, regardless of capabilities', async () => { + await initializeChannel(generateChannelResponse()); + + const { queryByTestId } = render( + + + + + , + ); + + await waitFor(() => { + expect(queryByTestId('send-message-disallowed-indicator')).toBeNull(); + }); + + act(() => { + chatClient.dispatchEvent({ + cid: channel.data.cid, + own_capabilities: channel.data.own_capabilities.filter( + (capability) => capability !== 'send-message', + ), + type: 'capabilities.changed', + }); + }); + + await waitFor(() => { + expect(queryByTestId('send-message-disallowed-indicator')).toBeNull(); + }); + }); });