@@ -17,7 +17,7 @@ import dispatchChannelDeletedEvent from '../../mock-builders/event/channelDelete
1717import dispatchChannelHiddenEvent from '../../mock-builders/event/channelHidden' ;
1818import dispatchChannelTruncatedEvent from '../../mock-builders/event/channelTruncated' ;
1919import dispatchChannelUpdatedEvent from '../../mock-builders/event/channelUpdated' ;
20- // import dispatchChannelVisibleEvent from '../../mock-builders/event/channelVisible';
20+ import dispatchChannelVisibleEvent from '../../mock-builders/event/channelVisible' ;
2121import dispatchConnectionChangedEvent from '../../mock-builders/event/connectionChanged' ;
2222import dispatchMemberAddedEvent from '../../mock-builders/event/memberAdded' ;
2323import dispatchMemberRemovedEvent from '../../mock-builders/event/memberRemoved' ;
@@ -513,6 +513,59 @@ export const Generic = () => {
513513 } ) ;
514514 } ) ;
515515
516+ it ( 'should correctly mark the channel as visible if it was hidden before in the db' , async ( ) => {
517+ useMockedApis ( chatClient , [ queryChannelsApi ( channels ) ] ) ;
518+
519+ renderComponent ( ) ;
520+ act ( ( ) => dispatchConnectionChangedEvent ( chatClient ) ) ;
521+ await act ( async ( ) => await chatClient . offlineDb . syncManager . invokeSyncStatusListeners ( true ) ) ;
522+ await waitFor ( ( ) => expect ( screen . getByTestId ( 'channel-list' ) ) . toBeTruthy ( ) ) ;
523+ const hiddenChannel = channels [ getRandomInt ( 0 , channels . length - 1 ) ] . channel ;
524+ // first, we mark it as hidden
525+ act ( ( ) => dispatchChannelHiddenEvent ( chatClient , hiddenChannel ) ) ;
526+ await waitFor ( async ( ) => {
527+ const channelIdsOnUI = screen
528+ . queryAllByLabelText ( 'list-item' )
529+ . map ( ( node ) => node . _fiber . pendingProps . testID ) ;
530+ expect ( channelIdsOnUI . includes ( hiddenChannel . cid ) ) . toBeFalsy ( ) ;
531+ await expectCIDsOnUIToBeInDB ( screen . queryAllByLabelText ) ;
532+
533+ const channelsRows = await BetterSqlite . selectFromTable ( 'channels' ) ;
534+ const matchingRows = channelsRows . filter ( ( c ) => c . id === hiddenChannel . id ) ;
535+
536+ const messagesRows = await BetterSqlite . selectFromTable ( 'messages' ) ;
537+ const matchingMessagesRows = messagesRows . filter ( ( m ) => m . cid === hiddenChannel . cid ) ;
538+
539+ expect ( matchingRows . length ) . toBe ( 1 ) ;
540+ expect ( matchingRows [ 0 ] . hidden ) . toBeTruthy ( ) ;
541+ expect ( matchingMessagesRows . length ) . toBe (
542+ chatClient . activeChannels [ hiddenChannel . cid ] . state . messages . length ,
543+ ) ;
544+ } ) ;
545+
546+ // then, we make it visible after waiting for everything to finish
547+ act ( ( ) => dispatchChannelVisibleEvent ( chatClient , hiddenChannel ) ) ;
548+ await waitFor ( async ( ) => {
549+ const channelIdsOnUI = screen
550+ . queryAllByLabelText ( 'list-item' )
551+ . map ( ( node ) => node . _fiber . pendingProps . testID ) ;
552+ expect ( channelIdsOnUI . includes ( hiddenChannel . cid ) ) . toBeFalsy ( ) ;
553+ await expectCIDsOnUIToBeInDB ( screen . queryAllByLabelText ) ;
554+
555+ const channelsRows = await BetterSqlite . selectFromTable ( 'channels' ) ;
556+ const matchingRows = channelsRows . filter ( ( c ) => c . id === hiddenChannel . id ) ;
557+
558+ const messagesRows = await BetterSqlite . selectFromTable ( 'messages' ) ;
559+ const matchingMessagesRows = messagesRows . filter ( ( m ) => m . cid === hiddenChannel . cid ) ;
560+
561+ expect ( matchingRows . length ) . toBe ( 1 ) ;
562+ expect ( matchingRows [ 0 ] . hidden ) . toBeFalsy ( ) ;
563+ expect ( matchingMessagesRows . length ) . toBe (
564+ chatClient . activeChannels [ hiddenChannel . cid ] . state . messages . length ,
565+ ) ;
566+ } ) ;
567+ } ) ;
568+
516569 it ( 'should add the channel to DB when user is added as member' , async ( ) => {
517570 useMockedApis ( chatClient , [ queryChannelsApi ( channels ) ] ) ;
518571
0 commit comments