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();
+ });
+ });
});