Skip to content

Commit 7bee59b

Browse files
committed
chore: add more tests for offline support
1 parent c021ef3 commit 7bee59b

File tree

1 file changed

+54
-1
lines changed

1 file changed

+54
-1
lines changed

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

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import dispatchChannelDeletedEvent from '../../mock-builders/event/channelDelete
1717
import dispatchChannelHiddenEvent from '../../mock-builders/event/channelHidden';
1818
import dispatchChannelTruncatedEvent from '../../mock-builders/event/channelTruncated';
1919
import dispatchChannelUpdatedEvent from '../../mock-builders/event/channelUpdated';
20-
// import dispatchChannelVisibleEvent from '../../mock-builders/event/channelVisible';
20+
import dispatchChannelVisibleEvent from '../../mock-builders/event/channelVisible';
2121
import dispatchConnectionChangedEvent from '../../mock-builders/event/connectionChanged';
2222
import dispatchMemberAddedEvent from '../../mock-builders/event/memberAdded';
2323
import 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

Comments
 (0)