@@ -15,6 +15,7 @@ import {
1515 dispatchMessageUpdatedEvent ,
1616 dispatchNotificationMarkRead ,
1717 dispatchNotificationMarkUnread ,
18+ dispatchUserMessagesDeletedEvent ,
1819 dispatchUserUpdatedEvent ,
1920 generateChannel ,
2021 generateMember ,
@@ -363,6 +364,131 @@ describe('ChannelPreview', () => {
363364 } ,
364365 ) ;
365366
367+ describe ( 'user.messages.deleted' , ( ) => {
368+ const deletedMessageText = 'Message deleted' ;
369+ const user = { id : 'banned-user' } ;
370+
371+ it ( 'should update latest message preview for all ChannelPreviews if global ban' , async ( ) => {
372+ const {
373+ channels : [ c0 , c1 ] ,
374+ client,
375+ } = await initClientWithChannels ( {
376+ channelsData : [
377+ generateChannel ( {
378+ messages : [
379+ generateMessage ( {
380+ created_at : '1970-01-01T00:00:00.000Z' ,
381+ user : { id : 'other-user' } ,
382+ } ) ,
383+ generateMessage ( { created_at : '1970-01-02T00:00:00.000Z' , user } ) ,
384+ ] ,
385+ } ) ,
386+ generateChannel ( {
387+ messages : [
388+ generateMessage ( {
389+ created_at : '1971-01-01T00:00:00.000Z' ,
390+ user : { id : 'other-user' } ,
391+ } ) ,
392+ generateMessage ( { created_at : '1971-01-02T00:00:00.000Z' , user } ) ,
393+ ] ,
394+ } ) ,
395+ ] ,
396+ customUser : user ,
397+ } ) ;
398+
399+ const { container } = render (
400+ < ChatContext . Provider
401+ value = { {
402+ channel : c0 ,
403+ client,
404+ setActiveChannel : ( ) => jest . fn ( ) ,
405+ } }
406+ >
407+ < ChannelPreview channel = { c0 } />
408+ < ChannelPreview channel = { c1 } />
409+ </ ChatContext . Provider > ,
410+ ) ;
411+
412+ await act ( ( ) => {
413+ dispatchUserMessagesDeletedEvent ( {
414+ client,
415+ user,
416+ } ) ;
417+ } ) ;
418+
419+ await waitFor ( ( ) => {
420+ const lastMessagePreviews = container . querySelectorAll (
421+ '.str-chat__channel-preview-messenger--last-message' ,
422+ ) ;
423+ expect ( lastMessagePreviews . length ) . toBe ( 2 ) ;
424+ lastMessagePreviews . forEach ( ( preview ) => {
425+ expect ( preview ) . toHaveTextContent ( deletedMessageText ) ;
426+ } ) ;
427+ } ) ;
428+ } ) ;
429+
430+ it ( 'should update latest message preview if the channel is the target' , async ( ) => {
431+ const {
432+ channels : [ c0 , c1 ] ,
433+ client,
434+ } = await initClientWithChannels ( {
435+ channelsData : [
436+ generateChannel ( {
437+ messages : [
438+ generateMessage ( {
439+ created_at : '1970-01-01T00:00:00.000Z' ,
440+ user : { id : 'other-user' } ,
441+ } ) ,
442+ generateMessage ( { created_at : '1970-01-02T00:00:00.000Z' , user } ) ,
443+ ] ,
444+ } ) ,
445+ generateChannel ( {
446+ messages : [
447+ generateMessage ( {
448+ created_at : '1971-01-01T00:00:00.000Z' ,
449+ user : { id : 'other-user' } ,
450+ } ) ,
451+ generateMessage ( { created_at : '1971-01-02T00:00:00.000Z' , user } ) ,
452+ ] ,
453+ } ) ,
454+ ] ,
455+ customUser : user ,
456+ } ) ;
457+
458+ const { container } = render (
459+ < ChatContext . Provider
460+ value = { {
461+ channel : c0 ,
462+ client,
463+ setActiveChannel : ( ) => jest . fn ( ) ,
464+ } }
465+ >
466+ < ChannelPreview channel = { c0 } />
467+ < ChannelPreview channel = { c1 } />
468+ </ ChatContext . Provider > ,
469+ ) ;
470+
471+ await act ( ( ) => {
472+ dispatchUserMessagesDeletedEvent ( {
473+ channel : c0 , // target
474+ client,
475+ user,
476+ } ) ;
477+ } ) ;
478+
479+ await waitFor ( ( ) => {
480+ const lastMessagePreviews = container . querySelectorAll (
481+ '.str-chat__channel-preview-messenger--last-message' ,
482+ ) ;
483+ expect ( lastMessagePreviews . length ) . toBe ( 2 ) ;
484+ expect ( lastMessagePreviews [ 0 ] ) . toHaveTextContent ( deletedMessageText ) ;
485+ expect ( lastMessagePreviews [ 1 ] ) . toHaveTextContent (
486+ c1 . state . messages . slice ( - 1 ) [ 0 ] . text ,
487+ ) ;
488+ } ) ;
489+ } ) ;
490+ } ) ;
491+
366492 describe ( 'notification.mark_read' , ( ) => {
367493 it ( 'should set unread count to 0 for event missing CID' , async ( ) => {
368494 const unreadCount = getRandomInt ( 1 , 10 ) ;
0 commit comments