stream-chat-react-native-core 9.0.1 → 9.0.2-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/lib/commonjs/components/Message/MessageItemView/utils/renderText.test.js +1 -1
- package/lib/commonjs/components/Message/MessageItemView/utils/renderText.test.js.map +1 -1
- package/lib/commonjs/components/MessageList/hooks/useMessageList.js.map +1 -1
- package/lib/commonjs/mock-builders/DB/mock.js.map +1 -1
- package/lib/commonjs/mock-builders/api/channelMocks.js +38 -31
- package/lib/commonjs/mock-builders/api/channelMocks.js.map +1 -1
- package/lib/commonjs/mock-builders/api/deleteMessage.js.map +1 -1
- package/lib/commonjs/mock-builders/api/deleteReaction.js.map +1 -1
- package/lib/commonjs/mock-builders/api/error.js.map +1 -1
- package/lib/commonjs/mock-builders/api/getOrCreateChannel.js.map +1 -1
- package/lib/commonjs/mock-builders/api/initiateClientWithChannels.js +1 -1
- package/lib/commonjs/mock-builders/api/initiateClientWithChannels.js.map +1 -1
- package/lib/commonjs/mock-builders/api/queryChannels.js.map +1 -1
- package/lib/commonjs/mock-builders/api/queryMembers.js +12 -11
- package/lib/commonjs/mock-builders/api/queryMembers.js.map +1 -1
- package/lib/commonjs/mock-builders/api/sendMessage.js.map +1 -1
- package/lib/commonjs/mock-builders/api/sendReaction.js.map +1 -1
- package/lib/commonjs/mock-builders/api/threadReplies.js.map +1 -1
- package/lib/commonjs/mock-builders/api/useMockedApis.js.map +1 -1
- package/lib/commonjs/mock-builders/api/utils.js.map +1 -1
- package/lib/commonjs/mock-builders/attachments.js.map +1 -1
- package/lib/commonjs/mock-builders/event/channelDeleted.js +3 -2
- package/lib/commonjs/mock-builders/event/channelDeleted.js.map +1 -1
- package/lib/commonjs/mock-builders/event/channelHidden.js +3 -2
- package/lib/commonjs/mock-builders/event/channelHidden.js.map +1 -1
- package/lib/commonjs/mock-builders/event/channelTruncated.js +3 -2
- package/lib/commonjs/mock-builders/event/channelTruncated.js.map +1 -1
- package/lib/commonjs/mock-builders/event/channelUpdated.js +3 -2
- package/lib/commonjs/mock-builders/event/channelUpdated.js.map +1 -1
- package/lib/commonjs/mock-builders/event/channelVisible.js +3 -2
- package/lib/commonjs/mock-builders/event/channelVisible.js.map +1 -1
- package/lib/commonjs/mock-builders/event/connectionChanged.js +3 -2
- package/lib/commonjs/mock-builders/event/connectionChanged.js.map +1 -1
- package/lib/commonjs/mock-builders/event/connectionRecovered.js +3 -2
- package/lib/commonjs/mock-builders/event/connectionRecovered.js.map +1 -1
- package/lib/commonjs/mock-builders/event/memberAdded.js +3 -2
- package/lib/commonjs/mock-builders/event/memberAdded.js.map +1 -1
- package/lib/commonjs/mock-builders/event/memberRemoved.js +3 -2
- package/lib/commonjs/mock-builders/event/memberRemoved.js.map +1 -1
- package/lib/commonjs/mock-builders/event/memberUpdated.js +3 -2
- package/lib/commonjs/mock-builders/event/memberUpdated.js.map +1 -1
- package/lib/commonjs/mock-builders/event/messageDeleted.js +3 -2
- package/lib/commonjs/mock-builders/event/messageDeleted.js.map +1 -1
- package/lib/commonjs/mock-builders/event/messageNew.js +3 -2
- package/lib/commonjs/mock-builders/event/messageNew.js.map +1 -1
- package/lib/commonjs/mock-builders/event/messageRead.js +3 -2
- package/lib/commonjs/mock-builders/event/messageRead.js.map +1 -1
- package/lib/commonjs/mock-builders/event/messageUpdated.js +3 -2
- package/lib/commonjs/mock-builders/event/messageUpdated.js.map +1 -1
- package/lib/commonjs/mock-builders/event/notificationAddedToChannel.js +3 -2
- package/lib/commonjs/mock-builders/event/notificationAddedToChannel.js.map +1 -1
- package/lib/commonjs/mock-builders/event/notificationChannelMutesUpdated.js +3 -2
- package/lib/commonjs/mock-builders/event/notificationChannelMutesUpdated.js.map +1 -1
- package/lib/commonjs/mock-builders/event/notificationMarkRead.js +3 -2
- package/lib/commonjs/mock-builders/event/notificationMarkRead.js.map +1 -1
- package/lib/commonjs/mock-builders/event/notificationMarkUnread.js +3 -2
- package/lib/commonjs/mock-builders/event/notificationMarkUnread.js.map +1 -1
- package/lib/commonjs/mock-builders/event/notificationMessageNew.js +3 -2
- package/lib/commonjs/mock-builders/event/notificationMessageNew.js.map +1 -1
- package/lib/commonjs/mock-builders/event/notificationMutesUpdated.js +3 -2
- package/lib/commonjs/mock-builders/event/notificationMutesUpdated.js.map +1 -1
- package/lib/commonjs/mock-builders/event/notificationRemovedFromChannel.js +3 -2
- package/lib/commonjs/mock-builders/event/notificationRemovedFromChannel.js.map +1 -1
- package/lib/commonjs/mock-builders/event/reactionDeleted.js +3 -2
- package/lib/commonjs/mock-builders/event/reactionDeleted.js.map +1 -1
- package/lib/commonjs/mock-builders/event/reactionNew.js +3 -2
- package/lib/commonjs/mock-builders/event/reactionNew.js.map +1 -1
- package/lib/commonjs/mock-builders/event/reactionUpdated.js +3 -2
- package/lib/commonjs/mock-builders/event/reactionUpdated.js.map +1 -1
- package/lib/commonjs/mock-builders/event/typing.js +3 -2
- package/lib/commonjs/mock-builders/event/typing.js.map +1 -1
- package/lib/commonjs/mock-builders/event/userPresence.js +3 -2
- package/lib/commonjs/mock-builders/event/userPresence.js.map +1 -1
- package/lib/commonjs/mock-builders/event/userUpdated.js +3 -2
- package/lib/commonjs/mock-builders/event/userUpdated.js.map +1 -1
- package/lib/commonjs/mock-builders/generator/attachment.js +0 -3
- package/lib/commonjs/mock-builders/generator/attachment.js.map +1 -1
- package/lib/commonjs/mock-builders/generator/channel.js +10 -12
- package/lib/commonjs/mock-builders/generator/channel.js.map +1 -1
- package/lib/commonjs/mock-builders/generator/member.js +3 -2
- package/lib/commonjs/mock-builders/generator/member.js.map +1 -1
- package/lib/commonjs/mock-builders/generator/message.js +12 -7
- package/lib/commonjs/mock-builders/generator/message.js.map +1 -1
- package/lib/commonjs/mock-builders/generator/reaction.js +3 -2
- package/lib/commonjs/mock-builders/generator/reaction.js.map +1 -1
- package/lib/commonjs/mock-builders/generator/user.js +4 -3
- package/lib/commonjs/mock-builders/generator/user.js.map +1 -1
- package/lib/commonjs/mock-builders/mock.js +15 -11
- package/lib/commonjs/mock-builders/mock.js.map +1 -1
- package/lib/commonjs/store/apis/addPendingTask.js.map +1 -1
- package/lib/commonjs/store/apis/deleteMessage.js.map +1 -1
- package/lib/commonjs/store/apis/upsertDraft.js.map +1 -1
- package/lib/commonjs/store/sqlite-utils/appendOrderByClause.js.map +1 -1
- package/lib/commonjs/store/sqlite-utils/appendWhereCluase.js.map +1 -1
- package/lib/commonjs/store/sqlite-utils/createCreateTableQuery.js.map +1 -1
- package/lib/commonjs/test-utils/BetterSqlite.js +11 -7
- package/lib/commonjs/test-utils/BetterSqlite.js.map +1 -1
- package/lib/commonjs/version.json +1 -1
- package/lib/module/components/Message/MessageItemView/utils/renderText.test.js +1 -1
- package/lib/module/components/Message/MessageItemView/utils/renderText.test.js.map +1 -1
- package/lib/module/components/MessageList/hooks/useMessageList.js.map +1 -1
- package/lib/module/mock-builders/DB/mock.js.map +1 -1
- package/lib/module/mock-builders/api/channelMocks.js +38 -31
- package/lib/module/mock-builders/api/channelMocks.js.map +1 -1
- package/lib/module/mock-builders/api/deleteMessage.js.map +1 -1
- package/lib/module/mock-builders/api/deleteReaction.js.map +1 -1
- package/lib/module/mock-builders/api/error.js.map +1 -1
- package/lib/module/mock-builders/api/getOrCreateChannel.js.map +1 -1
- package/lib/module/mock-builders/api/initiateClientWithChannels.js +1 -1
- package/lib/module/mock-builders/api/initiateClientWithChannels.js.map +1 -1
- package/lib/module/mock-builders/api/queryChannels.js.map +1 -1
- package/lib/module/mock-builders/api/queryMembers.js +12 -11
- package/lib/module/mock-builders/api/queryMembers.js.map +1 -1
- package/lib/module/mock-builders/api/sendMessage.js.map +1 -1
- package/lib/module/mock-builders/api/sendReaction.js.map +1 -1
- package/lib/module/mock-builders/api/threadReplies.js.map +1 -1
- package/lib/module/mock-builders/api/useMockedApis.js.map +1 -1
- package/lib/module/mock-builders/api/utils.js.map +1 -1
- package/lib/module/mock-builders/attachments.js.map +1 -1
- package/lib/module/mock-builders/event/channelDeleted.js +3 -2
- package/lib/module/mock-builders/event/channelDeleted.js.map +1 -1
- package/lib/module/mock-builders/event/channelHidden.js +3 -2
- package/lib/module/mock-builders/event/channelHidden.js.map +1 -1
- package/lib/module/mock-builders/event/channelTruncated.js +3 -2
- package/lib/module/mock-builders/event/channelTruncated.js.map +1 -1
- package/lib/module/mock-builders/event/channelUpdated.js +3 -2
- package/lib/module/mock-builders/event/channelUpdated.js.map +1 -1
- package/lib/module/mock-builders/event/channelVisible.js +3 -2
- package/lib/module/mock-builders/event/channelVisible.js.map +1 -1
- package/lib/module/mock-builders/event/connectionChanged.js +3 -2
- package/lib/module/mock-builders/event/connectionChanged.js.map +1 -1
- package/lib/module/mock-builders/event/connectionRecovered.js +3 -2
- package/lib/module/mock-builders/event/connectionRecovered.js.map +1 -1
- package/lib/module/mock-builders/event/memberAdded.js +3 -2
- package/lib/module/mock-builders/event/memberAdded.js.map +1 -1
- package/lib/module/mock-builders/event/memberRemoved.js +3 -2
- package/lib/module/mock-builders/event/memberRemoved.js.map +1 -1
- package/lib/module/mock-builders/event/memberUpdated.js +3 -2
- package/lib/module/mock-builders/event/memberUpdated.js.map +1 -1
- package/lib/module/mock-builders/event/messageDeleted.js +3 -2
- package/lib/module/mock-builders/event/messageDeleted.js.map +1 -1
- package/lib/module/mock-builders/event/messageNew.js +3 -2
- package/lib/module/mock-builders/event/messageNew.js.map +1 -1
- package/lib/module/mock-builders/event/messageRead.js +3 -2
- package/lib/module/mock-builders/event/messageRead.js.map +1 -1
- package/lib/module/mock-builders/event/messageUpdated.js +3 -2
- package/lib/module/mock-builders/event/messageUpdated.js.map +1 -1
- package/lib/module/mock-builders/event/notificationAddedToChannel.js +3 -2
- package/lib/module/mock-builders/event/notificationAddedToChannel.js.map +1 -1
- package/lib/module/mock-builders/event/notificationChannelMutesUpdated.js +3 -2
- package/lib/module/mock-builders/event/notificationChannelMutesUpdated.js.map +1 -1
- package/lib/module/mock-builders/event/notificationMarkRead.js +3 -2
- package/lib/module/mock-builders/event/notificationMarkRead.js.map +1 -1
- package/lib/module/mock-builders/event/notificationMarkUnread.js +3 -2
- package/lib/module/mock-builders/event/notificationMarkUnread.js.map +1 -1
- package/lib/module/mock-builders/event/notificationMessageNew.js +3 -2
- package/lib/module/mock-builders/event/notificationMessageNew.js.map +1 -1
- package/lib/module/mock-builders/event/notificationMutesUpdated.js +3 -2
- package/lib/module/mock-builders/event/notificationMutesUpdated.js.map +1 -1
- package/lib/module/mock-builders/event/notificationRemovedFromChannel.js +3 -2
- package/lib/module/mock-builders/event/notificationRemovedFromChannel.js.map +1 -1
- package/lib/module/mock-builders/event/reactionDeleted.js +3 -2
- package/lib/module/mock-builders/event/reactionDeleted.js.map +1 -1
- package/lib/module/mock-builders/event/reactionNew.js +3 -2
- package/lib/module/mock-builders/event/reactionNew.js.map +1 -1
- package/lib/module/mock-builders/event/reactionUpdated.js +3 -2
- package/lib/module/mock-builders/event/reactionUpdated.js.map +1 -1
- package/lib/module/mock-builders/event/typing.js +3 -2
- package/lib/module/mock-builders/event/typing.js.map +1 -1
- package/lib/module/mock-builders/event/userPresence.js +3 -2
- package/lib/module/mock-builders/event/userPresence.js.map +1 -1
- package/lib/module/mock-builders/event/userUpdated.js +3 -2
- package/lib/module/mock-builders/event/userUpdated.js.map +1 -1
- package/lib/module/mock-builders/generator/attachment.js +0 -3
- package/lib/module/mock-builders/generator/attachment.js.map +1 -1
- package/lib/module/mock-builders/generator/channel.js +10 -12
- package/lib/module/mock-builders/generator/channel.js.map +1 -1
- package/lib/module/mock-builders/generator/member.js +3 -2
- package/lib/module/mock-builders/generator/member.js.map +1 -1
- package/lib/module/mock-builders/generator/message.js +12 -7
- package/lib/module/mock-builders/generator/message.js.map +1 -1
- package/lib/module/mock-builders/generator/reaction.js +3 -2
- package/lib/module/mock-builders/generator/reaction.js.map +1 -1
- package/lib/module/mock-builders/generator/user.js +4 -3
- package/lib/module/mock-builders/generator/user.js.map +1 -1
- package/lib/module/mock-builders/mock.js +15 -11
- package/lib/module/mock-builders/mock.js.map +1 -1
- package/lib/module/store/apis/addPendingTask.js.map +1 -1
- package/lib/module/store/apis/deleteMessage.js.map +1 -1
- package/lib/module/store/apis/upsertDraft.js.map +1 -1
- package/lib/module/store/sqlite-utils/appendOrderByClause.js.map +1 -1
- package/lib/module/store/sqlite-utils/appendWhereCluase.js.map +1 -1
- package/lib/module/store/sqlite-utils/createCreateTableQuery.js.map +1 -1
- package/lib/module/test-utils/BetterSqlite.js +11 -7
- package/lib/module/test-utils/BetterSqlite.js.map +1 -1
- package/lib/module/version.json +1 -1
- package/lib/typescript/components/UIComponents/SwipableWrapper.d.ts +1 -1
- package/lib/typescript/components/UIComponents/SwipableWrapper.d.ts.map +1 -1
- package/lib/typescript/store/OfflineDB.d.ts +1 -1
- package/lib/typescript/store/OfflineDB.d.ts.map +1 -1
- package/lib/typescript/store/apis/addPendingTask.d.ts.map +1 -1
- package/lib/typescript/store/apis/deleteMessage.d.ts +2 -1
- package/lib/typescript/store/apis/deleteMessage.d.ts.map +1 -1
- package/lib/typescript/store/apis/upsertDraft.d.ts +1 -1
- package/lib/typescript/store/apis/upsertDraft.d.ts.map +1 -1
- package/lib/typescript/store/sqlite-utils/createCreateTableQuery.d.ts.map +1 -1
- package/lib/typescript/test-utils/BetterSqlite.d.ts +4 -3
- package/lib/typescript/test-utils/BetterSqlite.d.ts.map +1 -1
- package/package.json +5 -3
- package/src/__tests__/offline-support/{offline-feature.js → offline-feature.tsx} +282 -139
- package/src/__tests__/offline-support/{optimistic-update.js → optimistic-update.tsx} +154 -84
- package/src/components/Attachment/__tests__/{Attachment.test.js → Attachment.test.tsx} +12 -8
- package/src/components/Attachment/__tests__/{Gallery.test.js → Gallery.test.tsx} +10 -3
- package/src/components/Attachment/__tests__/{Giphy.test.js → Giphy.test.tsx} +48 -19
- package/src/components/Attachment/__tests__/{buildGallery.test.js → buildGallery.test.ts} +4 -2
- package/src/components/AutoCompleteInput/__tests__/{AutoCompleteInput.test.js → AutoCompleteInput.test.tsx} +21 -11
- package/src/components/Channel/__tests__/{Channel.test.js → Channel.test.tsx} +129 -89
- package/src/components/Channel/__tests__/{isAttachmentEqualHandler.test.js → isAttachmentEqualHandler.test.tsx} +25 -8
- package/src/components/Channel/__tests__/{ownCapabilities.test.js → ownCapabilities.test.tsx} +16 -12
- package/src/components/Channel/__tests__/{useMessageListPagination.test.js → useMessageListPagination.test.tsx} +105 -63
- package/src/components/ChannelList/__tests__/{ChannelList.test.js → ChannelList.test.tsx} +63 -29
- package/src/components/ChannelList/__tests__/{ChannelListView.test.js → ChannelListView.test.tsx} +30 -20
- package/src/components/ChannelList/hooks/__tests__/useChannelActionItems.test.tsx +6 -6
- package/src/components/ChannelList/hooks/__tests__/useChannelActionItemsById.test.tsx +2 -2
- package/src/components/ChannelList/hooks/listeners/__tests__/useChannelUpdated.test.tsx +17 -14
- package/src/components/ChannelPreview/__tests__/ChannelDetailsBottomSheet.test.tsx +14 -4
- package/src/components/ChannelPreview/__tests__/ChannelPreview.test.tsx +23 -12
- package/src/components/ChannelPreview/__tests__/{ChannelPreviewView.test.js → ChannelPreviewView.test.tsx} +9 -34
- package/src/components/ChannelPreview/__tests__/ChannelSwipableWrapper.test.tsx +4 -2
- package/src/components/ChannelPreview/hooks/__tests__/useChannelPreviewDisplayPresence.test.tsx +1 -1
- package/src/components/Chat/__tests__/{Chat.test.js → Chat.test.tsx} +37 -30
- package/src/components/ImageGallery/__tests__/ImageGallery.test.tsx +10 -14
- package/src/components/ImageGallery/__tests__/ImageGalleryFooter.test.tsx +3 -3
- package/src/components/ImageGallery/__tests__/ImageGalleryGrid.test.tsx +5 -4
- package/src/components/ImageGallery/__tests__/ImageGalleryHeader.test.tsx +7 -6
- package/src/components/ImageGallery/components/__tests__/ImageGalleryHeader.test.tsx +9 -13
- package/src/components/Message/MessageItemView/__tests__/{Message.test.js → Message.test.tsx} +20 -11
- package/src/components/Message/MessageItemView/__tests__/{MessageAuthor.test.js → MessageAuthor.test.tsx} +10 -12
- package/src/components/Message/MessageItemView/__tests__/{MessageContent.test.js → MessageContent.test.tsx} +22 -12
- package/src/components/Message/MessageItemView/__tests__/{MessageItemView.test.js → MessageItemView.test.tsx} +11 -4
- package/src/components/Message/MessageItemView/__tests__/{MessagePinnedHeader.test.js → MessagePinnedHeader.test.tsx} +5 -3
- package/src/components/Message/MessageItemView/__tests__/{MessageReplies.test.js → MessageReplies.test.tsx} +15 -36
- package/src/components/Message/MessageItemView/__tests__/{MessageStatus.test.js → MessageStatus.test.tsx} +20 -10
- package/src/components/Message/MessageItemView/__tests__/MessageTextContainer.test.tsx +8 -8
- package/src/components/Message/MessageItemView/__tests__/{ReactionListBottom.test.js → ReactionListBottom.test.tsx} +19 -8
- package/src/components/Message/MessageItemView/__tests__/{ReactionListTop.test.js → ReactionListTop.test.tsx} +8 -4
- package/src/components/Message/MessageItemView/utils/renderText.test.tsx +2 -4
- package/src/components/Message/MessageItemView/utils/renderText.tsx +1 -1
- package/src/components/Message/hooks/__tests__/useShouldUseOverlayStyles.test.tsx +2 -2
- package/src/components/MessageInput/__tests__/{AttachButton.test.js → AttachButton.test.tsx} +14 -4
- package/src/components/MessageInput/__tests__/{AttachmentUploadPreviewList.test.js → AttachmentUploadPreviewList.test.tsx} +27 -8
- package/src/components/MessageInput/__tests__/{AudioAttachmentUploadPreview.test.js → AudioAttachmentUploadPreview.test.tsx} +18 -5
- package/src/components/MessageInput/__tests__/AudioAttachmentUploadPreviewExpo.test.tsx +47 -15
- package/src/components/MessageInput/__tests__/AudioAttachmentUploadPreviewNative.test.tsx +57 -17
- package/src/components/MessageInput/__tests__/{InputButtons.test.js → InputButtons.test.tsx} +14 -4
- package/src/components/MessageInput/__tests__/{MessageComposer.test.js → MessageComposer.test.tsx} +28 -20
- package/src/components/MessageInput/__tests__/{SendButton.test.js → SendButton.test.tsx} +13 -4
- package/src/components/MessageInput/__tests__/{SendMessageDisallowedIndicator.test.js → SendMessageDisallowedIndicator.test.tsx} +47 -31
- package/src/components/MessageList/__tests__/{MessageList.test.js → MessageList.test.tsx} +31 -34
- package/src/components/MessageList/__tests__/{MessageSystem.test.js → MessageSystem.test.tsx} +13 -5
- package/src/components/MessageList/__tests__/{ScrollToBottomButton.test.js → ScrollToBottomButton.test.tsx} +8 -12
- package/src/components/MessageList/__tests__/{TypingIndicator.test.js → TypingIndicator.test.tsx} +6 -4
- package/src/components/MessageList/__tests__/useMessageList.test.tsx +2 -2
- package/src/components/MessageList/hooks/useMessageList.ts +1 -1
- package/src/components/MessageMenu/__tests__/MessageActionList.test.tsx +4 -1
- package/src/components/MessageMenu/__tests__/MessageActionListItem.test.tsx +1 -0
- package/src/components/MessageMenu/__tests__/MessageReactionPicker.test.tsx +6 -2
- package/src/components/MessageMenu/__tests__/MessageUserReactions.test.tsx +3 -3
- package/src/components/MessageMenu/__tests__/MessageUserReactionsAvatar.test.tsx +7 -3
- package/src/components/MessageMenu/__tests__/MessageUserReactionsItem.test.tsx +2 -1
- package/src/components/Thread/__tests__/{Thread.test.js → Thread.test.tsx} +41 -13
- package/src/components/Thread/__tests__/__snapshots__/{Thread.test.js.snap → Thread.test.tsx.snap} +0 -21
- package/src/components/UIComponents/SwipableWrapper.tsx +1 -1
- package/src/components/UIComponents/__tests__/SwipableWrapper.test.tsx +1 -1
- package/src/contexts/messageInputContext/__tests__/filePickers.test.tsx +31 -10
- package/src/contexts/messageInputContext/__tests__/sendMessage.test.tsx +24 -12
- package/src/contexts/overlayContext/__tests__/MessageOverlayHostLayer.test.tsx +2 -2
- package/src/hooks/__tests__/useTranslatedMessage.test.tsx +4 -4
- package/src/mock-builders/DB/mock.ts +1 -1
- package/src/mock-builders/api/channelMocks.tsx +39 -29
- package/src/mock-builders/api/deleteMessage.ts +21 -0
- package/src/mock-builders/api/deleteReaction.ts +23 -0
- package/src/mock-builders/api/{error.js → error.ts} +13 -5
- package/src/mock-builders/api/getOrCreateChannel.ts +22 -11
- package/src/mock-builders/api/{initiateClientWithChannels.js → initiateClientWithChannels.ts} +21 -3
- package/src/mock-builders/api/{queryChannels.js → queryChannels.ts} +2 -4
- package/src/mock-builders/api/{queryMembers.js → queryMembers.ts} +29 -27
- package/src/mock-builders/api/sendMessage.ts +25 -0
- package/src/mock-builders/api/sendReaction.ts +9 -5
- package/src/mock-builders/api/threadReplies.ts +18 -0
- package/src/mock-builders/api/{useMockedApis.js → useMockedApis.ts} +5 -4
- package/src/mock-builders/api/utils.ts +16 -0
- package/src/mock-builders/{attachments.js → attachments.ts} +24 -8
- package/src/mock-builders/event/channelDeleted.ts +12 -0
- package/src/mock-builders/event/channelHidden.ts +12 -0
- package/src/mock-builders/event/channelTruncated.ts +12 -0
- package/src/mock-builders/event/channelUpdated.ts +12 -0
- package/src/mock-builders/event/channelVisible.ts +12 -0
- package/src/mock-builders/event/connectionChanged.ts +11 -0
- package/src/mock-builders/event/connectionRecovered.ts +10 -0
- package/src/mock-builders/event/memberAdded.ts +19 -0
- package/src/mock-builders/event/memberRemoved.ts +18 -0
- package/src/mock-builders/event/memberUpdated.ts +18 -0
- package/src/mock-builders/event/messageDeleted.ts +23 -0
- package/src/mock-builders/event/messageNew.ts +26 -0
- package/src/mock-builders/event/messageRead.ts +23 -0
- package/src/mock-builders/event/messageUpdated.ts +23 -0
- package/src/mock-builders/event/notificationAddedToChannel.ts +12 -0
- package/src/mock-builders/event/notificationChannelMutesUpdated.ts +12 -0
- package/src/mock-builders/event/notificationMarkRead.ts +12 -0
- package/src/mock-builders/event/notificationMarkUnread.ts +22 -0
- package/src/mock-builders/event/notificationMessageNew.ts +12 -0
- package/src/mock-builders/event/notificationMutesUpdated.ts +16 -0
- package/src/mock-builders/event/notificationRemovedFromChannel.ts +12 -0
- package/src/mock-builders/event/reactionDeleted.ts +26 -0
- package/src/mock-builders/event/reactionNew.ts +26 -0
- package/src/mock-builders/event/reactionUpdated.ts +26 -0
- package/src/mock-builders/event/typing.ts +18 -0
- package/src/mock-builders/event/userPresence.ts +13 -0
- package/src/mock-builders/event/userUpdated.ts +13 -0
- package/src/mock-builders/generator/{attachment.js → attachment.ts} +17 -13
- package/src/mock-builders/generator/channel.ts +70 -39
- package/src/mock-builders/generator/member.ts +18 -0
- package/src/mock-builders/generator/message.ts +50 -0
- package/src/mock-builders/generator/reaction.ts +15 -0
- package/src/mock-builders/generator/{user.js → user.ts} +20 -16
- package/src/mock-builders/mock.ts +79 -0
- package/src/state-store/__tests__/audio-player.test.ts +3 -1
- package/src/state-store/__tests__/image-gallery-state-store.test.ts +31 -28
- package/src/state-store/__tests__/video-player-pool.test.ts +9 -9
- package/src/store/apis/__tests__/updatePendingTask.test.ts +17 -6
- package/src/store/apis/addPendingTask.ts +2 -1
- package/src/store/apis/deleteMessage.ts +2 -1
- package/src/store/apis/upsertDraft.ts +2 -2
- package/src/store/sqlite-utils/appendOrderByClause.ts +1 -1
- package/src/store/sqlite-utils/appendWhereCluase.ts +1 -1
- package/src/store/sqlite-utils/createCreateTableQuery.ts +7 -5
- package/src/test-utils/BetterSqlite.ts +38 -0
- package/src/utils/__tests__/{Streami18n.test.js → Streami18n.test.ts} +66 -31
- package/src/utils/__tests__/getResizedImageUrl.test.ts +10 -8
- package/src/utils/__tests__/{utils.test.js → utils.test.ts} +1 -1
- package/src/version.json +1 -1
- package/src/mock-builders/api/deleteMessage.js +0 -18
- package/src/mock-builders/api/deleteReaction.js +0 -19
- package/src/mock-builders/api/sendMessage.js +0 -18
- package/src/mock-builders/api/threadReplies.js +0 -16
- package/src/mock-builders/api/utils.js +0 -7
- package/src/mock-builders/event/channelDeleted.js +0 -7
- package/src/mock-builders/event/channelHidden.js +0 -7
- package/src/mock-builders/event/channelTruncated.js +0 -7
- package/src/mock-builders/event/channelUpdated.js +0 -7
- package/src/mock-builders/event/channelVisible.js +0 -7
- package/src/mock-builders/event/connectionChanged.js +0 -6
- package/src/mock-builders/event/connectionRecovered.js +0 -5
- package/src/mock-builders/event/memberAdded.js +0 -10
- package/src/mock-builders/event/memberRemoved.js +0 -9
- package/src/mock-builders/event/memberUpdated.js +0 -9
- package/src/mock-builders/event/messageDeleted.js +0 -8
- package/src/mock-builders/event/messageNew.js +0 -11
- package/src/mock-builders/event/messageRead.js +0 -15
- package/src/mock-builders/event/messageUpdated.js +0 -8
- package/src/mock-builders/event/notificationAddedToChannel.js +0 -7
- package/src/mock-builders/event/notificationChannelMutesUpdated.js +0 -7
- package/src/mock-builders/event/notificationMarkRead.js +0 -7
- package/src/mock-builders/event/notificationMarkUnread.js +0 -12
- package/src/mock-builders/event/notificationMessageNew.js +0 -7
- package/src/mock-builders/event/notificationMutesUpdated.js +0 -11
- package/src/mock-builders/event/notificationRemovedFromChannel.js +0 -7
- package/src/mock-builders/event/reactionDeleted.js +0 -9
- package/src/mock-builders/event/reactionNew.js +0 -9
- package/src/mock-builders/event/reactionUpdated.js +0 -9
- package/src/mock-builders/event/typing.js +0 -9
- package/src/mock-builders/event/userPresence.js +0 -8
- package/src/mock-builders/event/userUpdated.js +0 -8
- package/src/mock-builders/generator/member.js +0 -13
- package/src/mock-builders/generator/message.js +0 -32
- package/src/mock-builders/generator/reaction.js +0 -12
- package/src/mock-builders/mock.js +0 -57
- package/src/test-utils/BetterSqlite.js +0 -36
- /package/src/components/Message/MessageItemView/__tests__/__snapshots__/{MessageAuthor.test.js.snap → MessageAuthor.test.tsx.snap} +0 -0
- /package/src/components/Message/MessageItemView/__tests__/__snapshots__/{MessagePinnedHeader.test.js.snap → MessagePinnedHeader.test.tsx.snap} +0 -0
- /package/src/components/MessageInput/__tests__/__snapshots__/{AttachButton.test.js.snap → AttachButton.test.tsx.snap} +0 -0
- /package/src/components/MessageInput/__tests__/__snapshots__/{SendButton.test.js.snap → SendButton.test.tsx.snap} +0 -0
- /package/src/components/MessageList/__tests__/__snapshots__/{MessageSystem.test.js.snap → MessageSystem.test.tsx.snap} +0 -0
- /package/src/components/MessageList/__tests__/__snapshots__/{ScrollToBottomButton.test.js.snap → ScrollToBottomButton.test.tsx.snap} +0 -0
- /package/src/components/MessageList/__tests__/__snapshots__/{TypingIndicator.test.js.snap → TypingIndicator.test.tsx.snap} +0 -0
|
@@ -5,8 +5,34 @@ import { Text, View } from 'react-native';
|
|
|
5
5
|
|
|
6
6
|
import { act, cleanup, render, screen, waitFor } from '@testing-library/react-native';
|
|
7
7
|
|
|
8
|
+
import type {
|
|
9
|
+
Channel as ChannelLLC,
|
|
10
|
+
ChannelFilters,
|
|
11
|
+
ChannelMemberResponse,
|
|
12
|
+
ChannelSort,
|
|
13
|
+
Event,
|
|
14
|
+
LocalMessage,
|
|
15
|
+
MessageResponse,
|
|
16
|
+
ReactionResponse,
|
|
17
|
+
StreamChat,
|
|
18
|
+
UserResponse,
|
|
19
|
+
} from 'stream-chat';
|
|
8
20
|
import { v4 as uuidv4 } from 'uuid';
|
|
9
21
|
|
|
22
|
+
// Tests exercise internal APIs on StreamChat (private sync manager, legacy `wsConnection`).
|
|
23
|
+
// These helpers expose the internals at call sites without polluting the whole file with
|
|
24
|
+
// `any`; they use `as unknown as` because intersecting with the private `syncManager`
|
|
25
|
+
// collapses to `never`.
|
|
26
|
+
type TestSyncManager = { invokeSyncStatusListeners: (recovered: boolean) => Promise<void> };
|
|
27
|
+
const getSyncManager = (client: StreamChat): TestSyncManager =>
|
|
28
|
+
(client.offlineDb as unknown as { syncManager: TestSyncManager }).syncManager;
|
|
29
|
+
const asHydrateChannelsMock = (
|
|
30
|
+
client: StreamChat,
|
|
31
|
+
): StreamChat['hydrateActiveChannels'] & { mock: { calls: unknown[][] } } =>
|
|
32
|
+
client.hydrateActiveChannels as StreamChat['hydrateActiveChannels'] & {
|
|
33
|
+
mock: { calls: unknown[][] };
|
|
34
|
+
};
|
|
35
|
+
|
|
10
36
|
import { ChannelList } from '../../components/ChannelList/ChannelList';
|
|
11
37
|
import { Chat } from '../../components/Chat/Chat';
|
|
12
38
|
import { WithComponents } from '../../contexts/componentsContext/ComponentsContext';
|
|
@@ -52,7 +78,7 @@ import { BetterSqlite } from '../../test-utils/BetterSqlite';
|
|
|
52
78
|
* Custom ChannelPreview component used via WithComponents.
|
|
53
79
|
* Receives { channel, muted, unread, lastMessage } from ChannelPreview.
|
|
54
80
|
*/
|
|
55
|
-
const ChannelPreviewComponent = ({ channel }) => (
|
|
81
|
+
const ChannelPreviewComponent = ({ channel }: { channel: ChannelLLC }) => (
|
|
56
82
|
<View accessibilityLabel='list-item' testID={channel.cid}>
|
|
57
83
|
<Text>{channel.data?.name}</Text>
|
|
58
84
|
<Text>{channel.state?.messages?.[0]?.text}</Text>
|
|
@@ -63,7 +89,7 @@ test('Workaround to allow exporting tests', () => expect(true).toBe(true));
|
|
|
63
89
|
|
|
64
90
|
export const Generic = () => {
|
|
65
91
|
describe('Offline support is disabled', () => {
|
|
66
|
-
let chatClient;
|
|
92
|
+
let chatClient: StreamChat;
|
|
67
93
|
|
|
68
94
|
beforeAll(async () => {
|
|
69
95
|
jest.clearAllMocks();
|
|
@@ -88,7 +114,7 @@ export const Generic = () => {
|
|
|
88
114
|
await waitFor(() => expect(screen.getByTestId('test-child')).toBeTruthy());
|
|
89
115
|
|
|
90
116
|
await waitFor(async () => {
|
|
91
|
-
const tablesInDb = await BetterSqlite.getTables()
|
|
117
|
+
const tablesInDb = (await BetterSqlite.getTables()) as Array<{ name: string }>;
|
|
92
118
|
const tableNamesInDB = tablesInDb.map((table) => table.name);
|
|
93
119
|
const tablesNamesInSchema = Object.keys(tables);
|
|
94
120
|
|
|
@@ -100,16 +126,32 @@ export const Generic = () => {
|
|
|
100
126
|
});
|
|
101
127
|
|
|
102
128
|
describe('Offline support is enabled', () => {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
129
|
+
// Generated channel response shape used throughout the tests. Widened to include the
|
|
130
|
+
// `cid` top-level field that is not part of `GeneratedChannelResponseCustomValues` but
|
|
131
|
+
// which the tests rely on.
|
|
132
|
+
type GeneratedChannelResponseWithCid = ReturnType<typeof generateChannelResponse> & {
|
|
133
|
+
cid: string;
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
type MemberWithCid = ChannelMemberResponse & { cid: string };
|
|
137
|
+
type ReadWithCid = {
|
|
138
|
+
cid: string;
|
|
139
|
+
last_read: Date;
|
|
140
|
+
unread_messages: number;
|
|
141
|
+
user: ChannelMemberResponse['user'];
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
let chatClient: StreamChat;
|
|
145
|
+
let channels: GeneratedChannelResponseWithCid[];
|
|
146
|
+
|
|
147
|
+
let allUsers: UserResponse[];
|
|
148
|
+
let allMessages: Array<Partial<MessageResponse> | LocalMessage>;
|
|
149
|
+
let allMembers: MemberWithCid[];
|
|
150
|
+
let allReactions: ReactionResponse[];
|
|
151
|
+
let allReads: ReadWithCid[];
|
|
152
|
+
const getRandomInt = (lower: number, upper: number) =>
|
|
153
|
+
Math.floor(lower + Math.random() * (upper - lower + 1));
|
|
154
|
+
const createChannel = (messagesOverride?: Partial<MessageResponse>[]) => {
|
|
113
155
|
const id = uuidv4();
|
|
114
156
|
const cid = `messaging:${id}`;
|
|
115
157
|
// always guarantee at least 2 members for ease of use; cases that need to test specific behaviour
|
|
@@ -117,13 +159,19 @@ export const Generic = () => {
|
|
|
117
159
|
const begin = getRandomInt(0, allUsers.length - 3); // begin shouldn't be the end of users.length
|
|
118
160
|
const end = getRandomInt(begin + 2, allUsers.length - 1);
|
|
119
161
|
const usersForMembers = allUsers.slice(begin, end);
|
|
120
|
-
const members = usersForMembers.map(
|
|
121
|
-
|
|
122
|
-
cid
|
|
123
|
-
|
|
124
|
-
|
|
162
|
+
const members: MemberWithCid[] = usersForMembers.map(
|
|
163
|
+
(user: UserResponse) =>
|
|
164
|
+
// `cid` is not part of `ChannelMemberResponse`, but tests rely on reading it back from
|
|
165
|
+
// the generated member objects — keep the runtime shape and widen the type.
|
|
166
|
+
({
|
|
167
|
+
...generateMember({ user }),
|
|
168
|
+
cid,
|
|
169
|
+
}) as unknown as MemberWithCid,
|
|
125
170
|
);
|
|
126
|
-
members.push(
|
|
171
|
+
members.push({
|
|
172
|
+
...generateMember({ user: chatClient.user as UserResponse }),
|
|
173
|
+
cid,
|
|
174
|
+
} as unknown as MemberWithCid);
|
|
127
175
|
|
|
128
176
|
const messages =
|
|
129
177
|
messagesOverride ||
|
|
@@ -137,7 +185,7 @@ export const Generic = () => {
|
|
|
137
185
|
const end = getRandomInt(begin + 1, usersForMembers.length - 1);
|
|
138
186
|
|
|
139
187
|
const usersForReactions = usersForMembers.slice(begin, end);
|
|
140
|
-
const reactions = usersForReactions.map((user) =>
|
|
188
|
+
const reactions = usersForReactions.map((user: UserResponse) =>
|
|
141
189
|
generateReaction({
|
|
142
190
|
message_id: id,
|
|
143
191
|
user,
|
|
@@ -149,11 +197,11 @@ export const Generic = () => {
|
|
|
149
197
|
id,
|
|
150
198
|
latest_reactions: reactions,
|
|
151
199
|
user,
|
|
152
|
-
|
|
200
|
+
user_id: user.id,
|
|
153
201
|
});
|
|
154
202
|
});
|
|
155
203
|
|
|
156
|
-
const reads = members.map((member) => ({
|
|
204
|
+
const reads: ReadWithCid[] = members.map((member: MemberWithCid) => ({
|
|
157
205
|
cid,
|
|
158
206
|
last_read: new Date(new Date().setDate(new Date().getDate() - getRandomInt(0, 20))),
|
|
159
207
|
unread_messages: 0,
|
|
@@ -164,20 +212,25 @@ export const Generic = () => {
|
|
|
164
212
|
allMembers.push(...members);
|
|
165
213
|
allReads.push(...reads);
|
|
166
214
|
|
|
215
|
+
// `cid` is not part of `GeneratedChannelResponseCustomValues`, but tests rely on reading it
|
|
216
|
+
// back as a top-level field on the generated channel response — keep the runtime shape and
|
|
217
|
+
// widen the input type.
|
|
167
218
|
return generateChannelResponse({
|
|
168
219
|
cid,
|
|
169
220
|
id,
|
|
170
221
|
members,
|
|
171
222
|
messages,
|
|
172
223
|
read: reads,
|
|
173
|
-
}
|
|
224
|
+
} as unknown as Parameters<
|
|
225
|
+
typeof generateChannelResponse
|
|
226
|
+
>[0]) as GeneratedChannelResponseWithCid;
|
|
174
227
|
};
|
|
175
228
|
|
|
176
229
|
beforeEach(async () => {
|
|
177
230
|
jest.clearAllMocks();
|
|
178
231
|
chatClient = await getTestClientWithUser({ id: 'dan' });
|
|
179
232
|
allUsers = Array(20).fill(1).map(generateUser);
|
|
180
|
-
allUsers.push(chatClient.user);
|
|
233
|
+
allUsers.push(chatClient.user as UserResponse);
|
|
181
234
|
allMessages = [];
|
|
182
235
|
allMembers = [];
|
|
183
236
|
allReactions = [];
|
|
@@ -201,8 +254,8 @@ export const Generic = () => {
|
|
|
201
254
|
const filters = {
|
|
202
255
|
foo: 'bar',
|
|
203
256
|
type: 'messaging',
|
|
204
|
-
};
|
|
205
|
-
const sort = { last_updated: 1 };
|
|
257
|
+
} as ChannelFilters;
|
|
258
|
+
const sort: ChannelSort = { last_updated: 1 };
|
|
206
259
|
|
|
207
260
|
const renderComponent = () =>
|
|
208
261
|
render(
|
|
@@ -213,14 +266,18 @@ export const Generic = () => {
|
|
|
213
266
|
</Chat>,
|
|
214
267
|
);
|
|
215
268
|
|
|
216
|
-
const expectCIDsOnUIToBeInDB = async (
|
|
269
|
+
const expectCIDsOnUIToBeInDB = async (
|
|
270
|
+
queryAllByLabelText: typeof screen.queryAllByLabelText,
|
|
271
|
+
) => {
|
|
217
272
|
const channelIdsOnUI = queryAllByLabelText('list-item').map(
|
|
218
|
-
(node) =>
|
|
273
|
+
(node) =>
|
|
274
|
+
(node as unknown as { _fiber: { pendingProps: { testID: string } } })._fiber.pendingProps
|
|
275
|
+
.testID,
|
|
219
276
|
);
|
|
220
277
|
|
|
221
278
|
await waitFor(async () => {
|
|
222
279
|
const channelQueriesRows = await BetterSqlite.selectFromTable('channelQueries');
|
|
223
|
-
const cidsInDB = JSON.parse(channelQueriesRows[0].cids);
|
|
280
|
+
const cidsInDB = JSON.parse(channelQueriesRows[0].cids as string);
|
|
224
281
|
const filterSortQueryInDB = channelQueriesRows[0].id;
|
|
225
282
|
const actualFilterSortQueryInDB = convertFilterSortToQuery({ filters, sort });
|
|
226
283
|
|
|
@@ -228,16 +285,20 @@ export const Generic = () => {
|
|
|
228
285
|
expect(filterSortQueryInDB).toBe(actualFilterSortQueryInDB);
|
|
229
286
|
|
|
230
287
|
expect(cidsInDB.length).toBe(channelIdsOnUI.length);
|
|
231
|
-
channelIdsOnUI.forEach((cidOnUi, index) => {
|
|
288
|
+
channelIdsOnUI.forEach((cidOnUi: string, index: number) => {
|
|
232
289
|
expect(cidsInDB.includes(cidOnUi)).toBe(true);
|
|
233
290
|
expect(index).toBe(cidsInDB.indexOf(cidOnUi));
|
|
234
291
|
});
|
|
235
292
|
});
|
|
236
293
|
};
|
|
237
294
|
|
|
238
|
-
const expectAllChannelsWithStateToBeInDB = async (
|
|
295
|
+
const expectAllChannelsWithStateToBeInDB = async (
|
|
296
|
+
queryAllByLabelText: typeof screen.queryAllByLabelText,
|
|
297
|
+
) => {
|
|
239
298
|
const channelIdsOnUI = queryAllByLabelText('list-item').map(
|
|
240
|
-
(node) =>
|
|
299
|
+
(node) =>
|
|
300
|
+
(node as unknown as { _fiber: { pendingProps: { testID: string } } })._fiber.pendingProps
|
|
301
|
+
.testID,
|
|
241
302
|
);
|
|
242
303
|
|
|
243
304
|
await waitFor(async () => {
|
|
@@ -255,26 +316,32 @@ export const Generic = () => {
|
|
|
255
316
|
expect(reactionsRows.length).toBe(allReactions.length);
|
|
256
317
|
|
|
257
318
|
channelsRows.forEach((row) => {
|
|
258
|
-
expect(channelIdsOnUI.includes(row.cid)).toBe(true);
|
|
319
|
+
expect(channelIdsOnUI.includes(row.cid as string)).toBe(true);
|
|
259
320
|
});
|
|
260
321
|
|
|
261
322
|
messagesRows.forEach((row) => {
|
|
262
|
-
expect(
|
|
323
|
+
expect(
|
|
324
|
+
allMessages.filter((m: Partial<MessageResponse> | LocalMessage) => m.id === row.id),
|
|
325
|
+
).toHaveLength(1);
|
|
263
326
|
});
|
|
264
327
|
membersRows.forEach((row) =>
|
|
265
328
|
expect(
|
|
266
|
-
allMembers.filter((m) => m.cid === row.cid && m.user
|
|
329
|
+
allMembers.filter((m: MemberWithCid) => m.cid === row.cid && m.user?.id === row.userId),
|
|
267
330
|
).toHaveLength(1),
|
|
268
331
|
);
|
|
269
|
-
usersRows.forEach((row) =>
|
|
332
|
+
usersRows.forEach((row) =>
|
|
333
|
+
expect(allUsers.filter((u: UserResponse) => u.id === row.id)).toHaveLength(1),
|
|
334
|
+
);
|
|
270
335
|
reactionsRows.forEach((row) =>
|
|
271
336
|
expect(
|
|
272
|
-
allReactions.filter(
|
|
337
|
+
allReactions.filter(
|
|
338
|
+
(r: ReactionResponse) => r.message_id === row.messageId && row.userId === r.user_id,
|
|
339
|
+
),
|
|
273
340
|
).toHaveLength(1),
|
|
274
341
|
);
|
|
275
342
|
readsRows.forEach((row) =>
|
|
276
343
|
expect(
|
|
277
|
-
allReads.filter((r) => r.user
|
|
344
|
+
allReads.filter((r: ReadWithCid) => r.user?.id === row.userId && r.cid === row.cid),
|
|
278
345
|
).toHaveLength(1),
|
|
279
346
|
);
|
|
280
347
|
});
|
|
@@ -289,7 +356,7 @@ export const Generic = () => {
|
|
|
289
356
|
|
|
290
357
|
await waitFor(() => expect(screen.getByTestId('test-child')).toBeTruthy());
|
|
291
358
|
|
|
292
|
-
const tablesInDb = await BetterSqlite.getTables()
|
|
359
|
+
const tablesInDb = (await BetterSqlite.getTables()) as Array<{ name: string }>;
|
|
293
360
|
const tableNamesInDB = tablesInDb.map((table) => table.name);
|
|
294
361
|
const tablesNamesInSchema = Object.keys(tables);
|
|
295
362
|
|
|
@@ -303,7 +370,7 @@ export const Generic = () => {
|
|
|
303
370
|
await act(() => dispatchConnectionChangedEvent(chatClient, false));
|
|
304
371
|
// await waiter();
|
|
305
372
|
await act(() => dispatchConnectionChangedEvent(chatClient));
|
|
306
|
-
await act(async () => await chatClient.
|
|
373
|
+
await act(async () => await getSyncManager(chatClient).invokeSyncStatusListeners(true));
|
|
307
374
|
|
|
308
375
|
await waitFor(async () => {
|
|
309
376
|
expect(screen.getByTestId('channel-list-view')).toBeTruthy();
|
|
@@ -317,7 +384,7 @@ export const Generic = () => {
|
|
|
317
384
|
renderComponent();
|
|
318
385
|
|
|
319
386
|
act(() => dispatchConnectionChangedEvent(chatClient));
|
|
320
|
-
await act(async () => await chatClient.
|
|
387
|
+
await act(async () => await getSyncManager(chatClient).invokeSyncStatusListeners(true));
|
|
321
388
|
|
|
322
389
|
await waitFor(
|
|
323
390
|
async () => {
|
|
@@ -337,13 +404,11 @@ export const Generic = () => {
|
|
|
337
404
|
|
|
338
405
|
await waitFor(async () => {
|
|
339
406
|
act(() => dispatchConnectionChangedEvent(chatClient));
|
|
340
|
-
await act(
|
|
341
|
-
async () => await chatClient.offlineDb.syncManager.invokeSyncStatusListeners(true),
|
|
342
|
-
);
|
|
407
|
+
await act(async () => await getSyncManager(chatClient).invokeSyncStatusListeners(true));
|
|
343
408
|
expect(screen.getByTestId('channel-list-view')).toBeTruthy();
|
|
344
409
|
expect(screen.getByTestId(emptyChannel.cid)).toBeTruthy();
|
|
345
410
|
expect(chatClient.hydrateActiveChannels).toHaveBeenCalled();
|
|
346
|
-
expect(chatClient.
|
|
411
|
+
expect(asHydrateChannelsMock(chatClient).mock.calls[0][0]).toStrictEqual([emptyChannel]);
|
|
347
412
|
});
|
|
348
413
|
});
|
|
349
414
|
|
|
@@ -352,7 +417,7 @@ export const Generic = () => {
|
|
|
352
417
|
|
|
353
418
|
renderComponent();
|
|
354
419
|
act(() => dispatchConnectionChangedEvent(chatClient));
|
|
355
|
-
await act(async () => await chatClient.
|
|
420
|
+
await act(async () => await getSyncManager(chatClient).invokeSyncStatusListeners(true));
|
|
356
421
|
await waitFor(() => expect(screen.getByTestId('channel-list-view')).toBeTruthy());
|
|
357
422
|
const targetChannel = channels[0].channel;
|
|
358
423
|
const newMessage = generateMessage({
|
|
@@ -381,7 +446,7 @@ export const Generic = () => {
|
|
|
381
446
|
|
|
382
447
|
renderComponent();
|
|
383
448
|
act(() => dispatchConnectionChangedEvent(chatClient));
|
|
384
|
-
await act(async () => await chatClient.
|
|
449
|
+
await act(async () => await getSyncManager(chatClient).invokeSyncStatusListeners(true));
|
|
385
450
|
await waitFor(() => expect(screen.getByTestId('channel-list-view')).toBeTruthy());
|
|
386
451
|
const targetChannel = channels[0].channel;
|
|
387
452
|
|
|
@@ -443,7 +508,7 @@ export const Generic = () => {
|
|
|
443
508
|
|
|
444
509
|
renderComponent();
|
|
445
510
|
act(() => dispatchConnectionChangedEvent(chatClient));
|
|
446
|
-
await act(async () => await chatClient.
|
|
511
|
+
await act(async () => await getSyncManager(chatClient).invokeSyncStatusListeners(true));
|
|
447
512
|
await waitFor(() => expect(screen.getByTestId('channel-list-view')).toBeTruthy());
|
|
448
513
|
const targetChannel = channels[0].channel;
|
|
449
514
|
|
|
@@ -505,7 +570,7 @@ export const Generic = () => {
|
|
|
505
570
|
|
|
506
571
|
renderComponent();
|
|
507
572
|
act(() => dispatchConnectionChangedEvent(chatClient));
|
|
508
|
-
await act(async () => await chatClient.
|
|
573
|
+
await act(async () => await getSyncManager(chatClient).invokeSyncStatusListeners(true));
|
|
509
574
|
await waitFor(() => {
|
|
510
575
|
expect(screen.getByTestId('channel-list-view')).toBeTruthy();
|
|
511
576
|
});
|
|
@@ -520,7 +585,11 @@ export const Generic = () => {
|
|
|
520
585
|
await waitFor(() => {
|
|
521
586
|
const channelIdsOnUI = screen
|
|
522
587
|
.queryAllByLabelText('list-item')
|
|
523
|
-
.map(
|
|
588
|
+
.map(
|
|
589
|
+
(node) =>
|
|
590
|
+
(node as unknown as { _fiber: { pendingProps: { testID: string } } })._fiber
|
|
591
|
+
.pendingProps.testID,
|
|
592
|
+
);
|
|
524
593
|
expect(channelIdsOnUI.includes(newChannel.channel.cid)).toBeTruthy();
|
|
525
594
|
});
|
|
526
595
|
|
|
@@ -542,13 +611,19 @@ export const Generic = () => {
|
|
|
542
611
|
|
|
543
612
|
renderComponent();
|
|
544
613
|
act(() => dispatchConnectionChangedEvent(chatClient));
|
|
545
|
-
await act(async () => await chatClient.
|
|
614
|
+
await act(async () => await getSyncManager(chatClient).invokeSyncStatusListeners(true));
|
|
546
615
|
await waitFor(() => expect(screen.getByTestId('channel-list-view')).toBeTruthy());
|
|
547
616
|
|
|
548
617
|
const updatedMessage = { ...channels[0].messages[0] };
|
|
549
618
|
updatedMessage.text = uuidv4();
|
|
550
619
|
|
|
551
|
-
act(() =>
|
|
620
|
+
act(() =>
|
|
621
|
+
dispatchMessageUpdatedEvent(
|
|
622
|
+
chatClient,
|
|
623
|
+
updatedMessage as MessageResponse,
|
|
624
|
+
channels[0].channel,
|
|
625
|
+
),
|
|
626
|
+
);
|
|
552
627
|
|
|
553
628
|
await waitFor(async () => {
|
|
554
629
|
const messagesRows = await BetterSqlite.selectFromTable('messages');
|
|
@@ -564,14 +639,18 @@ export const Generic = () => {
|
|
|
564
639
|
|
|
565
640
|
renderComponent();
|
|
566
641
|
act(() => dispatchConnectionChangedEvent(chatClient));
|
|
567
|
-
await act(async () => await chatClient.
|
|
642
|
+
await act(async () => await getSyncManager(chatClient).invokeSyncStatusListeners(true));
|
|
568
643
|
await waitFor(() => expect(screen.getByTestId('channel-list-view')).toBeTruthy());
|
|
569
644
|
const removedChannel = channels[getRandomInt(0, channels.length - 1)].channel;
|
|
570
645
|
act(() => dispatchNotificationRemovedFromChannel(chatClient, removedChannel));
|
|
571
646
|
await waitFor(async () => {
|
|
572
647
|
const channelIdsOnUI = screen
|
|
573
648
|
.queryAllByLabelText('list-item')
|
|
574
|
-
.map(
|
|
649
|
+
.map(
|
|
650
|
+
(node) =>
|
|
651
|
+
(node as unknown as { _fiber: { pendingProps: { testID: string } } })._fiber
|
|
652
|
+
.pendingProps.testID,
|
|
653
|
+
);
|
|
575
654
|
expect(channelIdsOnUI.includes(removedChannel.cid)).toBeFalsy();
|
|
576
655
|
await expectCIDsOnUIToBeInDB(screen.queryAllByLabelText);
|
|
577
656
|
|
|
@@ -591,14 +670,18 @@ export const Generic = () => {
|
|
|
591
670
|
|
|
592
671
|
renderComponent();
|
|
593
672
|
act(() => dispatchConnectionChangedEvent(chatClient));
|
|
594
|
-
await act(async () => await chatClient.
|
|
673
|
+
await act(async () => await getSyncManager(chatClient).invokeSyncStatusListeners(true));
|
|
595
674
|
await waitFor(() => expect(screen.getByTestId('channel-list-view')).toBeTruthy());
|
|
596
675
|
const removedChannel = channels[getRandomInt(0, channels.length - 1)].channel;
|
|
597
676
|
act(() => dispatchChannelDeletedEvent(chatClient, removedChannel));
|
|
598
677
|
await waitFor(async () => {
|
|
599
678
|
const channelIdsOnUI = screen
|
|
600
679
|
.queryAllByLabelText('list-item')
|
|
601
|
-
.map(
|
|
680
|
+
.map(
|
|
681
|
+
(node) =>
|
|
682
|
+
(node as unknown as { _fiber: { pendingProps: { testID: string } } })._fiber
|
|
683
|
+
.pendingProps.testID,
|
|
684
|
+
);
|
|
602
685
|
expect(channelIdsOnUI.includes(removedChannel.cid)).toBeFalsy();
|
|
603
686
|
await expectCIDsOnUIToBeInDB(screen.queryAllByLabelText);
|
|
604
687
|
|
|
@@ -618,14 +701,18 @@ export const Generic = () => {
|
|
|
618
701
|
|
|
619
702
|
renderComponent();
|
|
620
703
|
act(() => dispatchConnectionChangedEvent(chatClient));
|
|
621
|
-
await act(async () => await chatClient.
|
|
704
|
+
await act(async () => await getSyncManager(chatClient).invokeSyncStatusListeners(true));
|
|
622
705
|
await waitFor(() => expect(screen.getByTestId('channel-list-view')).toBeTruthy());
|
|
623
706
|
const hiddenChannel = channels[getRandomInt(0, channels.length - 1)].channel;
|
|
624
707
|
act(() => dispatchChannelHiddenEvent(chatClient, hiddenChannel));
|
|
625
708
|
await waitFor(async () => {
|
|
626
709
|
const channelIdsOnUI = screen
|
|
627
710
|
.queryAllByLabelText('list-item')
|
|
628
|
-
.map(
|
|
711
|
+
.map(
|
|
712
|
+
(node) =>
|
|
713
|
+
(node as unknown as { _fiber: { pendingProps: { testID: string } } })._fiber
|
|
714
|
+
.pendingProps.testID,
|
|
715
|
+
);
|
|
629
716
|
expect(channelIdsOnUI.includes(hiddenChannel.cid)).toBeFalsy();
|
|
630
717
|
await expectCIDsOnUIToBeInDB(screen.queryAllByLabelText);
|
|
631
718
|
|
|
@@ -648,7 +735,7 @@ export const Generic = () => {
|
|
|
648
735
|
|
|
649
736
|
renderComponent();
|
|
650
737
|
act(() => dispatchConnectionChangedEvent(chatClient));
|
|
651
|
-
await act(async () => await chatClient.
|
|
738
|
+
await act(async () => await getSyncManager(chatClient).invokeSyncStatusListeners(true));
|
|
652
739
|
await waitFor(() => expect(screen.getByTestId('channel-list-view')).toBeTruthy());
|
|
653
740
|
const hiddenChannel = channels[getRandomInt(0, channels.length - 1)].channel;
|
|
654
741
|
// first, we mark it as hidden
|
|
@@ -656,7 +743,11 @@ export const Generic = () => {
|
|
|
656
743
|
await waitFor(async () => {
|
|
657
744
|
const channelIdsOnUI = screen
|
|
658
745
|
.queryAllByLabelText('list-item')
|
|
659
|
-
.map(
|
|
746
|
+
.map(
|
|
747
|
+
(node) =>
|
|
748
|
+
(node as unknown as { _fiber: { pendingProps: { testID: string } } })._fiber
|
|
749
|
+
.pendingProps.testID,
|
|
750
|
+
);
|
|
660
751
|
expect(channelIdsOnUI.includes(hiddenChannel.cid)).toBeFalsy();
|
|
661
752
|
await expectCIDsOnUIToBeInDB(screen.queryAllByLabelText);
|
|
662
753
|
|
|
@@ -678,7 +769,11 @@ export const Generic = () => {
|
|
|
678
769
|
await waitFor(async () => {
|
|
679
770
|
const channelIdsOnUI = screen
|
|
680
771
|
.queryAllByLabelText('list-item')
|
|
681
|
-
.map(
|
|
772
|
+
.map(
|
|
773
|
+
(node) =>
|
|
774
|
+
(node as unknown as { _fiber: { pendingProps: { testID: string } } })._fiber
|
|
775
|
+
.pendingProps.testID,
|
|
776
|
+
);
|
|
682
777
|
expect(channelIdsOnUI.includes(hiddenChannel.cid)).toBeFalsy();
|
|
683
778
|
await expectCIDsOnUIToBeInDB(screen.queryAllByLabelText);
|
|
684
779
|
|
|
@@ -701,7 +796,7 @@ export const Generic = () => {
|
|
|
701
796
|
|
|
702
797
|
renderComponent();
|
|
703
798
|
act(() => dispatchConnectionChangedEvent(chatClient));
|
|
704
|
-
await act(async () => await chatClient.
|
|
799
|
+
await act(async () => await getSyncManager(chatClient).invokeSyncStatusListeners(true));
|
|
705
800
|
await waitFor(() => expect(screen.getByTestId('channel-list-view')).toBeTruthy());
|
|
706
801
|
|
|
707
802
|
const newChannel = createChannel();
|
|
@@ -713,7 +808,11 @@ export const Generic = () => {
|
|
|
713
808
|
await waitFor(() => {
|
|
714
809
|
const channelIdsOnUI = screen
|
|
715
810
|
.queryAllByLabelText('list-item')
|
|
716
|
-
.map(
|
|
811
|
+
.map(
|
|
812
|
+
(node) =>
|
|
813
|
+
(node as unknown as { _fiber: { pendingProps: { testID: string } } })._fiber
|
|
814
|
+
.pendingProps.testID,
|
|
815
|
+
);
|
|
717
816
|
expect(channelIdsOnUI.includes(newChannel.channel.cid)).toBeTruthy();
|
|
718
817
|
});
|
|
719
818
|
|
|
@@ -735,7 +834,7 @@ export const Generic = () => {
|
|
|
735
834
|
|
|
736
835
|
renderComponent();
|
|
737
836
|
act(() => dispatchConnectionChangedEvent(chatClient));
|
|
738
|
-
await act(async () => await chatClient.
|
|
837
|
+
await act(async () => await getSyncManager(chatClient).invokeSyncStatusListeners(true));
|
|
739
838
|
await waitFor(() => expect(screen.getByTestId('channel-list-view')).toBeTruthy());
|
|
740
839
|
|
|
741
840
|
const channelToTruncate = channels[getRandomInt(0, channels.length - 1)].channel;
|
|
@@ -744,7 +843,11 @@ export const Generic = () => {
|
|
|
744
843
|
await waitFor(async () => {
|
|
745
844
|
const channelIdsOnUI = screen
|
|
746
845
|
.queryAllByLabelText('list-item')
|
|
747
|
-
.map(
|
|
846
|
+
.map(
|
|
847
|
+
(node) =>
|
|
848
|
+
(node as unknown as { _fiber: { pendingProps: { testID: string } } })._fiber
|
|
849
|
+
.pendingProps.testID,
|
|
850
|
+
);
|
|
748
851
|
expect(channelIdsOnUI.includes(channelToTruncate.cid)).toBeTruthy();
|
|
749
852
|
expectCIDsOnUIToBeInDB(screen.queryAllByLabelText);
|
|
750
853
|
|
|
@@ -767,15 +870,19 @@ export const Generic = () => {
|
|
|
767
870
|
|
|
768
871
|
renderComponent();
|
|
769
872
|
act(() => dispatchConnectionChangedEvent(chatClient));
|
|
770
|
-
await act(async () => await chatClient.
|
|
873
|
+
await act(async () => await getSyncManager(chatClient).invokeSyncStatusListeners(true));
|
|
771
874
|
await waitFor(() => expect(screen.getByTestId('channel-list-view')).toBeTruthy());
|
|
772
875
|
|
|
773
876
|
const channelResponse = channels[getRandomInt(0, channels.length - 1)];
|
|
774
877
|
const channelToTruncate = channelResponse.channel;
|
|
775
878
|
const messages = channelResponse.messages;
|
|
776
|
-
messages.sort(
|
|
879
|
+
messages.sort(
|
|
880
|
+
(a: Partial<MessageResponse> | LocalMessage, b: Partial<MessageResponse> | LocalMessage) =>
|
|
881
|
+
new Date(a.created_at as string | Date).getTime() -
|
|
882
|
+
new Date(b.created_at as string | Date).getTime(),
|
|
883
|
+
);
|
|
777
884
|
// truncate at the middle
|
|
778
|
-
const truncatedAt = messages[Number(messages.length / 2)].created_at;
|
|
885
|
+
const truncatedAt = messages[Number(messages.length / 2)].created_at as string | undefined;
|
|
779
886
|
act(() =>
|
|
780
887
|
dispatchChannelTruncatedEvent(chatClient, {
|
|
781
888
|
...channelToTruncate,
|
|
@@ -786,7 +893,11 @@ export const Generic = () => {
|
|
|
786
893
|
await waitFor(async () => {
|
|
787
894
|
const channelIdsOnUI = screen
|
|
788
895
|
.queryAllByLabelText('list-item')
|
|
789
|
-
.map(
|
|
896
|
+
.map(
|
|
897
|
+
(node) =>
|
|
898
|
+
(node as unknown as { _fiber: { pendingProps: { testID: string } } })._fiber
|
|
899
|
+
.pendingProps.testID,
|
|
900
|
+
);
|
|
790
901
|
expect(channelIdsOnUI.includes(channelToTruncate.cid)).toBeTruthy();
|
|
791
902
|
expectCIDsOnUIToBeInDB(screen.queryAllByLabelText);
|
|
792
903
|
|
|
@@ -811,7 +922,7 @@ export const Generic = () => {
|
|
|
811
922
|
|
|
812
923
|
renderComponent();
|
|
813
924
|
act(() => dispatchConnectionChangedEvent(chatClient));
|
|
814
|
-
await act(async () => await chatClient.
|
|
925
|
+
await act(async () => await getSyncManager(chatClient).invokeSyncStatusListeners(true));
|
|
815
926
|
await waitFor(() => expect(screen.getByTestId('channel-list-view')).toBeTruthy());
|
|
816
927
|
|
|
817
928
|
const channelResponse = channels[getRandomInt(0, channels.length - 1)];
|
|
@@ -827,7 +938,11 @@ export const Generic = () => {
|
|
|
827
938
|
await waitFor(async () => {
|
|
828
939
|
const channelIdsOnUI = screen
|
|
829
940
|
.queryAllByLabelText('list-item')
|
|
830
|
-
.map(
|
|
941
|
+
.map(
|
|
942
|
+
(node) =>
|
|
943
|
+
(node as unknown as { _fiber: { pendingProps: { testID: string } } })._fiber
|
|
944
|
+
.pendingProps.testID,
|
|
945
|
+
);
|
|
831
946
|
expect(channelIdsOnUI.includes(channelToTruncate.cid)).toBeTruthy();
|
|
832
947
|
expectCIDsOnUIToBeInDB(screen.queryAllByLabelText);
|
|
833
948
|
|
|
@@ -843,13 +958,17 @@ export const Generic = () => {
|
|
|
843
958
|
|
|
844
959
|
renderComponent();
|
|
845
960
|
act(() => dispatchConnectionChangedEvent(chatClient));
|
|
846
|
-
await act(async () => await chatClient.
|
|
961
|
+
await act(async () => await getSyncManager(chatClient).invokeSyncStatusListeners(true));
|
|
847
962
|
await waitFor(() => expect(screen.getByTestId('channel-list-view')).toBeTruthy());
|
|
848
963
|
|
|
849
964
|
const channelResponse = channels[getRandomInt(0, channels.length - 1)];
|
|
850
965
|
const channelToTruncate = channelResponse.channel;
|
|
851
966
|
const messages = channelResponse.messages;
|
|
852
|
-
const latestTimestamp = Math.max(
|
|
967
|
+
const latestTimestamp = Math.max(
|
|
968
|
+
...messages.map((m: Partial<MessageResponse> | LocalMessage) =>
|
|
969
|
+
new Date(m.created_at as string | Date).getTime(),
|
|
970
|
+
),
|
|
971
|
+
);
|
|
853
972
|
// truncate at the middle
|
|
854
973
|
const truncatedAt = new Date(latestTimestamp + 1).toISOString();
|
|
855
974
|
act(() =>
|
|
@@ -862,7 +981,11 @@ export const Generic = () => {
|
|
|
862
981
|
await waitFor(async () => {
|
|
863
982
|
const channelIdsOnUI = screen
|
|
864
983
|
.queryAllByLabelText('list-item')
|
|
865
|
-
.map(
|
|
984
|
+
.map(
|
|
985
|
+
(node) =>
|
|
986
|
+
(node as unknown as { _fiber: { pendingProps: { testID: string } } })._fiber
|
|
987
|
+
.pendingProps.testID,
|
|
988
|
+
);
|
|
866
989
|
expect(channelIdsOnUI.includes(channelToTruncate.cid)).toBeTruthy();
|
|
867
990
|
expectCIDsOnUIToBeInDB(screen.queryAllByLabelText);
|
|
868
991
|
|
|
@@ -877,7 +1000,7 @@ export const Generic = () => {
|
|
|
877
1000
|
useMockedApis(chatClient, [queryChannelsApi(channels)]);
|
|
878
1001
|
renderComponent();
|
|
879
1002
|
act(() => dispatchConnectionChangedEvent(chatClient));
|
|
880
|
-
await act(async () => await chatClient.
|
|
1003
|
+
await act(async () => await getSyncManager(chatClient).invokeSyncStatusListeners(true));
|
|
881
1004
|
await waitFor(() => expect(screen.getByTestId('channel-list-view')).toBeTruthy());
|
|
882
1005
|
|
|
883
1006
|
const targetChannel = channels[getRandomInt(0, channels.length - 1)];
|
|
@@ -893,14 +1016,14 @@ export const Generic = () => {
|
|
|
893
1016
|
});
|
|
894
1017
|
const messageWithNewReaction = {
|
|
895
1018
|
...targetMessage,
|
|
896
|
-
latest_reactions: [...targetMessage.latest_reactions, newReaction],
|
|
1019
|
+
latest_reactions: [...(targetMessage.latest_reactions ?? []), newReaction],
|
|
897
1020
|
};
|
|
898
1021
|
|
|
899
1022
|
act(() =>
|
|
900
1023
|
dispatchReactionNewEvent(
|
|
901
1024
|
chatClient,
|
|
902
1025
|
newReaction,
|
|
903
|
-
messageWithNewReaction,
|
|
1026
|
+
messageWithNewReaction as MessageResponse,
|
|
904
1027
|
targetChannel.channel,
|
|
905
1028
|
),
|
|
906
1029
|
);
|
|
@@ -910,7 +1033,7 @@ export const Generic = () => {
|
|
|
910
1033
|
const matchingReactionsRows = reactionsRows.filter(
|
|
911
1034
|
(r) =>
|
|
912
1035
|
r.type === newReaction.type &&
|
|
913
|
-
r.userId === reactionMember.user
|
|
1036
|
+
r.userId === reactionMember.user!.id &&
|
|
914
1037
|
r.messageId === messageWithNewReaction.id,
|
|
915
1038
|
);
|
|
916
1039
|
|
|
@@ -922,7 +1045,7 @@ export const Generic = () => {
|
|
|
922
1045
|
useMockedApis(chatClient, [queryChannelsApi(channels)]);
|
|
923
1046
|
renderComponent();
|
|
924
1047
|
act(() => dispatchConnectionChangedEvent(chatClient));
|
|
925
|
-
await act(async () => await chatClient.
|
|
1048
|
+
await act(async () => await getSyncManager(chatClient).invokeSyncStatusListeners(true));
|
|
926
1049
|
await waitFor(() => expect(screen.getByTestId('channel-list-view')).toBeTruthy());
|
|
927
1050
|
|
|
928
1051
|
const targetChannel = channels[getRandomInt(0, channels.length - 1)];
|
|
@@ -931,7 +1054,7 @@ export const Generic = () => {
|
|
|
931
1054
|
const reactionMember =
|
|
932
1055
|
targetChannel.members[getRandomInt(0, targetChannel.members.length - 1)];
|
|
933
1056
|
const someOtherMember = targetChannel.members.filter(
|
|
934
|
-
(member) => reactionMember.user
|
|
1057
|
+
(member: Partial<ChannelMemberResponse>) => reactionMember.user!.id !== member.user!.id,
|
|
935
1058
|
)[getRandomInt(0, targetChannel.members.length - 2)];
|
|
936
1059
|
|
|
937
1060
|
const newReactions = [
|
|
@@ -953,34 +1076,37 @@ export const Generic = () => {
|
|
|
953
1076
|
];
|
|
954
1077
|
const messageWithNewReactionBase = {
|
|
955
1078
|
...targetMessage,
|
|
956
|
-
latest_reactions: [...targetMessage.latest_reactions],
|
|
1079
|
+
latest_reactions: [...(targetMessage.latest_reactions ?? [])],
|
|
957
1080
|
};
|
|
958
|
-
const newLatestReactions = [];
|
|
1081
|
+
const newLatestReactions: ReactionResponse[] = [];
|
|
959
1082
|
|
|
960
1083
|
newReactions.forEach((newReaction) => {
|
|
961
1084
|
newLatestReactions.push(newReaction);
|
|
962
1085
|
const messageWithNewReaction = {
|
|
963
1086
|
...messageWithNewReactionBase,
|
|
964
|
-
latest_reactions: [
|
|
1087
|
+
latest_reactions: [
|
|
1088
|
+
...(messageWithNewReactionBase.latest_reactions ?? []),
|
|
1089
|
+
...newLatestReactions,
|
|
1090
|
+
],
|
|
965
1091
|
};
|
|
966
1092
|
act(() =>
|
|
967
1093
|
dispatchReactionNewEvent(
|
|
968
1094
|
chatClient,
|
|
969
1095
|
newReaction,
|
|
970
|
-
messageWithNewReaction,
|
|
1096
|
+
messageWithNewReaction as MessageResponse,
|
|
971
1097
|
targetChannel.channel,
|
|
972
1098
|
),
|
|
973
1099
|
);
|
|
974
1100
|
});
|
|
975
1101
|
|
|
976
1102
|
const finalReactionCount =
|
|
977
|
-
messageWithNewReactionBase.latest_reactions.length +
|
|
1103
|
+
(messageWithNewReactionBase.latest_reactions ?? []).length +
|
|
978
1104
|
newReactions.filter(
|
|
979
1105
|
(newReaction) =>
|
|
980
|
-
!messageWithNewReactionBase.latest_reactions.some(
|
|
981
|
-
(initialReaction) =>
|
|
1106
|
+
!(messageWithNewReactionBase.latest_reactions ?? []).some(
|
|
1107
|
+
(initialReaction: ReactionResponse) =>
|
|
982
1108
|
initialReaction.type === newReaction.type &&
|
|
983
|
-
initialReaction.user
|
|
1109
|
+
initialReaction.user!.id === newReaction.user!.id,
|
|
984
1110
|
),
|
|
985
1111
|
).length;
|
|
986
1112
|
|
|
@@ -995,7 +1121,7 @@ export const Generic = () => {
|
|
|
995
1121
|
expect(
|
|
996
1122
|
matchingReactionsRows.filter(
|
|
997
1123
|
(reaction) =>
|
|
998
|
-
reaction.type === newReaction.type && reaction.userId === newReaction.user
|
|
1124
|
+
reaction.type === newReaction.type && reaction.userId === newReaction.user!.id,
|
|
999
1125
|
).length,
|
|
1000
1126
|
).toBe(1);
|
|
1001
1127
|
});
|
|
@@ -1006,7 +1132,7 @@ export const Generic = () => {
|
|
|
1006
1132
|
useMockedApis(chatClient, [queryChannelsApi(channels)]);
|
|
1007
1133
|
renderComponent();
|
|
1008
1134
|
act(() => dispatchConnectionChangedEvent(chatClient));
|
|
1009
|
-
await act(async () => await chatClient.
|
|
1135
|
+
await act(async () => await getSyncManager(chatClient).invokeSyncStatusListeners(true));
|
|
1010
1136
|
await waitFor(() => expect(screen.getByTestId('channel-list-view')).toBeTruthy());
|
|
1011
1137
|
|
|
1012
1138
|
const targetChannel = channels[getRandomInt(0, channels.length - 1)];
|
|
@@ -1034,21 +1160,24 @@ export const Generic = () => {
|
|
|
1034
1160
|
];
|
|
1035
1161
|
const messageWithNewReactionBase = {
|
|
1036
1162
|
...targetMessage,
|
|
1037
|
-
latest_reactions: [...targetMessage.latest_reactions],
|
|
1163
|
+
latest_reactions: [...(targetMessage.latest_reactions ?? [])],
|
|
1038
1164
|
};
|
|
1039
|
-
const newLatestReactions = [];
|
|
1165
|
+
const newLatestReactions: ReactionResponse[] = [];
|
|
1040
1166
|
|
|
1041
1167
|
newReactions.forEach((newReaction) => {
|
|
1042
1168
|
newLatestReactions.push(newReaction);
|
|
1043
1169
|
const messageWithNewReaction = {
|
|
1044
1170
|
...messageWithNewReactionBase,
|
|
1045
|
-
latest_reactions: [
|
|
1171
|
+
latest_reactions: [
|
|
1172
|
+
...(messageWithNewReactionBase.latest_reactions ?? []),
|
|
1173
|
+
...newLatestReactions,
|
|
1174
|
+
],
|
|
1046
1175
|
};
|
|
1047
1176
|
act(() =>
|
|
1048
1177
|
dispatchReactionNewEvent(
|
|
1049
1178
|
chatClient,
|
|
1050
1179
|
newReaction,
|
|
1051
|
-
messageWithNewReaction,
|
|
1180
|
+
messageWithNewReaction as MessageResponse,
|
|
1052
1181
|
targetChannel.channel,
|
|
1053
1182
|
),
|
|
1054
1183
|
);
|
|
@@ -1059,7 +1188,7 @@ export const Generic = () => {
|
|
|
1059
1188
|
const matchingReactionsRows = reactionsRows.filter(
|
|
1060
1189
|
(r) =>
|
|
1061
1190
|
r.type === 'wow' &&
|
|
1062
|
-
r.userId === reactionMember.user
|
|
1191
|
+
r.userId === reactionMember.user!.id &&
|
|
1063
1192
|
r.messageId === messageWithNewReactionBase.id,
|
|
1064
1193
|
);
|
|
1065
1194
|
|
|
@@ -1072,13 +1201,13 @@ export const Generic = () => {
|
|
|
1072
1201
|
|
|
1073
1202
|
renderComponent();
|
|
1074
1203
|
act(() => dispatchConnectionChangedEvent(chatClient));
|
|
1075
|
-
await act(async () => await chatClient.
|
|
1204
|
+
await act(async () => await getSyncManager(chatClient).invokeSyncStatusListeners(true));
|
|
1076
1205
|
await waitFor(() => expect(screen.getByTestId('channel-list-view')).toBeTruthy());
|
|
1077
1206
|
|
|
1078
1207
|
const targetChannel = channels[getRandomInt(0, channels.length - 1)];
|
|
1079
1208
|
const targetMessage =
|
|
1080
1209
|
targetChannel.messages[getRandomInt(0, targetChannel.messages.length - 1)];
|
|
1081
|
-
const reactionsOnTargetMessage = targetMessage.latest_reactions;
|
|
1210
|
+
const reactionsOnTargetMessage = targetMessage.latest_reactions ?? [];
|
|
1082
1211
|
const reactionToBeRemoved =
|
|
1083
1212
|
reactionsOnTargetMessage[getRandomInt(0, reactionsOnTargetMessage.length - 1)];
|
|
1084
1213
|
|
|
@@ -1103,7 +1232,7 @@ export const Generic = () => {
|
|
|
1103
1232
|
dispatchReactionDeletedEvent(
|
|
1104
1233
|
chatClient,
|
|
1105
1234
|
reactionToBeRemoved,
|
|
1106
|
-
messageWithoutDeletedReaction,
|
|
1235
|
+
messageWithoutDeletedReaction as MessageResponse,
|
|
1107
1236
|
targetChannel.channel,
|
|
1108
1237
|
),
|
|
1109
1238
|
);
|
|
@@ -1126,13 +1255,13 @@ export const Generic = () => {
|
|
|
1126
1255
|
|
|
1127
1256
|
renderComponent();
|
|
1128
1257
|
act(() => dispatchConnectionChangedEvent(chatClient));
|
|
1129
|
-
await act(async () => await chatClient.
|
|
1258
|
+
await act(async () => await getSyncManager(chatClient).invokeSyncStatusListeners(true));
|
|
1130
1259
|
await waitFor(() => expect(screen.getByTestId('channel-list-view')).toBeTruthy());
|
|
1131
1260
|
|
|
1132
1261
|
const targetChannel = channels[getRandomInt(0, channels.length - 1)];
|
|
1133
1262
|
const targetMessage =
|
|
1134
1263
|
targetChannel.messages[getRandomInt(0, targetChannel.messages.length - 1)];
|
|
1135
|
-
const reactionsOnTargetMessage = targetMessage.latest_reactions;
|
|
1264
|
+
const reactionsOnTargetMessage = targetMessage.latest_reactions ?? [];
|
|
1136
1265
|
const reactionToBeUpdated =
|
|
1137
1266
|
reactionsOnTargetMessage[getRandomInt(0, reactionsOnTargetMessage.length - 1)];
|
|
1138
1267
|
reactionToBeUpdated.type = 'wow';
|
|
@@ -1141,7 +1270,7 @@ export const Generic = () => {
|
|
|
1141
1270
|
dispatchReactionUpdatedEvent(
|
|
1142
1271
|
chatClient,
|
|
1143
1272
|
reactionToBeUpdated,
|
|
1144
|
-
targetMessage,
|
|
1273
|
+
targetMessage as MessageResponse,
|
|
1145
1274
|
targetChannel.channel,
|
|
1146
1275
|
),
|
|
1147
1276
|
);
|
|
@@ -1163,7 +1292,7 @@ export const Generic = () => {
|
|
|
1163
1292
|
useMockedApis(chatClient, [queryChannelsApi(channels)]);
|
|
1164
1293
|
renderComponent();
|
|
1165
1294
|
act(() => dispatchConnectionChangedEvent(chatClient));
|
|
1166
|
-
await act(async () => await chatClient.
|
|
1295
|
+
await act(async () => await getSyncManager(chatClient).invokeSyncStatusListeners(true));
|
|
1167
1296
|
await waitFor(() => expect(screen.getByTestId('channel-list-view')).toBeTruthy());
|
|
1168
1297
|
|
|
1169
1298
|
const targetChannel = channels[getRandomInt(0, channels.length - 1)];
|
|
@@ -1186,21 +1315,24 @@ export const Generic = () => {
|
|
|
1186
1315
|
];
|
|
1187
1316
|
const messageWithNewReactionBase = {
|
|
1188
1317
|
...targetMessage,
|
|
1189
|
-
latest_reactions: [...targetMessage.latest_reactions],
|
|
1318
|
+
latest_reactions: [...(targetMessage.latest_reactions ?? [])],
|
|
1190
1319
|
};
|
|
1191
|
-
const newLatestReactions = [];
|
|
1320
|
+
const newLatestReactions: ReactionResponse[] = [];
|
|
1192
1321
|
|
|
1193
1322
|
newReactions.forEach((newReaction) => {
|
|
1194
1323
|
newLatestReactions.push(newReaction);
|
|
1195
1324
|
const messageWithNewReaction = {
|
|
1196
1325
|
...messageWithNewReactionBase,
|
|
1197
|
-
latest_reactions: [
|
|
1326
|
+
latest_reactions: [
|
|
1327
|
+
...(messageWithNewReactionBase.latest_reactions ?? []),
|
|
1328
|
+
...newLatestReactions,
|
|
1329
|
+
],
|
|
1198
1330
|
};
|
|
1199
1331
|
act(() =>
|
|
1200
1332
|
dispatchReactionNewEvent(
|
|
1201
1333
|
chatClient,
|
|
1202
1334
|
newReaction,
|
|
1203
|
-
messageWithNewReaction,
|
|
1335
|
+
messageWithNewReaction as MessageResponse,
|
|
1204
1336
|
targetChannel.channel,
|
|
1205
1337
|
),
|
|
1206
1338
|
);
|
|
@@ -1210,7 +1342,7 @@ export const Generic = () => {
|
|
|
1210
1342
|
const reactionsRows = await BetterSqlite.selectFromTable('reactions');
|
|
1211
1343
|
const matchingReactionsRows = reactionsRows.filter(
|
|
1212
1344
|
(r) =>
|
|
1213
|
-
r.messageId === messageWithNewReactionBase.id && r.userId === reactionMember.user
|
|
1345
|
+
r.messageId === messageWithNewReactionBase.id && r.userId === reactionMember.user!.id,
|
|
1214
1346
|
);
|
|
1215
1347
|
|
|
1216
1348
|
expect(matchingReactionsRows.length).toBe(2);
|
|
@@ -1218,7 +1350,7 @@ export const Generic = () => {
|
|
|
1218
1350
|
expect(
|
|
1219
1351
|
matchingReactionsRows.filter(
|
|
1220
1352
|
(reaction) =>
|
|
1221
|
-
reaction.type === newReaction.type && reaction.userId === newReaction.user
|
|
1353
|
+
reaction.type === newReaction.type && reaction.userId === newReaction.user!.id,
|
|
1222
1354
|
).length,
|
|
1223
1355
|
).toBe(1);
|
|
1224
1356
|
});
|
|
@@ -1231,14 +1363,14 @@ export const Generic = () => {
|
|
|
1231
1363
|
});
|
|
1232
1364
|
const messageWithNewReaction = {
|
|
1233
1365
|
...targetMessage,
|
|
1234
|
-
latest_reactions: [...targetMessage.latest_reactions, uniqueReaction],
|
|
1366
|
+
latest_reactions: [...(targetMessage.latest_reactions ?? []), uniqueReaction],
|
|
1235
1367
|
};
|
|
1236
1368
|
|
|
1237
1369
|
act(() =>
|
|
1238
1370
|
dispatchReactionUpdatedEvent(
|
|
1239
1371
|
chatClient,
|
|
1240
1372
|
uniqueReaction,
|
|
1241
|
-
messageWithNewReaction,
|
|
1373
|
+
messageWithNewReaction as MessageResponse,
|
|
1242
1374
|
targetChannel.channel,
|
|
1243
1375
|
),
|
|
1244
1376
|
);
|
|
@@ -1248,7 +1380,7 @@ export const Generic = () => {
|
|
|
1248
1380
|
const matchingReactionsRows = reactionsRows.filter(
|
|
1249
1381
|
(r) =>
|
|
1250
1382
|
r.type === uniqueReaction.type &&
|
|
1251
|
-
r.userId === reactionMember.user
|
|
1383
|
+
r.userId === reactionMember.user!.id &&
|
|
1252
1384
|
r.messageId === messageWithNewReaction.id,
|
|
1253
1385
|
);
|
|
1254
1386
|
|
|
@@ -1260,7 +1392,7 @@ export const Generic = () => {
|
|
|
1260
1392
|
useMockedApis(chatClient, [queryChannelsApi(channels)]);
|
|
1261
1393
|
renderComponent();
|
|
1262
1394
|
act(() => dispatchConnectionChangedEvent(chatClient));
|
|
1263
|
-
await act(async () => await chatClient.
|
|
1395
|
+
await act(async () => await getSyncManager(chatClient).invokeSyncStatusListeners(true));
|
|
1264
1396
|
await waitFor(() => expect(screen.getByTestId('channel-list-view')).toBeTruthy());
|
|
1265
1397
|
|
|
1266
1398
|
const targetChannel = channels[getRandomInt(0, channels.length - 1)];
|
|
@@ -1279,7 +1411,7 @@ export const Generic = () => {
|
|
|
1279
1411
|
// anything impossible given the scenarios is fine
|
|
1280
1412
|
const messageWithNewReaction = {
|
|
1281
1413
|
...targetMessage,
|
|
1282
|
-
latest_reactions: [...targetMessage.latest_reactions, newReaction],
|
|
1414
|
+
latest_reactions: [...(targetMessage.latest_reactions ?? []), newReaction],
|
|
1283
1415
|
reaction_groups: {
|
|
1284
1416
|
...targetMessage.reaction_groups,
|
|
1285
1417
|
[newReaction.type]: {
|
|
@@ -1295,7 +1427,7 @@ export const Generic = () => {
|
|
|
1295
1427
|
dispatchReactionNewEvent(
|
|
1296
1428
|
chatClient,
|
|
1297
1429
|
newReaction,
|
|
1298
|
-
messageWithNewReaction,
|
|
1430
|
+
messageWithNewReaction as MessageResponse,
|
|
1299
1431
|
targetChannel.channel,
|
|
1300
1432
|
),
|
|
1301
1433
|
);
|
|
@@ -1306,7 +1438,7 @@ export const Generic = () => {
|
|
|
1306
1438
|
(m) => m.id === messageWithNewReaction.id,
|
|
1307
1439
|
)[0];
|
|
1308
1440
|
|
|
1309
|
-
const reactionGroups = JSON.parse(messageWithReactionRow.reactionGroups);
|
|
1441
|
+
const reactionGroups = JSON.parse(messageWithReactionRow.reactionGroups as string);
|
|
1310
1442
|
|
|
1311
1443
|
expect(reactionGroups[newReaction.type]?.count).toBe(999);
|
|
1312
1444
|
expect(reactionGroups[newReaction.type]?.sum_scores).toBe(999);
|
|
@@ -1319,7 +1451,7 @@ export const Generic = () => {
|
|
|
1319
1451
|
useMockedApis(chatClient, [queryChannelsApi(channels)]);
|
|
1320
1452
|
renderComponent();
|
|
1321
1453
|
act(() => dispatchConnectionChangedEvent(chatClient));
|
|
1322
|
-
await act(async () => await chatClient.
|
|
1454
|
+
await act(async () => await getSyncManager(chatClient).invokeSyncStatusListeners(true));
|
|
1323
1455
|
await waitFor(() => expect(screen.getByTestId('channel-list-view')).toBeTruthy());
|
|
1324
1456
|
|
|
1325
1457
|
const targetChannel = channels[getRandomInt(0, channels.length - 1)];
|
|
@@ -1336,7 +1468,7 @@ export const Generic = () => {
|
|
|
1336
1468
|
const newDate = new Date().toISOString();
|
|
1337
1469
|
const messageWithNewReaction = {
|
|
1338
1470
|
...targetMessage,
|
|
1339
|
-
latest_reactions: [...targetMessage.latest_reactions, newReaction],
|
|
1471
|
+
latest_reactions: [...(targetMessage.latest_reactions ?? []), newReaction],
|
|
1340
1472
|
reaction_groups: {
|
|
1341
1473
|
...targetMessage.reaction_groups,
|
|
1342
1474
|
[newReaction.type]: {
|
|
@@ -1352,7 +1484,7 @@ export const Generic = () => {
|
|
|
1352
1484
|
dispatchReactionUpdatedEvent(
|
|
1353
1485
|
chatClient,
|
|
1354
1486
|
newReaction,
|
|
1355
|
-
messageWithNewReaction,
|
|
1487
|
+
messageWithNewReaction as MessageResponse,
|
|
1356
1488
|
targetChannel.channel,
|
|
1357
1489
|
),
|
|
1358
1490
|
);
|
|
@@ -1363,7 +1495,7 @@ export const Generic = () => {
|
|
|
1363
1495
|
(m) => m.id === messageWithNewReaction.id,
|
|
1364
1496
|
)[0];
|
|
1365
1497
|
|
|
1366
|
-
const reactionGroups = JSON.parse(messageWithReactionRow.reactionGroups);
|
|
1498
|
+
const reactionGroups = JSON.parse(messageWithReactionRow.reactionGroups as string);
|
|
1367
1499
|
|
|
1368
1500
|
expect(reactionGroups[newReaction.type]?.count).toBe(999);
|
|
1369
1501
|
expect(reactionGroups[newReaction.type]?.sum_scores).toBe(999);
|
|
@@ -1376,7 +1508,7 @@ export const Generic = () => {
|
|
|
1376
1508
|
useMockedApis(chatClient, [queryChannelsApi(channels)]);
|
|
1377
1509
|
renderComponent();
|
|
1378
1510
|
act(() => dispatchConnectionChangedEvent(chatClient));
|
|
1379
|
-
await act(async () => await chatClient.
|
|
1511
|
+
await act(async () => await getSyncManager(chatClient).invokeSyncStatusListeners(true));
|
|
1380
1512
|
await waitFor(() => expect(screen.getByTestId('channel-list-view')).toBeTruthy());
|
|
1381
1513
|
|
|
1382
1514
|
const targetChannel = channels[getRandomInt(0, channels.length - 1)];
|
|
@@ -1393,7 +1525,7 @@ export const Generic = () => {
|
|
|
1393
1525
|
const newDate = new Date().toISOString();
|
|
1394
1526
|
const messageWithNewReaction = {
|
|
1395
1527
|
...targetMessage,
|
|
1396
|
-
latest_reactions: [...targetMessage.latest_reactions, newReaction],
|
|
1528
|
+
latest_reactions: [...(targetMessage.latest_reactions ?? []), newReaction],
|
|
1397
1529
|
reaction_groups: {
|
|
1398
1530
|
...targetMessage.reaction_groups,
|
|
1399
1531
|
[newReaction.type]: {
|
|
@@ -1409,7 +1541,7 @@ export const Generic = () => {
|
|
|
1409
1541
|
dispatchReactionDeletedEvent(
|
|
1410
1542
|
chatClient,
|
|
1411
1543
|
newReaction,
|
|
1412
|
-
messageWithNewReaction,
|
|
1544
|
+
messageWithNewReaction as MessageResponse,
|
|
1413
1545
|
targetChannel.channel,
|
|
1414
1546
|
),
|
|
1415
1547
|
);
|
|
@@ -1420,7 +1552,7 @@ export const Generic = () => {
|
|
|
1420
1552
|
(m) => m.id === messageWithNewReaction.id,
|
|
1421
1553
|
)[0];
|
|
1422
1554
|
|
|
1423
|
-
const reactionGroups = JSON.parse(messageWithReactionRow.reactionGroups);
|
|
1555
|
+
const reactionGroups = JSON.parse(messageWithReactionRow.reactionGroups as string);
|
|
1424
1556
|
|
|
1425
1557
|
expect(reactionGroups[newReaction.type]?.count).toBe(999);
|
|
1426
1558
|
expect(reactionGroups[newReaction.type]?.sum_scores).toBe(999);
|
|
@@ -1434,7 +1566,7 @@ export const Generic = () => {
|
|
|
1434
1566
|
renderComponent();
|
|
1435
1567
|
|
|
1436
1568
|
act(() => dispatchConnectionChangedEvent(chatClient));
|
|
1437
|
-
await act(async () => await chatClient.
|
|
1569
|
+
await act(async () => await getSyncManager(chatClient).invokeSyncStatusListeners(true));
|
|
1438
1570
|
await waitFor(() => expect(screen.getByTestId('channel-list-view')).toBeTruthy());
|
|
1439
1571
|
const targetChannel = channels[getRandomInt(0, channels.length - 1)];
|
|
1440
1572
|
|
|
@@ -1462,7 +1594,7 @@ export const Generic = () => {
|
|
|
1462
1594
|
|
|
1463
1595
|
renderComponent();
|
|
1464
1596
|
act(() => dispatchConnectionChangedEvent(chatClient));
|
|
1465
|
-
await act(async () => await chatClient.
|
|
1597
|
+
await act(async () => await getSyncManager(chatClient).invokeSyncStatusListeners(true));
|
|
1466
1598
|
await waitFor(() => expect(screen.getByTestId('channel-list-view')).toBeTruthy());
|
|
1467
1599
|
|
|
1468
1600
|
const targetChannel = channels[getRandomInt(0, channels.length - 1)];
|
|
@@ -1490,7 +1622,7 @@ export const Generic = () => {
|
|
|
1490
1622
|
|
|
1491
1623
|
renderComponent();
|
|
1492
1624
|
act(() => dispatchConnectionChangedEvent(chatClient));
|
|
1493
|
-
await act(async () => await chatClient.
|
|
1625
|
+
await act(async () => await getSyncManager(chatClient).invokeSyncStatusListeners(true));
|
|
1494
1626
|
await waitFor(() => expect(screen.getByTestId('channel-list-view')).toBeTruthy());
|
|
1495
1627
|
|
|
1496
1628
|
const targetChannel = channels[getRandomInt(0, channels.length - 1)];
|
|
@@ -1517,7 +1649,7 @@ export const Generic = () => {
|
|
|
1517
1649
|
|
|
1518
1650
|
renderComponent();
|
|
1519
1651
|
act(() => dispatchConnectionChangedEvent(chatClient));
|
|
1520
|
-
await act(async () => await chatClient.
|
|
1652
|
+
await act(async () => await getSyncManager(chatClient).invokeSyncStatusListeners(true));
|
|
1521
1653
|
await waitFor(() => expect(screen.getByTestId('channel-list-view')).toBeTruthy());
|
|
1522
1654
|
|
|
1523
1655
|
const targetChannel = channels[getRandomInt(0, channels.length - 1)];
|
|
@@ -1532,7 +1664,7 @@ export const Generic = () => {
|
|
|
1532
1664
|
|
|
1533
1665
|
expect(matchingChannelsRows.length).toBe(1);
|
|
1534
1666
|
|
|
1535
|
-
const extraData = JSON.parse(matchingChannelsRows[0].extraData);
|
|
1667
|
+
const extraData = JSON.parse(matchingChannelsRows[0].extraData as string);
|
|
1536
1668
|
|
|
1537
1669
|
expect(extraData.name).toBe(targetChannel.channel.name);
|
|
1538
1670
|
});
|
|
@@ -1543,7 +1675,7 @@ export const Generic = () => {
|
|
|
1543
1675
|
|
|
1544
1676
|
renderComponent();
|
|
1545
1677
|
act(() => dispatchConnectionChangedEvent(chatClient));
|
|
1546
|
-
await act(async () => await chatClient.
|
|
1678
|
+
await act(async () => await getSyncManager(chatClient).invokeSyncStatusListeners(true));
|
|
1547
1679
|
await waitFor(() => expect(screen.getByTestId('channel-list-view')).toBeTruthy());
|
|
1548
1680
|
const targetChannel = channels[getRandomInt(0, channels.length - 1)];
|
|
1549
1681
|
const targetMember = targetChannel.members[getRandomInt(0, targetChannel.members.length - 1)];
|
|
@@ -1551,11 +1683,19 @@ export const Generic = () => {
|
|
|
1551
1683
|
const readTimestamp = new Date().toISOString();
|
|
1552
1684
|
|
|
1553
1685
|
act(() => {
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1686
|
+
// `last_read` is not on `Event` (the real field is `last_read_at`), but the test fixture
|
|
1687
|
+
// has historically passed `last_read`. Preserve the runtime payload shape exactly and
|
|
1688
|
+
// widen the type at the call site.
|
|
1689
|
+
dispatchMessageReadEvent(
|
|
1690
|
+
chatClient,
|
|
1691
|
+
targetMember.user as UserResponse,
|
|
1692
|
+
targetChannel.channel,
|
|
1693
|
+
{
|
|
1694
|
+
first_unread_message_id: '123',
|
|
1695
|
+
last_read: readTimestamp,
|
|
1696
|
+
last_read_message_id: '321',
|
|
1697
|
+
} as unknown as Partial<Event>,
|
|
1698
|
+
);
|
|
1559
1699
|
});
|
|
1560
1700
|
|
|
1561
1701
|
await waitFor(async () => {
|
|
@@ -1571,7 +1711,8 @@ export const Generic = () => {
|
|
|
1571
1711
|
// expect(matchingReadRows[0].firstUnreadMessageId).toBe('123');
|
|
1572
1712
|
expect(
|
|
1573
1713
|
Math.abs(
|
|
1574
|
-
new Date(matchingReadRows[0].lastRead).getTime() -
|
|
1714
|
+
new Date(matchingReadRows[0].lastRead as string).getTime() -
|
|
1715
|
+
new Date(readTimestamp).getTime(),
|
|
1575
1716
|
),
|
|
1576
1717
|
).toBeLessThanOrEqual(1);
|
|
1577
1718
|
});
|
|
@@ -1582,12 +1723,12 @@ export const Generic = () => {
|
|
|
1582
1723
|
|
|
1583
1724
|
renderComponent();
|
|
1584
1725
|
act(() => dispatchConnectionChangedEvent(chatClient));
|
|
1585
|
-
await act(async () => await chatClient.
|
|
1726
|
+
await act(async () => await getSyncManager(chatClient).invokeSyncStatusListeners(true));
|
|
1586
1727
|
await waitFor(() => expect(screen.getByTestId('channel-list-view')).toBeTruthy());
|
|
1587
1728
|
const targetChannel = channels[getRandomInt(0, channels.length - 1)];
|
|
1588
1729
|
const targetMember = targetChannel.members[getRandomInt(0, targetChannel.members.length - 1)];
|
|
1589
1730
|
|
|
1590
|
-
chatClient.userID = targetMember.user
|
|
1731
|
+
chatClient.userID = targetMember.user!.id;
|
|
1591
1732
|
chatClient.user = targetMember.user;
|
|
1592
1733
|
|
|
1593
1734
|
const readTimestamp = new Date().toISOString();
|
|
@@ -1596,12 +1737,13 @@ export const Generic = () => {
|
|
|
1596
1737
|
dispatchNotificationMarkUnread(
|
|
1597
1738
|
chatClient,
|
|
1598
1739
|
targetChannel.channel,
|
|
1740
|
+
// `last_read` is not on `Event`; see note above.
|
|
1599
1741
|
{
|
|
1600
1742
|
first_unread_message_id: '123',
|
|
1601
1743
|
last_read: readTimestamp,
|
|
1602
1744
|
last_read_message_id: '321',
|
|
1603
1745
|
unread_messages: 5,
|
|
1604
|
-
}
|
|
1746
|
+
} as unknown as Partial<Event>,
|
|
1605
1747
|
targetMember.user,
|
|
1606
1748
|
);
|
|
1607
1749
|
});
|
|
@@ -1619,7 +1761,8 @@ export const Generic = () => {
|
|
|
1619
1761
|
// expect(matchingReadRows[0].firstUnreadMessageId).toBe('123');
|
|
1620
1762
|
expect(
|
|
1621
1763
|
Math.abs(
|
|
1622
|
-
new Date(matchingReadRows[0].lastRead).getTime() -
|
|
1764
|
+
new Date(matchingReadRows[0].lastRead as string).getTime() -
|
|
1765
|
+
new Date(readTimestamp).getTime(),
|
|
1623
1766
|
),
|
|
1624
1767
|
).toBeLessThanOrEqual(1);
|
|
1625
1768
|
});
|