-
Notifications
You must be signed in to change notification settings - Fork 374
Expand file tree
/
Copy pathMessageStatus.test.js
More file actions
119 lines (102 loc) · 3.97 KB
/
MessageStatus.test.js
File metadata and controls
119 lines (102 loc) · 3.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import React from 'react';
import { cleanup, render, waitFor } from '@testing-library/react-native';
import { Channel } from '../../..';
import { ChannelsStateProvider } from '../../../../contexts/channelsStateContext/ChannelsStateContext';
import { getOrCreateChannelApi } from '../../../../mock-builders/api/getOrCreateChannel';
import { useMockedApis } from '../../../../mock-builders/api/useMockedApis';
import { generateChannelResponse } from '../../../../mock-builders/generator/channel';
import { generateMember } from '../../../../mock-builders/generator/member';
import { generateMessage } from '../../../../mock-builders/generator/message';
import { generateStaticUser, generateUser } from '../../../../mock-builders/generator/user';
import { getTestClientWithUser } from '../../../../mock-builders/mock';
import { Streami18n } from '../../../../utils/i18n/Streami18n';
import { Chat } from '../../../Chat/Chat';
import { MessageStatus } from '../MessageStatus';
let chatClient;
let i18nInstance;
let channel;
describe('MessageStatus', () => {
const user1 = generateUser({ id: 'id1', name: 'name1' });
const user2 = generateUser({ id: 'id2', name: 'name2' });
const user3 = generateUser({ id: 'id3', name: 'name3' });
const messages = [generateMessage({ user: user1 })];
const members = [
generateMember({ user: user1 }),
generateMember({ user: user2 }),
generateMember({ user: user3 }),
];
beforeAll(() => {
id = 'testID';
i18nInstance = new Streami18n();
});
beforeEach(async () => {
jest.clearAllMocks();
const mockedChannel = generateChannelResponse({
members,
messages,
});
chatClient = await getTestClientWithUser(user1);
useMockedApis(chatClient, [getOrCreateChannelApi(mockedChannel)]);
channel = chatClient.channel('messaging', mockedChannel.id);
});
afterEach(cleanup);
renderMessageStatus = (options, channelProps) =>
render(
<ChannelsStateProvider>
<Chat client={chatClient}>
<Channel channel={channel} {...channelProps}>
<MessageStatus {...options} />
</Channel>
</Chat>
</ChannelsStateProvider>,
);
it('should render message status with delivered container', async () => {
const user = generateUser();
const message = generateMessage({ user });
const { getByTestId } = renderMessageStatus({
lastReceivedId: message.id,
message: { ...message, status: 'received' },
});
await waitFor(() => {
expect(getByTestId('delivered-container')).toBeTruthy();
});
});
it('should render message status with read by container', async () => {
const user = generateUser();
const message = generateMessage({ readBy: 2, user });
const { getByTestId, getByText, rerender, toJSON } = renderMessageStatus({
lastReceivedId: message.id,
message,
});
await waitFor(() => {
expect(getByTestId('read-by-container')).toBeTruthy();
expect(getByText((message.readBy - 1).toString())).toBeTruthy();
});
const staticUser = generateStaticUser(0);
const staticMessage = generateMessage({ readBy: 2, staticUser });
rerender(
<ChannelsStateProvider>
<Chat client={chatClient} i18nInstance={i18nInstance}>
<Channel channel={channel}>
<MessageStatus lastReceivedId={staticMessage.id} message={staticMessage} />
</Channel>
</Chat>
</ChannelsStateProvider>,
);
await waitFor(() => {
expect(toJSON()).toMatchSnapshot();
expect(getByTestId('read-by-container')).toBeTruthy();
expect(getByText((staticMessage.readBy - 1).toString())).toBeTruthy();
});
});
it('should render message status with sending container', async () => {
const user = generateUser();
const message = generateMessage({ user });
const { getByTestId } = renderMessageStatus({
message: { ...message, status: 'sending' },
});
await waitFor(() => {
expect(getByTestId('sending-container')).toBeTruthy();
});
});
});