Skip to content

Commit 18c9b7a

Browse files
fix: adjust tests, add generics
1 parent aa0ccb3 commit 18c9b7a

File tree

3 files changed

+39
-41
lines changed

3 files changed

+39
-41
lines changed

src/components/Message/__tests__/MessageOptions.test.js

+32-35
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import { MessageSimple } from '../MessageSimple';
99
import { ACTIONS_NOT_WORKING_IN_THREAD, MESSAGE_ACTIONS } from '../utils';
1010

1111
import { Attachment } from '../../Attachment';
12-
import { MessageActions as MessageActionsMock } from '../../MessageActions';
1312

1413
import { ChannelActionProvider } from '../../../context/ChannelActionContext';
1514
import { ChannelStateProvider } from '../../../context/ChannelStateContext';
@@ -23,9 +22,7 @@ import {
2322
getTestClientWithUser,
2423
} from '../../../mock-builders';
2524

26-
jest.mock('../../MessageActions', () => ({
27-
MessageActions: jest.fn(() => <div />),
28-
}));
25+
const MESSAGE_ACTIONS_TEST_ID = 'message-actions';
2926

3027
const minimumCapabilitiesToRenderMessageActions = { 'delete-any-message': true };
3128
const alice = generateUser({ name: 'alice' });
@@ -185,122 +182,122 @@ describe('<MessageOptions />', () => {
185182
});
186183

187184
it('should render message actions', async () => {
188-
await renderMessageOptions({
185+
const { queryByTestId } = await renderMessageOptions({
189186
channelStateOpts: { channelCapabilities: minimumCapabilitiesToRenderMessageActions },
190187
});
191-
// eslint-disable-next-line jest/prefer-called-with
192-
expect(MessageActionsMock).toHaveBeenCalled();
188+
189+
expect(queryByTestId(MESSAGE_ACTIONS_TEST_ID)).toBeInTheDocument();
193190
});
194191

195192
it('should not show message actions button if actions are disabled', async () => {
196-
await renderMessageOptions({
193+
const { queryByTestId } = await renderMessageOptions({
197194
channelStateOpts: { channelCapabilities: minimumCapabilitiesToRenderMessageActions },
198195
customMessageProps: { messageActions: [] },
199196
});
200-
expect(MessageActionsMock).;
197+
198+
expect(queryByTestId(MESSAGE_ACTIONS_TEST_ID)).not.toBeInTheDocument();
201199
});
202200

203201
it('should not show actions box for message in thread if only non-thread actions are available', async () => {
204-
await renderMessageOptions({
202+
const { queryByTestId } = await renderMessageOptions({
205203
channelStateOpts: { channelCapabilities: minimumCapabilitiesToRenderMessageActions },
206204
customMessageProps: { messageActions: ACTIONS_NOT_WORKING_IN_THREAD, threadList: true },
207205
});
208-
expect(MessageActionsMock).not.toHaveBeenCalled();
206+
207+
expect(queryByTestId(MESSAGE_ACTIONS_TEST_ID)).not.toBeInTheDocument();
209208
});
210209

211210
it('should show actions box for message in thread if not only non-thread actions are available', async () => {
212-
await renderMessageOptions({
211+
const { queryByTestId } = await renderMessageOptions({
213212
channelStateOpts: { channelCapabilities: minimumCapabilitiesToRenderMessageActions },
214213
customMessageProps: {
215214
messageActions: [...ACTIONS_NOT_WORKING_IN_THREAD, MESSAGE_ACTIONS.delete],
216215
threadList: true,
217216
},
218217
});
219-
// eslint-disable-next-line jest/prefer-called-with
220-
expect(MessageActionsMock).toHaveBeenCalled();
218+
219+
expect(queryByTestId(MESSAGE_ACTIONS_TEST_ID)).toBeInTheDocument();
221220
});
222221

223222
it('should show actions box for a message in thread if custom actions provided are non-thread', async () => {
224-
await renderMessageOptions({
223+
const { queryByTestId } = await renderMessageOptions({
225224
channelStateOpts: { channelCapabilities: minimumCapabilitiesToRenderMessageActions },
226225
customMessageProps: {
227226
customMessageActions: ACTIONS_NOT_WORKING_IN_THREAD,
228227
messageActions: ACTIONS_NOT_WORKING_IN_THREAD,
229228
threadList: true,
230229
},
231230
});
232-
// eslint-disable-next-line jest/prefer-called-with
233-
expect(MessageActionsMock).toHaveBeenCalled();
231+
expect(queryByTestId(MESSAGE_ACTIONS_TEST_ID)).toBeInTheDocument();
234232
});
235233

236234
it('should not show actions box for message outside thread with single action "react"', async () => {
237-
await renderMessageOptions({
235+
const { queryByTestId } = await renderMessageOptions({
238236
channelStateOpts: { channelCapabilities: minimumCapabilitiesToRenderMessageActions },
239237
customMessageProps: {
240238
messageActions: [MESSAGE_ACTIONS.react],
241239
},
242240
});
243-
// eslint-disable-next-line jest/prefer-called-with
244-
expect(MessageActionsMock).not.toHaveBeenCalled();
241+
expect(queryByTestId(MESSAGE_ACTIONS_TEST_ID)).not.toBeInTheDocument();
245242
});
246243

247244
it('should show actions box for message outside thread with single action "react" if custom actions available', async () => {
248-
await renderMessageOptions({
245+
const { queryByTestId } = await renderMessageOptions({
249246
channelStateOpts: { channelCapabilities: minimumCapabilitiesToRenderMessageActions },
250247
customMessageProps: {
251248
customMessageActions: [MESSAGE_ACTIONS.react],
252249
messageActions: [MESSAGE_ACTIONS.react],
253250
},
254251
});
255-
// eslint-disable-next-line jest/prefer-called-with
256-
expect(MessageActionsMock).toHaveBeenCalled();
252+
253+
expect(queryByTestId(MESSAGE_ACTIONS_TEST_ID)).toBeInTheDocument();
257254
});
258255

259256
it('should not show actions box for message outside thread with single action "reply"', async () => {
260-
await renderMessageOptions({
257+
const { queryByTestId } = await renderMessageOptions({
261258
channelStateOpts: { channelCapabilities: minimumCapabilitiesToRenderMessageActions },
262259
customMessageProps: {
263260
messageActions: [MESSAGE_ACTIONS.reply],
264261
},
265262
});
266-
// eslint-disable-next-line jest/prefer-called-with
267-
expect(MessageActionsMock).not.toHaveBeenCalled();
263+
264+
expect(queryByTestId(MESSAGE_ACTIONS_TEST_ID)).not.toBeInTheDocument();
268265
});
269266

270267
it('should show actions box for message outside thread with single action "reply" if custom actions available', async () => {
271-
await renderMessageOptions({
268+
const { queryByTestId } = await renderMessageOptions({
272269
channelStateOpts: { channelCapabilities: minimumCapabilitiesToRenderMessageActions },
273270
customMessageProps: {
274271
customMessageActions: [MESSAGE_ACTIONS.reply],
275272
messageActions: [MESSAGE_ACTIONS.reply],
276273
},
277274
});
278-
// eslint-disable-next-line jest/prefer-called-with
279-
expect(MessageActionsMock).toHaveBeenCalled();
275+
276+
expect(queryByTestId(MESSAGE_ACTIONS_TEST_ID)).toBeInTheDocument();
280277
});
281278

282279
it('should not show actions box for message outside thread with two actions "react" & "reply"', async () => {
283280
const actions = [MESSAGE_ACTIONS.react, MESSAGE_ACTIONS.reply];
284-
await renderMessageOptions({
281+
const { queryByTestId } = await renderMessageOptions({
285282
channelStateOpts: { channelCapabilities: minimumCapabilitiesToRenderMessageActions },
286283
customMessageProps: {
287284
messageActions: actions,
288285
},
289286
});
290-
// eslint-disable-next-line jest/prefer-called-with
291-
expect(MessageActionsMock).not.toHaveBeenCalled();
287+
288+
expect(queryByTestId(MESSAGE_ACTIONS_TEST_ID)).not.toBeInTheDocument();
292289
});
293290

294291
it('should show actions box for message outside thread with single actions "react" & "reply" if custom actions available', async () => {
295292
const actions = [MESSAGE_ACTIONS.react, MESSAGE_ACTIONS.reply];
296-
await renderMessageOptions({
293+
const { queryByTestId } = await renderMessageOptions({
297294
channelStateOpts: { channelCapabilities: minimumCapabilitiesToRenderMessageActions },
298295
customMessageProps: {
299296
customMessageActions: actions,
300297
messageActions: actions,
301298
},
302299
});
303-
// eslint-disable-next-line jest/prefer-called-with
304-
expect(MessageActionsMock).toHaveBeenCalled();
300+
301+
expect(queryByTestId(MESSAGE_ACTIONS_TEST_ID)).toBeInTheDocument();
305302
});
306303
});

src/components/Message/utils.tsx

+5-3
Original file line numberDiff line numberDiff line change
@@ -219,15 +219,17 @@ export const showMessageActionsBox = (
219219
inThread?: boolean | undefined,
220220
) => shouldRenderMessageActions({ inThread, messageActions: actions });
221221

222-
export const shouldRenderMessageActions = ({
222+
export const shouldRenderMessageActions = <
223+
SCG extends DefaultStreamChatGenerics = DefaultStreamChatGenerics
224+
>({
223225
customMessageActions,
224226
CustomMessageActionsList,
225227
inThread,
226228
messageActions,
227229
}: {
228230
messageActions: MessageActionsArray;
229-
customMessageActions?: CustomMessageActions;
230-
CustomMessageActionsList?: ComponentContextValue['CustomMessageActionsList'];
231+
customMessageActions?: CustomMessageActions<SCG>;
232+
CustomMessageActionsList?: ComponentContextValue<SCG>['CustomMessageActionsList'];
231233
inThread?: boolean;
232234
}) => {
233235
if (

src/components/MessageActions/MessageActions.tsx

+2-3
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ export const MessageActions = <
8080
threadList,
8181
} = useMessageContext<StreamChatGenerics>('MessageActions');
8282

83-
const { CustomMessageActionsList } = useComponentContext('MessageActions');
83+
const { CustomMessageActionsList } = useComponentContext<StreamChatGenerics>('MessageActions');
8484

8585
const { t } = useTranslationContext('MessageActions');
8686

@@ -99,8 +99,7 @@ export const MessageActions = <
9999

100100
const messageActions = getMessageActions();
101101

102-
const renderMessageActions = shouldRenderMessageActions({
103-
// @ts-expect-error
102+
const renderMessageActions = shouldRenderMessageActions<StreamChatGenerics>({
104103
customMessageActions,
105104
CustomMessageActionsList,
106105
inThread: threadList,

0 commit comments

Comments
 (0)