@@ -26,6 +26,7 @@ import dispatchMessageNewEvent from '../../mock-builders/event/messageNew';
2626import dispatchMessageReadEvent from '../../mock-builders/event/messageRead' ;
2727import dispatchMessageUpdatedEvent from '../../mock-builders/event/messageUpdated' ;
2828import dispatchNotificationAddedToChannel from '../../mock-builders/event/notificationAddedToChannel' ;
29+ import dispatchNotificationMarkUnread from '../../mock-builders/event/notificationMarkUnread' ;
2930import dispatchNotificationMessageNewEvent from '../../mock-builders/event/notificationMessageNew' ;
3031import dispatchNotificationRemovedFromChannel from '../../mock-builders/event/notificationRemovedFromChannel' ;
3132import 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 } ) ;
0 commit comments