Skip to content

Commit 14b2be7

Browse files
committed
chore: add mark unread tests and update read tests in db
1 parent e5bcc1d commit 14b2be7

File tree

5 files changed

+65
-4
lines changed

5 files changed

+65
-4
lines changed

package/src/__tests__/offline-support/offline-feature.js

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import dispatchMessageNewEvent from '../../mock-builders/event/messageNew';
2626
import dispatchMessageReadEvent from '../../mock-builders/event/messageRead';
2727
import dispatchMessageUpdatedEvent from '../../mock-builders/event/messageUpdated';
2828
import dispatchNotificationAddedToChannel from '../../mock-builders/event/notificationAddedToChannel';
29+
import dispatchNotificationMarkUnread from '../../mock-builders/event/notificationMarkUnread';
2930
import dispatchNotificationMessageNewEvent from '../../mock-builders/event/notificationMessageNew';
3031
import dispatchNotificationRemovedFromChannel from '../../mock-builders/event/notificationRemovedFromChannel';
3132
import dispatchReactionDeletedEvent from '../../mock-builders/event/reactionDeleted';
@@ -1244,8 +1245,14 @@ export const Generic = () => {
12441245
const targetChannel = channels[getRandomInt(0, channels.length - 1)];
12451246
const targetMember = targetChannel.members[getRandomInt(0, targetChannel.members.length - 1)];
12461247

1248+
const readTimestamp = new Date().toISOString();
1249+
12471250
act(() => {
1248-
dispatchMessageReadEvent(chatClient, targetMember.user, targetChannel.channel);
1251+
dispatchMessageReadEvent(chatClient, targetMember.user, targetChannel.channel, {
1252+
first_unread_message_id: '123',
1253+
last_read: readTimestamp,
1254+
last_read_message_id: '321',
1255+
});
12491256
});
12501257

12511258
await waitFor(async () => {
@@ -1256,6 +1263,54 @@ export const Generic = () => {
12561263

12571264
expect(matchingReadRows.length).toBe(1);
12581265
expect(matchingReadRows[0].unreadMessages).toBe(0);
1266+
expect(matchingReadRows[0].lastReadMessageId).toBe('321');
1267+
// FIXME: Currently missing from the DB, uncomment when added.
1268+
// expect(matchingReadRows[0].firstUnreadMessageId).toBe('123');
1269+
expect(matchingReadRows[0].lastRead).toBe(readTimestamp);
1270+
});
1271+
});
1272+
1273+
it('should update reads in DB when a channel is marked as unread', async () => {
1274+
useMockedApis(chatClient, [queryChannelsApi(channels)]);
1275+
1276+
renderComponent();
1277+
act(() => dispatchConnectionChangedEvent(chatClient));
1278+
await act(async () => await chatClient.offlineDb.syncManager.invokeSyncStatusListeners(true));
1279+
await waitFor(() => expect(screen.getByTestId('channel-list')).toBeTruthy());
1280+
const targetChannel = channels[getRandomInt(0, channels.length - 1)];
1281+
const targetMember = targetChannel.members[getRandomInt(0, targetChannel.members.length - 1)];
1282+
1283+
chatClient.userID = targetMember.user.id;
1284+
chatClient.user = targetMember.user;
1285+
1286+
const readTimestamp = new Date().toISOString();
1287+
1288+
act(() => {
1289+
dispatchNotificationMarkUnread(
1290+
chatClient,
1291+
targetChannel.channel,
1292+
{
1293+
first_unread_message_id: '123',
1294+
last_read: readTimestamp,
1295+
last_read_message_id: '321',
1296+
unread_messages: 5,
1297+
},
1298+
targetMember.user,
1299+
);
1300+
});
1301+
1302+
await waitFor(async () => {
1303+
const readsRows = await BetterSqlite.selectFromTable('reads');
1304+
const matchingReadRows = readsRows.filter(
1305+
(r) => r.userId === targetMember.user_id && r.cid === targetChannel.cid,
1306+
);
1307+
1308+
expect(matchingReadRows.length).toBe(1);
1309+
expect(matchingReadRows[0].unreadMessages).toBe(5);
1310+
expect(matchingReadRows[0].lastReadMessageId).toBe('321');
1311+
// FIXME: Currently missing from the DB, uncomment when added.
1312+
// expect(matchingReadRows[0].firstUnreadMessageId).toBe('123');
1313+
expect(matchingReadRows[0].lastRead).toBe(readTimestamp);
12591314
});
12601315
});
12611316
});

package/src/mock-builders/event/messageRead.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export default (client, user, channel = {}) => {
1+
export default (client, user, channel = {}, payload = {}) => {
22
const newDate = new Date();
33
const event = {
44
channel,
@@ -7,6 +7,7 @@ export default (client, user, channel = {}) => {
77
received_at: newDate,
88
type: 'message.read',
99
user,
10+
...payload,
1011
};
1112
client.dispatchEvent(event);
1213

package/src/mock-builders/event/notificationMarkUnread.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
export default (client, channel = {}, payload = {}, user = {}) => {
2+
const newDate = new Date();
23
client.dispatchEvent({
34
channel,
45
cid: channel.cid,
6+
created_at: newDate,
7+
received_at: newDate,
58
type: 'notification.mark_unread',
69
user,
710
...payload,

package/src/store/mappers/mapReadToStorable.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@ export const mapReadToStorable = ({
1111
cid: string;
1212
read: ReadResponse;
1313
}): TableRow<'reads'> => {
14-
const { last_read, unread_messages, user } = read;
14+
const { last_read, unread_messages, user, last_read_message_id } = read;
1515

1616
return {
1717
cid,
1818
lastRead: mapDateTimeToStorable(last_read),
19+
lastReadMessageId: last_read_message_id,
1920
unreadMessages: unread_messages,
2021
userId: user?.id,
2122
};

package/src/store/mappers/mapStorableToRead.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@ import { mapStorableToUser } from './mapStorableToUser';
55
import type { TableRowJoinedUser } from '../types';
66

77
export const mapStorableToRead = (row: TableRowJoinedUser<'reads'>): ReadResponse => {
8-
const { lastRead, unreadMessages, user } = row;
8+
const { lastRead, unreadMessages, user, lastReadMessageId } = row;
99

1010
return {
1111
last_read: lastRead,
12+
last_read_message_id: lastReadMessageId,
1213
unread_messages: unreadMessages,
1314
user: mapStorableToUser(user),
1415
};

0 commit comments

Comments
 (0)