diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/client/FeedsClientImpl.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/client/FeedsClientImpl.kt index f5ad1e5c6..2a088c8f6 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/client/FeedsClientImpl.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/client/FeedsClientImpl.kt @@ -196,7 +196,8 @@ internal class FeedsClientImpl( commentsRepository = commentsRepository, feedsRepository = feedsRepository, pollsRepository = pollsRepository, - subscriptionManager = feedsEventsSubscriptionManager, + socketSubscriptionManager = feedsEventsSubscriptionManager, + subscriptionManager = stateEventsSubscriptionManager, feedWatchHandler = feedWatchHandler, ) @@ -211,7 +212,7 @@ internal class FeedsClientImpl( FollowListImpl( query = query, feedsRepository = feedsRepository, - subscriptionManager = feedsEventsSubscriptionManager, + subscriptionManager = stateEventsSubscriptionManager, ) override fun activity(activityId: String, fid: FeedId): Activity = @@ -243,7 +244,7 @@ internal class FeedsClientImpl( query = query, currentUserId = user.id, activitiesRepository = activitiesRepository, - subscriptionManager = feedsEventsSubscriptionManager, + subscriptionManager = stateEventsSubscriptionManager, ) override fun activityReactionList(query: ActivityReactionsQuery): ActivityReactionList = @@ -303,7 +304,7 @@ internal class FeedsClientImpl( query = query, currentUserId = user.id, commentsRepository = commentsRepository, - subscriptionManager = feedsEventsSubscriptionManager, + subscriptionManager = stateEventsSubscriptionManager, ) override fun commentReactionList(query: CommentReactionsQuery): CommentReactionList = @@ -317,21 +318,21 @@ internal class FeedsClientImpl( MemberListImpl( query = query, feedsRepository = feedsRepository, - subscriptionManager = feedsEventsSubscriptionManager, + subscriptionManager = stateEventsSubscriptionManager, ) override fun pollVoteList(query: PollVotesQuery): PollVoteList = PollVoteListImpl( query = query, repository = pollsRepository, - subscriptionManager = feedsEventsSubscriptionManager, + subscriptionManager = stateEventsSubscriptionManager, ) override fun pollList(query: PollsQuery): PollList = PollListImpl( query = query, pollsRepository = pollsRepository, - subscriptionManager = feedsEventsSubscriptionManager, + subscriptionManager = stateEventsSubscriptionManager, ) override fun moderationConfigList(query: ModerationConfigsQuery): ModerationConfigList = diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/ActivityListImpl.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/ActivityListImpl.kt index bb92e5ed3..11098c9f3 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/ActivityListImpl.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/ActivityListImpl.kt @@ -23,7 +23,7 @@ import io.getstream.feeds.android.client.api.state.ActivityListState import io.getstream.feeds.android.client.api.state.query.ActivitiesQuery import io.getstream.feeds.android.client.internal.repository.ActivitiesRepository import io.getstream.feeds.android.client.internal.state.event.handler.ActivityListEventHandler -import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener +import io.getstream.feeds.android.client.internal.subscribe.StateUpdateEventListener /** * A paginated list of activities that supports real-time updates and filtering. @@ -42,7 +42,7 @@ internal class ActivityListImpl( override val query: ActivitiesQuery, private val currentUserId: String, private val activitiesRepository: ActivitiesRepository, - private val subscriptionManager: StreamSubscriptionManager, + private val subscriptionManager: StreamSubscriptionManager, ) : ActivityList { private val _state: ActivityListStateImpl = ActivityListStateImpl(query, currentUserId) diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/CommentReplyListImpl.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/CommentReplyListImpl.kt index b69e724c5..db8bde6c7 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/CommentReplyListImpl.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/CommentReplyListImpl.kt @@ -22,7 +22,7 @@ import io.getstream.feeds.android.client.api.state.CommentReplyListState import io.getstream.feeds.android.client.api.state.query.CommentRepliesQuery import io.getstream.feeds.android.client.internal.repository.CommentsRepository import io.getstream.feeds.android.client.internal.state.event.handler.CommentReplyListEventHandler -import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener +import io.getstream.feeds.android.client.internal.subscribe.StateUpdateEventListener /** * A class representing a paginated list of replies for a specific comment. @@ -41,7 +41,7 @@ internal class CommentReplyListImpl( override val query: CommentRepliesQuery, private val currentUserId: String, private val commentsRepository: CommentsRepository, - private val subscriptionManager: StreamSubscriptionManager, + private val subscriptionManager: StreamSubscriptionManager, ) : CommentReplyList { private val _state: CommentReplyListStateImpl = CommentReplyListStateImpl(query, currentUserId) diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/FeedImpl.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/FeedImpl.kt index 872873e95..55fc12014 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/FeedImpl.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/FeedImpl.kt @@ -40,6 +40,7 @@ import io.getstream.feeds.android.client.internal.repository.FeedsRepository import io.getstream.feeds.android.client.internal.repository.PollsRepository import io.getstream.feeds.android.client.internal.state.event.handler.FeedEventHandler import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener +import io.getstream.feeds.android.client.internal.subscribe.StateUpdateEventListener import io.getstream.feeds.android.client.internal.utils.flatMap import io.getstream.feeds.android.network.models.AcceptFollowRequest import io.getstream.feeds.android.network.models.AddActivityRequest @@ -81,7 +82,8 @@ import io.getstream.feeds.android.network.models.UpdateFeedRequest * @property commentsRepository The [CommentsRepository] used to manage comments in the feed. * @property feedsRepository The [FeedsRepository] used to manage feed data and operations. * @property pollsRepository The [PollsRepository] used to manage polls in the feed. - * @property subscriptionManager The [StreamSubscriptionManager] used to manage WebSocket + * @property subscriptionManager The manager for state update subscriptions. + * @param socketSubscriptionManager The [StreamSubscriptionManager] used to manage WebSocket * subscriptions for feed events. */ internal class FeedImpl( @@ -92,7 +94,8 @@ internal class FeedImpl( private val commentsRepository: CommentsRepository, private val feedsRepository: FeedsRepository, private val pollsRepository: PollsRepository, - private val subscriptionManager: StreamSubscriptionManager, + private val subscriptionManager: StreamSubscriptionManager, + socketSubscriptionManager: StreamSubscriptionManager, private val feedWatchHandler: FeedWatchHandler, ) : Feed { @@ -113,7 +116,7 @@ internal class FeedImpl( private val eventHandler = FeedEventHandler(fid = fid, state = _state) init { - subscriptionManager.subscribe(eventHandler) + socketSubscriptionManager.subscribe(eventHandler) } private val group: String diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/FollowListImpl.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/FollowListImpl.kt index 944a98f3c..bdf658316 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/FollowListImpl.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/FollowListImpl.kt @@ -24,7 +24,7 @@ import io.getstream.feeds.android.client.api.state.query.FollowsQuery import io.getstream.feeds.android.client.api.state.query.toRequest import io.getstream.feeds.android.client.internal.repository.FeedsRepository import io.getstream.feeds.android.client.internal.state.event.handler.FollowListEventHandler -import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener +import io.getstream.feeds.android.client.internal.subscribe.StateUpdateEventListener /** * A class that manages a paginated list of follows. @@ -40,7 +40,7 @@ import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener internal class FollowListImpl( override val query: FollowsQuery, private val feedsRepository: FeedsRepository, - private val subscriptionManager: StreamSubscriptionManager, + private val subscriptionManager: StreamSubscriptionManager, ) : FollowList { private val _state: FollowListStateImpl = FollowListStateImpl(query) diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/MemberListImpl.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/MemberListImpl.kt index cc1bc0f28..e635f1983 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/MemberListImpl.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/MemberListImpl.kt @@ -24,7 +24,7 @@ import io.getstream.feeds.android.client.api.state.query.MembersQuery import io.getstream.feeds.android.client.api.state.query.toRequest import io.getstream.feeds.android.client.internal.repository.FeedsRepository import io.getstream.feeds.android.client.internal.state.event.handler.MemberListEventHandler -import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener +import io.getstream.feeds.android.client.internal.subscribe.StateUpdateEventListener /** * A class that manages a paginated list of feed members. @@ -40,7 +40,7 @@ import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener internal class MemberListImpl( override val query: MembersQuery, private val feedsRepository: FeedsRepository, - private val subscriptionManager: StreamSubscriptionManager, + private val subscriptionManager: StreamSubscriptionManager, ) : MemberList { private val _state: MemberListStateImpl = MemberListStateImpl(query) diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/PollListImpl.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/PollListImpl.kt index 9bfa1e466..22fe8d005 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/PollListImpl.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/PollListImpl.kt @@ -23,7 +23,7 @@ import io.getstream.feeds.android.client.api.state.PollListState import io.getstream.feeds.android.client.api.state.query.PollsQuery import io.getstream.feeds.android.client.internal.repository.PollsRepository import io.getstream.feeds.android.client.internal.state.event.handler.PollListEventHandler -import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener +import io.getstream.feeds.android.client.internal.subscribe.StateUpdateEventListener /** * Implementation of [PollList] that manages the state of a list of polls. @@ -41,7 +41,7 @@ import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener internal class PollListImpl( override val query: PollsQuery, private val pollsRepository: PollsRepository, - private val subscriptionManager: StreamSubscriptionManager, + private val subscriptionManager: StreamSubscriptionManager, private val _state: PollListStateImpl = PollListStateImpl(query), ) : PollList { diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/PollVoteListImpl.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/PollVoteListImpl.kt index 63d6a1926..0131d8932 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/PollVoteListImpl.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/PollVoteListImpl.kt @@ -23,7 +23,7 @@ import io.getstream.feeds.android.client.api.state.PollVoteListState import io.getstream.feeds.android.client.api.state.query.PollVotesQuery import io.getstream.feeds.android.client.internal.repository.PollsRepository import io.getstream.feeds.android.client.internal.state.event.handler.PollVoteListEventHandler -import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener +import io.getstream.feeds.android.client.internal.subscribe.StateUpdateEventListener /** * An implementation of [PollVoteList] that manages the state and queries for poll votes. @@ -41,7 +41,7 @@ import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener internal class PollVoteListImpl( override val query: PollVotesQuery, private val repository: PollsRepository, - private val subscriptionManager: StreamSubscriptionManager, + private val subscriptionManager: StreamSubscriptionManager, private val _state: PollVoteListStateImpl = PollVoteListStateImpl(query), ) : PollVoteList { diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/StateUpdateEvent.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/StateUpdateEvent.kt index d90771d90..653ec0fc5 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/StateUpdateEvent.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/StateUpdateEvent.kt @@ -15,14 +15,21 @@ */ package io.getstream.feeds.android.client.internal.state.event +import io.getstream.feeds.android.client.api.model.ActivityData import io.getstream.feeds.android.client.api.model.BookmarkData import io.getstream.feeds.android.client.api.model.BookmarkFolderData import io.getstream.feeds.android.client.api.model.CommentData import io.getstream.feeds.android.client.api.model.FeedData +import io.getstream.feeds.android.client.api.model.FeedMemberData import io.getstream.feeds.android.client.api.model.FeedsReactionData +import io.getstream.feeds.android.client.api.model.FollowData +import io.getstream.feeds.android.client.api.model.PollData +import io.getstream.feeds.android.client.api.model.PollVoteData import io.getstream.feeds.android.client.api.model.toModel +import io.getstream.feeds.android.network.models.ActivityDeletedEvent import io.getstream.feeds.android.network.models.ActivityReactionAddedEvent import io.getstream.feeds.android.network.models.ActivityReactionDeletedEvent +import io.getstream.feeds.android.network.models.BookmarkAddedEvent import io.getstream.feeds.android.network.models.BookmarkDeletedEvent import io.getstream.feeds.android.network.models.BookmarkFolderDeletedEvent import io.getstream.feeds.android.network.models.BookmarkFolderUpdatedEvent @@ -33,7 +40,18 @@ import io.getstream.feeds.android.network.models.CommentReactionAddedEvent import io.getstream.feeds.android.network.models.CommentReactionDeletedEvent import io.getstream.feeds.android.network.models.CommentUpdatedEvent import io.getstream.feeds.android.network.models.FeedDeletedEvent +import io.getstream.feeds.android.network.models.FeedMemberAddedEvent +import io.getstream.feeds.android.network.models.FeedMemberRemovedEvent +import io.getstream.feeds.android.network.models.FeedMemberUpdatedEvent import io.getstream.feeds.android.network.models.FeedUpdatedEvent +import io.getstream.feeds.android.network.models.FollowDeletedEvent +import io.getstream.feeds.android.network.models.FollowUpdatedEvent +import io.getstream.feeds.android.network.models.PollClosedFeedEvent +import io.getstream.feeds.android.network.models.PollDeletedFeedEvent +import io.getstream.feeds.android.network.models.PollUpdatedFeedEvent +import io.getstream.feeds.android.network.models.PollVoteCastedFeedEvent +import io.getstream.feeds.android.network.models.PollVoteChangedFeedEvent +import io.getstream.feeds.android.network.models.PollVoteRemovedFeedEvent import io.getstream.feeds.android.network.models.WSEvent /** @@ -42,10 +60,14 @@ import io.getstream.feeds.android.network.models.WSEvent */ internal sealed interface StateUpdateEvent { + data class ActivityDeleted(val activity: ActivityData) : StateUpdateEvent + data class ActivityReactionAdded(val reaction: FeedsReactionData) : StateUpdateEvent data class ActivityReactionDeleted(val reaction: FeedsReactionData) : StateUpdateEvent + data class BookmarkAdded(val bookmark: BookmarkData) : StateUpdateEvent + data class BookmarkDeleted(val bookmark: BookmarkData) : StateUpdateEvent data class BookmarkUpdated(val bookmark: BookmarkData) : StateUpdateEvent @@ -69,15 +91,44 @@ internal sealed interface StateUpdateEvent { data class FeedUpdated(val feed: FeedData) : StateUpdateEvent data class FeedDeleted(val fid: String) : StateUpdateEvent + + data class FeedMemberAdded(val fid: String, val member: FeedMemberData) : StateUpdateEvent + + data class FeedMemberRemoved(val fid: String, val memberId: String) : StateUpdateEvent + + data class FeedMemberUpdated(val fid: String, val member: FeedMemberData) : StateUpdateEvent + + data class FollowUpdated(val follow: FollowData) : StateUpdateEvent + + data class FollowDeleted(val follow: FollowData) : StateUpdateEvent + + data class PollClosed(val fid: String, val poll: PollData) : StateUpdateEvent + + data class PollDeleted(val fid: String, val pollId: String) : StateUpdateEvent + + data class PollUpdated(val fid: String, val poll: PollData) : StateUpdateEvent + + data class PollVoteCasted(val fid: String, val pollId: String, val vote: PollVoteData) : + StateUpdateEvent + + data class PollVoteChanged(val fid: String, val pollId: String, val vote: PollVoteData) : + StateUpdateEvent + + data class PollVoteRemoved(val fid: String, val pollId: String, val vote: PollVoteData) : + StateUpdateEvent } internal fun WSEvent.toModel(): StateUpdateEvent? = when (this) { + is ActivityDeletedEvent -> StateUpdateEvent.ActivityDeleted(activity.toModel()) + is ActivityReactionAddedEvent -> StateUpdateEvent.ActivityReactionAdded(reaction.toModel()) is ActivityReactionDeletedEvent -> StateUpdateEvent.ActivityReactionDeleted(reaction.toModel()) + is BookmarkAddedEvent -> StateUpdateEvent.BookmarkAdded(bookmark.toModel()) + is BookmarkDeletedEvent -> StateUpdateEvent.BookmarkDeleted(bookmark.toModel()) is BookmarkUpdatedEvent -> StateUpdateEvent.BookmarkUpdated(bookmark.toModel()) @@ -103,5 +154,30 @@ internal fun WSEvent.toModel(): StateUpdateEvent? = is FeedDeletedEvent -> StateUpdateEvent.FeedDeleted(fid) + is FollowUpdatedEvent -> StateUpdateEvent.FollowUpdated(follow.toModel()) + + is FollowDeletedEvent -> StateUpdateEvent.FollowDeleted(follow.toModel()) + + is FeedMemberAddedEvent -> StateUpdateEvent.FeedMemberAdded(fid, member.toModel()) + + is FeedMemberRemovedEvent -> StateUpdateEvent.FeedMemberRemoved(fid, memberId) + + is FeedMemberUpdatedEvent -> StateUpdateEvent.FeedMemberUpdated(fid, member.toModel()) + + is PollClosedFeedEvent -> StateUpdateEvent.PollClosed(fid, poll.toModel()) + + is PollDeletedFeedEvent -> StateUpdateEvent.PollDeleted(fid, poll.id) + + is PollUpdatedFeedEvent -> StateUpdateEvent.PollUpdated(fid, poll.toModel()) + + is PollVoteCastedFeedEvent -> + StateUpdateEvent.PollVoteCasted(fid, poll.id, pollVote.toModel()) + + is PollVoteChangedFeedEvent -> + StateUpdateEvent.PollVoteChanged(fid, poll.id, pollVote.toModel()) + + is PollVoteRemovedFeedEvent -> + StateUpdateEvent.PollVoteRemoved(fid, poll.id, pollVote.toModel()) + else -> null } diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/ActivityListEventHandler.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/ActivityListEventHandler.kt index 14eeaa1db..c29706e06 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/ActivityListEventHandler.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/ActivityListEventHandler.kt @@ -15,30 +15,22 @@ */ package io.getstream.feeds.android.client.internal.state.event.handler -import io.getstream.feeds.android.client.api.model.toModel import io.getstream.feeds.android.client.internal.state.ActivityListStateUpdates -import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener -import io.getstream.feeds.android.network.models.ActivityDeletedEvent -import io.getstream.feeds.android.network.models.ActivityReactionAddedEvent -import io.getstream.feeds.android.network.models.ActivityReactionDeletedEvent -import io.getstream.feeds.android.network.models.BookmarkAddedEvent -import io.getstream.feeds.android.network.models.BookmarkDeletedEvent -import io.getstream.feeds.android.network.models.CommentAddedEvent -import io.getstream.feeds.android.network.models.CommentDeletedEvent -import io.getstream.feeds.android.network.models.WSEvent +import io.getstream.feeds.android.client.internal.state.event.StateUpdateEvent +import io.getstream.feeds.android.client.internal.subscribe.StateUpdateEventListener internal class ActivityListEventHandler(private val state: ActivityListStateUpdates) : - FeedsEventListener { + StateUpdateEventListener { - override fun onEvent(event: WSEvent) { + override fun onEvent(event: StateUpdateEvent) { when (event) { - is ActivityDeletedEvent -> state.onActivityRemoved(event.activity.toModel()) - is ActivityReactionAddedEvent -> state.onReactionAdded(event.reaction.toModel()) - is ActivityReactionDeletedEvent -> state.onReactionRemoved(event.reaction.toModel()) - is BookmarkAddedEvent -> state.onBookmarkAdded(event.bookmark.toModel()) - is BookmarkDeletedEvent -> state.onBookmarkRemoved(event.bookmark.toModel()) - is CommentAddedEvent -> state.onCommentAdded(event.comment.toModel()) - is CommentDeletedEvent -> state.onCommentRemoved(event.comment.toModel()) + is StateUpdateEvent.ActivityDeleted -> state.onActivityRemoved(event.activity) + is StateUpdateEvent.ActivityReactionAdded -> state.onReactionAdded(event.reaction) + is StateUpdateEvent.ActivityReactionDeleted -> state.onReactionRemoved(event.reaction) + is StateUpdateEvent.BookmarkAdded -> state.onBookmarkAdded(event.bookmark) + is StateUpdateEvent.BookmarkDeleted -> state.onBookmarkRemoved(event.bookmark) + is StateUpdateEvent.CommentAdded -> state.onCommentAdded(event.comment) + is StateUpdateEvent.CommentDeleted -> state.onCommentRemoved(event.comment) else -> { // No action needed for other event types } diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/CommentReplyListEventHandler.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/CommentReplyListEventHandler.kt index f6a1739ee..f52b3e42c 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/CommentReplyListEventHandler.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/CommentReplyListEventHandler.kt @@ -16,36 +16,32 @@ package io.getstream.feeds.android.client.internal.state.event.handler import io.getstream.feeds.android.client.api.model.ThreadedCommentData -import io.getstream.feeds.android.client.api.model.toModel import io.getstream.feeds.android.client.internal.state.CommentReplyListStateUpdates -import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener -import io.getstream.feeds.android.network.models.CommentAddedEvent -import io.getstream.feeds.android.network.models.CommentDeletedEvent -import io.getstream.feeds.android.network.models.CommentReactionAddedEvent -import io.getstream.feeds.android.network.models.CommentReactionDeletedEvent -import io.getstream.feeds.android.network.models.CommentUpdatedEvent -import io.getstream.feeds.android.network.models.WSEvent +import io.getstream.feeds.android.client.internal.state.event.StateUpdateEvent +import io.getstream.feeds.android.client.internal.subscribe.StateUpdateEventListener internal class CommentReplyListEventHandler(private val state: CommentReplyListStateUpdates) : - FeedsEventListener { + StateUpdateEventListener { - override fun onEvent(event: WSEvent) { + override fun onEvent(event: StateUpdateEvent) { when (event) { - is CommentAddedEvent -> { - state.onCommentAdded(ThreadedCommentData(event.comment.toModel())) + is StateUpdateEvent.CommentAdded -> { + state.onCommentAdded(ThreadedCommentData(event.comment)) } - is CommentDeletedEvent -> { + is StateUpdateEvent.CommentDeleted -> { state.onCommentRemoved(event.comment.id) } - is CommentUpdatedEvent -> { - state.onCommentUpdated(event.comment.toModel()) + is StateUpdateEvent.CommentUpdated -> { + state.onCommentUpdated(event.comment) } - is CommentReactionAddedEvent -> { - state.onCommentReactionAdded(event.comment.id, event.reaction.toModel()) + is StateUpdateEvent.CommentReactionAdded -> { + state.onCommentReactionAdded(event.comment.id, event.reaction) } - is CommentReactionDeletedEvent -> { - state.onCommentReactionRemoved(event.comment.id, event.reaction.toModel()) + is StateUpdateEvent.CommentReactionDeleted -> { + state.onCommentReactionRemoved(event.comment.id, event.reaction) } + + else -> {} } } } diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/FollowListEventHandler.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/FollowListEventHandler.kt index 7c88212c1..b0496f590 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/FollowListEventHandler.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/FollowListEventHandler.kt @@ -15,25 +15,24 @@ */ package io.getstream.feeds.android.client.internal.state.event.handler -import io.getstream.feeds.android.client.api.model.toModel import io.getstream.feeds.android.client.internal.state.FollowListStateUpdates -import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener -import io.getstream.feeds.android.network.models.FollowDeletedEvent -import io.getstream.feeds.android.network.models.FollowUpdatedEvent -import io.getstream.feeds.android.network.models.WSEvent +import io.getstream.feeds.android.client.internal.state.event.StateUpdateEvent +import io.getstream.feeds.android.client.internal.subscribe.StateUpdateEventListener internal class FollowListEventHandler(private val state: FollowListStateUpdates) : - FeedsEventListener { + StateUpdateEventListener { - override fun onEvent(event: WSEvent) { + override fun onEvent(event: StateUpdateEvent) { when (event) { - is FollowUpdatedEvent -> { - state.onFollowUpdated(event.follow.toModel()) + is StateUpdateEvent.FollowUpdated -> { + state.onFollowUpdated(event.follow) } - is FollowDeletedEvent -> { - state.onFollowRemoved(event.follow.toModel()) + is StateUpdateEvent.FollowDeleted -> { + state.onFollowRemoved(event.follow) } + + else -> {} } } } diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/MemberListEventHandler.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/MemberListEventHandler.kt index b657f487d..b21d9cecf 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/MemberListEventHandler.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/MemberListEventHandler.kt @@ -16,37 +16,35 @@ package io.getstream.feeds.android.client.internal.state.event.handler import io.getstream.feeds.android.client.api.model.FeedId -import io.getstream.feeds.android.client.api.model.toModel import io.getstream.feeds.android.client.internal.state.MemberListStateUpdates -import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener -import io.getstream.feeds.android.network.models.FeedMemberAddedEvent -import io.getstream.feeds.android.network.models.FeedMemberRemovedEvent -import io.getstream.feeds.android.network.models.FeedMemberUpdatedEvent -import io.getstream.feeds.android.network.models.WSEvent +import io.getstream.feeds.android.client.internal.state.event.StateUpdateEvent +import io.getstream.feeds.android.client.internal.subscribe.StateUpdateEventListener internal class MemberListEventHandler( private val fid: FeedId, private val state: MemberListStateUpdates, -) : FeedsEventListener { - override fun onEvent(event: WSEvent) { +) : StateUpdateEventListener { + override fun onEvent(event: StateUpdateEvent) { when (event) { - is FeedMemberAddedEvent -> { + is StateUpdateEvent.FeedMemberAdded -> { if (event.fid == fid.rawValue) { - state.onMemberAdded(event.member.toModel()) + state.onMemberAdded(event.member) } } - is FeedMemberRemovedEvent -> { + is StateUpdateEvent.FeedMemberRemoved -> { if (event.fid == fid.rawValue) { state.onMemberRemoved(event.memberId) } } - is FeedMemberUpdatedEvent -> { + is StateUpdateEvent.FeedMemberUpdated -> { if (event.fid == fid.rawValue) { - state.onMemberUpdated(event.member.toModel()) + state.onMemberUpdated(event.member) } } + + else -> {} } } } diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/PollListEventHandler.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/PollListEventHandler.kt index 0da9ebeb3..eaaf2f499 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/PollListEventHandler.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/PollListEventHandler.kt @@ -15,24 +15,25 @@ */ package io.getstream.feeds.android.client.internal.state.event.handler -import io.getstream.feeds.android.client.api.model.toModel import io.getstream.feeds.android.client.internal.state.PollListStateUpdates -import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener -import io.getstream.feeds.android.network.models.PollUpdatedFeedEvent -import io.getstream.feeds.android.network.models.WSEvent +import io.getstream.feeds.android.client.internal.state.event.StateUpdateEvent +import io.getstream.feeds.android.client.internal.subscribe.StateUpdateEventListener /** * Handles events related to poll updates in the poll list state. * * @property state The instance that manages updates to the poll list state. */ -internal class PollListEventHandler(private val state: PollListStateUpdates) : FeedsEventListener { +internal class PollListEventHandler(private val state: PollListStateUpdates) : + StateUpdateEventListener { - override fun onEvent(event: WSEvent) { + override fun onEvent(event: StateUpdateEvent) { when (event) { - is PollUpdatedFeedEvent -> { - state.onPollUpdated(event.poll.toModel()) + is StateUpdateEvent.PollUpdated -> { + state.onPollUpdated(event.poll) } + + else -> {} } } } diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/PollVoteListEventHandler.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/PollVoteListEventHandler.kt index ab3573b74..a97d31fc4 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/PollVoteListEventHandler.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/PollVoteListEventHandler.kt @@ -15,13 +15,9 @@ */ package io.getstream.feeds.android.client.internal.state.event.handler -import io.getstream.feeds.android.client.api.model.toModel import io.getstream.feeds.android.client.internal.state.PollVoteListStateUpdates -import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener -import io.getstream.feeds.android.network.models.PollVoteCastedFeedEvent -import io.getstream.feeds.android.network.models.PollVoteChangedFeedEvent -import io.getstream.feeds.android.network.models.PollVoteRemovedFeedEvent -import io.getstream.feeds.android.network.models.WSEvent +import io.getstream.feeds.android.client.internal.state.event.StateUpdateEvent +import io.getstream.feeds.android.client.internal.subscribe.StateUpdateEventListener /** * Handles events related to poll vote lists in the feed state. @@ -32,24 +28,26 @@ import io.getstream.feeds.android.network.models.WSEvent internal class PollVoteListEventHandler( private val pollId: String, private val state: PollVoteListStateUpdates, -) : FeedsEventListener { +) : StateUpdateEventListener { - override fun onEvent(event: WSEvent) { + override fun onEvent(event: StateUpdateEvent) { when (event) { - is PollVoteCastedFeedEvent -> { - if (event.poll.id != pollId) return - state.pollVoteAdded(event.pollVote.toModel()) + is StateUpdateEvent.PollVoteCasted -> { + if (event.pollId != pollId) return + state.pollVoteAdded(event.vote) } - is PollVoteChangedFeedEvent -> { - if (event.poll.id != pollId) return - state.pollVoteUpdated(event.pollVote.toModel()) + is StateUpdateEvent.PollVoteChanged -> { + if (event.pollId != pollId) return + state.pollVoteUpdated(event.vote) } - is PollVoteRemovedFeedEvent -> { - if (event.poll.id != pollId) return - state.pollVoteRemoved(event.pollVote.id) + is StateUpdateEvent.PollVoteRemoved -> { + if (event.pollId != pollId) return + state.pollVoteRemoved(event.vote.id) } + + else -> {} } } } diff --git a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/ActivityListImplTest.kt b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/ActivityListImplTest.kt index e77be6a28..ff53c9130 100644 --- a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/ActivityListImplTest.kt +++ b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/ActivityListImplTest.kt @@ -21,7 +21,7 @@ import io.getstream.feeds.android.client.api.model.PaginationData import io.getstream.feeds.android.client.api.model.PaginationResult import io.getstream.feeds.android.client.api.state.query.ActivitiesQuery import io.getstream.feeds.android.client.internal.repository.ActivitiesRepository -import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener +import io.getstream.feeds.android.client.internal.subscribe.StateUpdateEventListener import io.getstream.feeds.android.client.internal.test.TestData.activityData import io.mockk.coEvery import io.mockk.coVerify @@ -32,7 +32,7 @@ import org.junit.Test internal class ActivityListImplTest { private val activitiesRepository: ActivitiesRepository = mockk() - private val subscriptionManager: StreamSubscriptionManager = + private val subscriptionManager: StreamSubscriptionManager = mockk(relaxed = true) private val query = ActivitiesQuery(limit = 10) private val currentUserId = "user-123" diff --git a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/CommentReplyListImplTest.kt b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/CommentReplyListImplTest.kt index f4a8619a7..0f2ba77cc 100644 --- a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/CommentReplyListImplTest.kt +++ b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/CommentReplyListImplTest.kt @@ -21,7 +21,7 @@ import io.getstream.feeds.android.client.api.model.PaginationResult import io.getstream.feeds.android.client.api.model.ThreadedCommentData import io.getstream.feeds.android.client.api.state.query.CommentRepliesQuery import io.getstream.feeds.android.client.internal.repository.CommentsRepository -import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener +import io.getstream.feeds.android.client.internal.subscribe.StateUpdateEventListener import io.getstream.feeds.android.client.internal.test.TestData.threadedCommentData import io.mockk.coEvery import io.mockk.coVerify @@ -32,7 +32,7 @@ import org.junit.Test internal class CommentReplyListImplTest { private val commentsRepository: CommentsRepository = mockk() - private val subscriptionManager: StreamSubscriptionManager = + private val subscriptionManager: StreamSubscriptionManager = mockk(relaxed = true) private val currentUserId = "user-1" private val query = CommentRepliesQuery(commentId = "comment-1", limit = 10) diff --git a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/FeedImplTest.kt b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/FeedImplTest.kt index fbee7dc6f..68cd18d68 100644 --- a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/FeedImplTest.kt +++ b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/FeedImplTest.kt @@ -703,6 +703,7 @@ internal class FeedImplTest { commentsRepository = commentsRepository, feedsRepository = feedsRepository, pollsRepository = pollsRepository, + socketSubscriptionManager = mockk(relaxed = true), subscriptionManager = mockk(relaxed = true), feedWatchHandler = feedWatchHandler, ) diff --git a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/FollowListImplTest.kt b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/FollowListImplTest.kt index 545627373..4ba2ab59d 100644 --- a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/FollowListImplTest.kt +++ b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/FollowListImplTest.kt @@ -21,7 +21,7 @@ import io.getstream.feeds.android.client.api.model.PaginationData import io.getstream.feeds.android.client.api.model.PaginationResult import io.getstream.feeds.android.client.api.state.query.FollowsQuery import io.getstream.feeds.android.client.internal.repository.FeedsRepository -import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener +import io.getstream.feeds.android.client.internal.subscribe.StateUpdateEventListener import io.getstream.feeds.android.client.internal.test.TestData.followData import io.mockk.coEvery import io.mockk.coVerify @@ -32,7 +32,7 @@ import org.junit.Test internal class FollowListImplTest { private val feedsRepository: FeedsRepository = mockk() - private val subscriptionManager: StreamSubscriptionManager = + private val subscriptionManager: StreamSubscriptionManager = mockk(relaxed = true) private val query = FollowsQuery(limit = 10) diff --git a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/MemberListImplTest.kt b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/MemberListImplTest.kt index dde7418e4..f92a46122 100644 --- a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/MemberListImplTest.kt +++ b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/MemberListImplTest.kt @@ -22,7 +22,7 @@ import io.getstream.feeds.android.client.api.model.PaginationData import io.getstream.feeds.android.client.api.model.PaginationResult import io.getstream.feeds.android.client.api.state.query.MembersQuery import io.getstream.feeds.android.client.internal.repository.FeedsRepository -import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener +import io.getstream.feeds.android.client.internal.subscribe.StateUpdateEventListener import io.getstream.feeds.android.client.internal.test.TestData.feedMemberData import io.mockk.coEvery import io.mockk.coVerify @@ -33,7 +33,7 @@ import org.junit.Test internal class MemberListImplTest { private val feedsRepository: FeedsRepository = mockk() - private val subscriptionManager: StreamSubscriptionManager = + private val subscriptionManager: StreamSubscriptionManager = mockk(relaxed = true) private val query = MembersQuery(fid = FeedId("user", "test"), limit = 10) diff --git a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/PollListImplTest.kt b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/PollListImplTest.kt index edc241e00..68cd5b23b 100644 --- a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/PollListImplTest.kt +++ b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/PollListImplTest.kt @@ -21,7 +21,7 @@ import io.getstream.feeds.android.client.api.model.PaginationResult import io.getstream.feeds.android.client.api.model.PollData import io.getstream.feeds.android.client.api.state.query.PollsQuery import io.getstream.feeds.android.client.internal.repository.PollsRepository -import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener +import io.getstream.feeds.android.client.internal.subscribe.StateUpdateEventListener import io.getstream.feeds.android.client.internal.test.TestData.pollData import io.mockk.coEvery import io.mockk.coVerify @@ -32,7 +32,7 @@ import org.junit.Test internal class PollListImplTest { private val pollsRepository: PollsRepository = mockk() - private val subscriptionManager: StreamSubscriptionManager = + private val subscriptionManager: StreamSubscriptionManager = mockk(relaxed = true) private val query = PollsQuery(limit = 10) diff --git a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/PollVoteListImplTest.kt b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/PollVoteListImplTest.kt index eb9b7e637..fc1a22a4e 100644 --- a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/PollVoteListImplTest.kt +++ b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/PollVoteListImplTest.kt @@ -21,7 +21,7 @@ import io.getstream.feeds.android.client.api.model.PaginationResult import io.getstream.feeds.android.client.api.model.PollVoteData import io.getstream.feeds.android.client.api.state.query.PollVotesQuery import io.getstream.feeds.android.client.internal.repository.PollsRepository -import io.getstream.feeds.android.client.internal.subscribe.FeedsEventListener +import io.getstream.feeds.android.client.internal.subscribe.StateUpdateEventListener import io.getstream.feeds.android.client.internal.test.TestData.pollVoteData import io.mockk.coEvery import io.mockk.coVerify @@ -32,7 +32,7 @@ import org.junit.Test internal class PollVoteListImplTest { private val pollsRepository: PollsRepository = mockk() - private val subscriptionManager: StreamSubscriptionManager = + private val subscriptionManager: StreamSubscriptionManager = mockk(relaxed = true) private val query = PollVotesQuery(pollId = "poll-1", userId = "user-1", limit = 10) diff --git a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/ActivityListEventHandlerTest.kt b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/ActivityListEventHandlerTest.kt index e9467d1d1..62372378d 100644 --- a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/ActivityListEventHandlerTest.kt +++ b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/ActivityListEventHandlerTest.kt @@ -15,24 +15,15 @@ */ package io.getstream.feeds.android.client.internal.state.event.handler -import io.getstream.feeds.android.client.api.model.toModel import io.getstream.feeds.android.client.internal.state.ActivityListStateUpdates -import io.getstream.feeds.android.client.internal.test.TestData.activityResponse -import io.getstream.feeds.android.client.internal.test.TestData.bookmarkResponse -import io.getstream.feeds.android.client.internal.test.TestData.commentResponse -import io.getstream.feeds.android.client.internal.test.TestData.feedsReactionResponse -import io.getstream.feeds.android.network.models.ActivityDeletedEvent -import io.getstream.feeds.android.network.models.ActivityReactionAddedEvent -import io.getstream.feeds.android.network.models.ActivityReactionDeletedEvent -import io.getstream.feeds.android.network.models.BookmarkAddedEvent -import io.getstream.feeds.android.network.models.BookmarkDeletedEvent -import io.getstream.feeds.android.network.models.CommentAddedEvent -import io.getstream.feeds.android.network.models.CommentDeletedEvent -import io.getstream.feeds.android.network.models.WSEvent +import io.getstream.feeds.android.client.internal.state.event.StateUpdateEvent +import io.getstream.feeds.android.client.internal.test.TestData.activityData +import io.getstream.feeds.android.client.internal.test.TestData.bookmarkData +import io.getstream.feeds.android.client.internal.test.TestData.commentData +import io.getstream.feeds.android.client.internal.test.TestData.feedsReactionData import io.mockk.called import io.mockk.mockk import io.mockk.verify -import java.util.Date import org.junit.Test internal class ActivityListEventHandlerTest { @@ -41,126 +32,78 @@ internal class ActivityListEventHandlerTest { private val handler = ActivityListEventHandler(state) @Test - fun `on ActivityDeletedEvent, then call onActivityRemoved`() { - val activity = activityResponse() - val event = - ActivityDeletedEvent( - createdAt = Date(), - fid = "user:feed-1", - activity = activity, - type = "feeds.activity.deleted", - ) + fun `on ActivityDeleted, then call onActivityRemoved`() { + val activity = activityData() + val event = StateUpdateEvent.ActivityDeleted(activity) handler.onEvent(event) - verify { state.onActivityRemoved(activity.toModel()) } + verify { state.onActivityRemoved(activity) } } @Test - fun `on ActivityReactionAddedEvent, then call onReactionAdded`() { - val activity = activityResponse() - val reaction = feedsReactionResponse() - val event = - ActivityReactionAddedEvent( - createdAt = Date(), - fid = "user:feed-1", - activity = activity, - reaction = reaction, - type = "feeds.activity.reaction.added", - ) + fun `on ActivityReactionAdded, then call onReactionAdded`() { + val reaction = feedsReactionData("activity-1") + val event = StateUpdateEvent.ActivityReactionAdded(reaction) handler.onEvent(event) - verify { state.onReactionAdded(reaction.toModel()) } + verify { state.onReactionAdded(reaction) } } @Test - fun `on ActivityReactionDeletedEvent, then call onReactionRemoved`() { - val activity = activityResponse() - val reaction = feedsReactionResponse() - val event = - ActivityReactionDeletedEvent( - createdAt = Date(), - fid = "user:feed-1", - activity = activity, - reaction = reaction, - type = "feeds.activity.reaction.deleted", - ) + fun `on ActivityReactionDeleted, then call onReactionRemoved`() { + val reaction = feedsReactionData("activity-1") + val event = StateUpdateEvent.ActivityReactionDeleted(reaction) handler.onEvent(event) - verify { state.onReactionRemoved(reaction.toModel()) } + verify { state.onReactionRemoved(reaction) } } @Test - fun `on BookmarkAddedEvent, then call onBookmarkAdded`() { - val bookmark = bookmarkResponse() - val event = - BookmarkAddedEvent( - createdAt = Date(), - bookmark = bookmark, - type = "feeds.bookmark.added", - ) + fun `on BookmarkAdded, then call onBookmarkAdded`() { + val bookmark = bookmarkData() + val event = StateUpdateEvent.BookmarkAdded(bookmark) handler.onEvent(event) - verify { state.onBookmarkAdded(bookmark.toModel()) } + verify { state.onBookmarkAdded(bookmark) } } @Test - fun `on BookmarkDeletedEvent, then call onBookmarkRemoved`() { - val bookmark = bookmarkResponse() - val event = - BookmarkDeletedEvent( - createdAt = Date(), - bookmark = bookmark, - type = "feeds.bookmark.deleted", - ) + fun `on BookmarkDeleted, then call onBookmarkRemoved`() { + val bookmark = bookmarkData() + val event = StateUpdateEvent.BookmarkDeleted(bookmark) handler.onEvent(event) - verify { state.onBookmarkRemoved(bookmark.toModel()) } + verify { state.onBookmarkRemoved(bookmark) } } @Test - fun `on CommentAddedEvent, then call onCommentAdded`() { - val comment = commentResponse() - val event = - CommentAddedEvent( - createdAt = Date(), - fid = "user:feed-1", - comment = comment, - activity = activityResponse(), - type = "feeds.comment.added", - ) + fun `on CommentAdded, then call onCommentAdded`() { + val comment = commentData() + val event = StateUpdateEvent.CommentAdded(comment) handler.onEvent(event) - verify { state.onCommentAdded(comment.toModel()) } + verify { state.onCommentAdded(comment) } } @Test - fun `on CommentDeletedEvent, then call onCommentRemoved`() { - val comment = commentResponse() - val event = - CommentDeletedEvent( - createdAt = Date(), - fid = "user:feed-1", - comment = comment, - type = "feeds.comment.deleted", - ) + fun `on CommentDeleted, then call onCommentRemoved`() { + val comment = commentData() + val event = StateUpdateEvent.CommentDeleted(comment) handler.onEvent(event) - verify { state.onCommentRemoved(comment.toModel()) } + verify { state.onCommentRemoved(comment) } } @Test fun `on unknown event, then do nothing`() { - val unknownEvent = - object : WSEvent { - override fun getWSEventType(): String = "unknown.event" - } + val unknownEvent = StateUpdateEvent.FeedDeleted("feed-id") handler.onEvent(unknownEvent) diff --git a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/CommentReplyListEventHandlerTest.kt b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/CommentReplyListEventHandlerTest.kt index ec2ddbd3b..1f2fe664e 100644 --- a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/CommentReplyListEventHandlerTest.kt +++ b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/CommentReplyListEventHandlerTest.kt @@ -16,21 +16,13 @@ package io.getstream.feeds.android.client.internal.state.event.handler import io.getstream.feeds.android.client.api.model.ThreadedCommentData -import io.getstream.feeds.android.client.api.model.toModel import io.getstream.feeds.android.client.internal.state.CommentReplyListStateUpdates -import io.getstream.feeds.android.client.internal.test.TestData.activityResponse -import io.getstream.feeds.android.client.internal.test.TestData.commentResponse -import io.getstream.feeds.android.client.internal.test.TestData.feedsReactionResponse -import io.getstream.feeds.android.network.models.CommentAddedEvent -import io.getstream.feeds.android.network.models.CommentDeletedEvent -import io.getstream.feeds.android.network.models.CommentReactionAddedEvent -import io.getstream.feeds.android.network.models.CommentReactionDeletedEvent -import io.getstream.feeds.android.network.models.CommentUpdatedEvent -import io.getstream.feeds.android.network.models.WSEvent +import io.getstream.feeds.android.client.internal.state.event.StateUpdateEvent +import io.getstream.feeds.android.client.internal.test.TestData.commentData +import io.getstream.feeds.android.client.internal.test.TestData.feedsReactionData import io.mockk.called import io.mockk.mockk import io.mockk.verify -import java.util.Date import org.junit.Test internal class CommentReplyListEventHandlerTest { @@ -39,32 +31,19 @@ internal class CommentReplyListEventHandlerTest { private val handler = CommentReplyListEventHandler(state) @Test - fun `on CommentAddedEvent, then call onCommentAdded`() { - val comment = commentResponse() - val event = - CommentAddedEvent( - createdAt = Date(), - fid = "user:feed-1", - comment = comment, - activity = activityResponse(), - type = "feeds.comment.added", - ) + fun `on CommentAdded, then call onCommentAdded`() { + val comment = commentData() + val event = StateUpdateEvent.CommentAdded(comment) handler.onEvent(event) - verify { state.onCommentAdded(ThreadedCommentData(comment.toModel())) } + verify { state.onCommentAdded(ThreadedCommentData(comment)) } } @Test - fun `on CommentDeletedEvent, then call onCommentRemoved`() { - val comment = commentResponse() - val event = - CommentDeletedEvent( - createdAt = Date(), - fid = "user:feed-1", - comment = comment, - type = "feeds.comment.deleted", - ) + fun `on CommentDeleted, then call onCommentRemoved`() { + val comment = commentData() + val event = StateUpdateEvent.CommentDeleted(comment) handler.onEvent(event) @@ -72,64 +51,40 @@ internal class CommentReplyListEventHandlerTest { } @Test - fun `on CommentUpdatedEvent, then call onCommentUpdated`() { - val comment = commentResponse() - val event = - CommentUpdatedEvent( - createdAt = Date(), - fid = "user:feed-1", - comment = comment, - type = "feeds.comment.updated", - ) + fun `on CommentUpdated, then call onCommentUpdated`() { + val comment = commentData() + val event = StateUpdateEvent.CommentUpdated(comment) handler.onEvent(event) - verify { state.onCommentUpdated(comment.toModel()) } + verify { state.onCommentUpdated(comment) } } @Test - fun `on CommentReactionAddedEvent, then call onCommentReactionAdded`() { - val comment = commentResponse() - val reaction = feedsReactionResponse() - val event = - CommentReactionAddedEvent( - createdAt = Date(), - fid = "user:feed-1", - activity = activityResponse(), - comment = comment, - reaction = reaction, - type = "feeds.comment.reaction.added", - ) + fun `on CommentReactionAdded, then call onCommentReactionAdded`() { + val comment = commentData() + val reaction = feedsReactionData() + val event = StateUpdateEvent.CommentReactionAdded(comment, reaction) handler.onEvent(event) - verify { state.onCommentReactionAdded(comment.id, reaction.toModel()) } + verify { state.onCommentReactionAdded(comment.id, reaction) } } @Test - fun `on CommentReactionDeletedEvent, then call onCommentReactionRemoved`() { - val comment = commentResponse() - val reaction = feedsReactionResponse() - val event = - CommentReactionDeletedEvent( - createdAt = Date(), - fid = "user:feed-1", - comment = comment, - reaction = reaction, - type = "feeds.comment.reaction.deleted", - ) + fun `on CommentReactionDeleted, then call onCommentReactionRemoved`() { + val comment = commentData() + val reaction = feedsReactionData() + val event = StateUpdateEvent.CommentReactionDeleted(comment, reaction) handler.onEvent(event) - verify { state.onCommentReactionRemoved(comment.id, reaction.toModel()) } + verify { state.onCommentReactionRemoved(comment.id, reaction) } } @Test fun `on unknown event, then do nothing`() { - val unknownEvent = - object : WSEvent { - override fun getWSEventType(): String = "unknown.event" - } + val unknownEvent = StateUpdateEvent.FeedDeleted("feed-id") handler.onEvent(unknownEvent) diff --git a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/FollowListEventHandlerTest.kt b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/FollowListEventHandlerTest.kt index 9c6282cbb..6cb0d93f3 100644 --- a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/FollowListEventHandlerTest.kt +++ b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/FollowListEventHandlerTest.kt @@ -15,64 +15,39 @@ */ package io.getstream.feeds.android.client.internal.state.event.handler -import io.getstream.feeds.android.client.api.model.toModel import io.getstream.feeds.android.client.internal.state.FollowListStateUpdates -import io.getstream.feeds.android.client.internal.test.TestData.followResponse -import io.getstream.feeds.android.network.models.FollowDeletedEvent -import io.getstream.feeds.android.network.models.FollowUpdatedEvent -import io.getstream.feeds.android.network.models.WSEvent -import io.mockk.called +import io.getstream.feeds.android.client.internal.state.event.StateUpdateEvent +import io.getstream.feeds.android.client.internal.state.event.StateUpdateEvent.FollowDeleted +import io.getstream.feeds.android.client.internal.state.event.StateUpdateEvent.FollowUpdated +import io.getstream.feeds.android.client.internal.test.TestData.followData +import io.mockk.MockKVerificationScope import io.mockk.mockk -import io.mockk.verify -import java.util.Date -import org.junit.Test - -internal class FollowListEventHandlerTest { - private val state: FollowListStateUpdates = mockk(relaxed = true) - - private val handler = FollowListEventHandler(state) - - @Test - fun `on FollowUpdatedEvent, then call onFollowUpdated`() { - val follow = followResponse() - val event = - FollowUpdatedEvent( - createdAt = Date(), - fid = "user:feed-1", - follow = follow, - type = "feeds.follow.updated", - ) - - handler.onEvent(event) - - verify { state.onFollowUpdated(follow.toModel()) } - } - - @Test - fun `on FollowDeletedEvent, then call onFollowRemoved`() { - val follow = followResponse() - val event = - FollowDeletedEvent( - createdAt = Date(), - fid = "user:feed-1", - follow = follow, - type = "feeds.follow.updated", +import org.junit.runners.Parameterized + +internal class FollowListEventHandlerTest( + testName: String, + event: StateUpdateEvent, + verifyBlock: MockKVerificationScope.(FollowListStateUpdates) -> Unit, +) : BaseEventHandlerTest(testName, event, verifyBlock) { + + override val state: FollowListStateUpdates = mockk(relaxed = true) + override val handler = FollowListEventHandler(state) + + companion object { + @JvmStatic + @Parameterized.Parameters(name = "{0}") + fun data(): List> = + listOf( + testParams( + name = "FollowUpdated", + event = FollowUpdated(followData()), + verifyBlock = { state -> state.onFollowUpdated(followData()) }, + ), + testParams( + name = "FollowDeleted", + event = FollowDeleted(followData()), + verifyBlock = { state -> state.onFollowRemoved(followData()) }, + ), ) - - handler.onEvent(event) - - verify { state.onFollowRemoved(follow.toModel()) } - } - - @Test - fun `on unknown event, then do nothing`() { - val unknownEvent = - object : WSEvent { - override fun getWSEventType(): String = "unknown.event" - } - - handler.onEvent(unknownEvent) - - verify { state wasNot called } } } diff --git a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/MemberListEventHandlerTest.kt b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/MemberListEventHandlerTest.kt index ceae597c4..9d6c79400 100644 --- a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/MemberListEventHandlerTest.kt +++ b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/MemberListEventHandlerTest.kt @@ -16,64 +16,64 @@ package io.getstream.feeds.android.client.internal.state.event.handler import io.getstream.feeds.android.client.api.model.FeedId -import io.getstream.feeds.android.client.api.model.toModel import io.getstream.feeds.android.client.internal.state.MemberListStateUpdates -import io.getstream.feeds.android.client.internal.test.TestData.feedMemberResponse -import io.getstream.feeds.android.network.models.FeedMemberRemovedEvent -import io.getstream.feeds.android.network.models.FeedMemberUpdatedEvent -import io.getstream.feeds.android.network.models.WSEvent +import io.getstream.feeds.android.client.internal.state.event.StateUpdateEvent +import io.getstream.feeds.android.client.internal.state.event.StateUpdateEvent.FeedMemberAdded +import io.getstream.feeds.android.client.internal.state.event.StateUpdateEvent.FeedMemberRemoved +import io.getstream.feeds.android.client.internal.state.event.StateUpdateEvent.FeedMemberUpdated +import io.getstream.feeds.android.client.internal.test.TestData.feedMemberData +import io.mockk.MockKVerificationScope import io.mockk.called import io.mockk.mockk -import io.mockk.verify -import java.util.Date -import org.junit.Test +import org.junit.runners.Parameterized -internal class MemberListEventHandlerTest { - private val fid = FeedId("user:feed-1") - private val state: MemberListStateUpdates = mockk(relaxed = true) +internal class MemberListEventHandlerTest( + testName: String, + event: StateUpdateEvent, + verifyBlock: MockKVerificationScope.(MemberListStateUpdates) -> Unit, +) : BaseEventHandlerTest(testName, event, verifyBlock) { - private val handler = MemberListEventHandler(fid, state) + override val state: MemberListStateUpdates = mockk(relaxed = true) + override val handler = MemberListEventHandler(FeedId(fid), state) - @Test - fun `on FeedMemberRemovedEvent, then call onMemberRemoved`() { - val event = - FeedMemberRemovedEvent( - createdAt = Date(), - fid = "user:feed-1", - memberId = "member-1", - type = "feeds.feed_member.removed", - ) - - handler.onEvent(event) + companion object { + private val fid = "user:feed-1" + private const val differentFeedId = "user:different-feed" - verify { state.onMemberRemoved("member-1") } - } - - @Test - fun `on FeedMemberUpdatedEvent, then call onMemberUpdated`() { - val member = feedMemberResponse() - val event = - FeedMemberUpdatedEvent( - createdAt = Date(), - fid = "user:feed-1", - member = member, - type = "feeds.feed_member.updated", + @JvmStatic + @Parameterized.Parameters(name = "{0}") + fun data(): List> = + listOf( + testParams( + name = "FeedMemberAdded matching feed", + event = FeedMemberAdded(fid, feedMemberData()), + verifyBlock = { state -> state.onMemberAdded(feedMemberData()) }, + ), + testParams( + name = "FeedMemberAdded non-matching feed", + event = FeedMemberAdded(differentFeedId, feedMemberData()), + verifyBlock = { state -> state wasNot called }, + ), + testParams( + name = "FeedMemberRemoved matching feed", + event = FeedMemberRemoved(fid, "member-1"), + verifyBlock = { state -> state.onMemberRemoved("member-1") }, + ), + testParams( + name = "FeedMemberRemoved non-matching feed", + event = FeedMemberRemoved(differentFeedId, "member-1"), + verifyBlock = { state -> state wasNot called }, + ), + testParams( + name = "FeedMemberUpdated matching feed", + event = FeedMemberUpdated(fid, feedMemberData()), + verifyBlock = { state -> state.onMemberUpdated(feedMemberData()) }, + ), + testParams( + name = "FeedMemberUpdated non-matching feed", + event = FeedMemberUpdated(differentFeedId, feedMemberData()), + verifyBlock = { state -> state wasNot called }, + ), ) - - handler.onEvent(event) - - verify { state.onMemberUpdated(member.toModel()) } - } - - @Test - fun `on unknown event, then do nothing`() { - val unknownEvent = - object : WSEvent { - override fun getWSEventType(): String = "unknown.event" - } - - handler.onEvent(unknownEvent) - - verify { state wasNot called } } } diff --git a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/PollListEventHandlerTest.kt b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/PollListEventHandlerTest.kt index a9532c0d3..7e8c17f9a 100644 --- a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/PollListEventHandlerTest.kt +++ b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/PollListEventHandlerTest.kt @@ -15,47 +15,33 @@ */ package io.getstream.feeds.android.client.internal.state.event.handler -import io.getstream.feeds.android.client.api.model.toModel import io.getstream.feeds.android.client.internal.state.PollListStateUpdates -import io.getstream.feeds.android.client.internal.test.TestData.pollResponseData -import io.getstream.feeds.android.network.models.PollUpdatedFeedEvent -import io.getstream.feeds.android.network.models.WSEvent -import io.mockk.called +import io.getstream.feeds.android.client.internal.state.event.StateUpdateEvent +import io.getstream.feeds.android.client.internal.state.event.StateUpdateEvent.PollUpdated +import io.getstream.feeds.android.client.internal.test.TestData.pollData +import io.mockk.MockKVerificationScope import io.mockk.mockk -import io.mockk.verify -import java.util.Date -import org.junit.Test - -internal class PollListEventHandlerTest { - private val state: PollListStateUpdates = mockk(relaxed = true) - - private val handler = PollListEventHandler(state) - - @Test - fun `on PollUpdatedFeedEvent, then call onPollUpdated`() { - val poll = pollResponseData() - val event = - PollUpdatedFeedEvent( - createdAt = Date(), - fid = "user:feed-1", - poll = poll, - type = "feeds.poll.updated", +import org.junit.runners.Parameterized + +internal class PollListEventHandlerTest( + testName: String, + event: StateUpdateEvent, + verifyBlock: MockKVerificationScope.(PollListStateUpdates) -> Unit, +) : BaseEventHandlerTest(testName, event, verifyBlock) { + + override val state: PollListStateUpdates = mockk(relaxed = true) + override val handler = PollListEventHandler(state) + + companion object { + @JvmStatic + @Parameterized.Parameters(name = "{0}") + fun data(): List> = + listOf( + testParams( + name = "PollUpdated", + event = PollUpdated("feed-1", pollData()), + verifyBlock = { state -> state.onPollUpdated(pollData()) }, + ) ) - - handler.onEvent(event) - - verify { state.onPollUpdated(poll.toModel()) } - } - - @Test - fun `on unknown event, then do nothing`() { - val unknownEvent = - object : WSEvent { - override fun getWSEventType(): String = "unknown.event" - } - - handler.onEvent(unknownEvent) - - verify { state wasNot called } } } diff --git a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/PollVoteListEventHandlerTest.kt b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/PollVoteListEventHandlerTest.kt index 4825efb41..d461bd378 100644 --- a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/PollVoteListEventHandlerTest.kt +++ b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/event/handler/PollVoteListEventHandlerTest.kt @@ -15,143 +15,64 @@ */ package io.getstream.feeds.android.client.internal.state.event.handler -import io.getstream.feeds.android.client.api.model.toModel import io.getstream.feeds.android.client.internal.state.PollVoteListStateUpdates -import io.getstream.feeds.android.client.internal.test.TestData.pollResponseData -import io.getstream.feeds.android.client.internal.test.TestData.pollVoteResponseData -import io.getstream.feeds.android.network.models.PollVoteCastedFeedEvent -import io.getstream.feeds.android.network.models.PollVoteChangedFeedEvent -import io.getstream.feeds.android.network.models.PollVoteRemovedFeedEvent -import io.getstream.feeds.android.network.models.WSEvent +import io.getstream.feeds.android.client.internal.state.event.StateUpdateEvent +import io.getstream.feeds.android.client.internal.state.event.StateUpdateEvent.PollVoteCasted +import io.getstream.feeds.android.client.internal.state.event.StateUpdateEvent.PollVoteChanged +import io.getstream.feeds.android.client.internal.state.event.StateUpdateEvent.PollVoteRemoved +import io.getstream.feeds.android.client.internal.test.TestData.pollVoteData +import io.mockk.MockKVerificationScope import io.mockk.called import io.mockk.mockk -import io.mockk.verify -import java.util.Date -import org.junit.Test - -internal class PollVoteListEventHandlerTest { - private val pollId = "poll-1" - private val state: PollVoteListStateUpdates = mockk(relaxed = true) - - private val handler = PollVoteListEventHandler(pollId, state) - - @Test - fun `on PollVoteChangedFeedEvent for matching poll, then call pollVoteUpdated`() { - val poll = pollResponseData().copy(id = pollId) - val pollVote = pollVoteResponseData() - val event = - PollVoteChangedFeedEvent( - createdAt = Date(), - fid = "user:feed-1", - poll = poll, - pollVote = pollVote, - type = "feeds.poll.vote_changed", - ) - - handler.onEvent(event) - - verify { state.pollVoteUpdated(pollVote.toModel()) } - } - - @Test - fun `on PollVoteChangedFeedEvent for different poll, then do not call pollVoteUpdated`() { - val poll = pollResponseData().copy(id = "different-poll") - val pollVote = pollVoteResponseData() - val event = - PollVoteChangedFeedEvent( - createdAt = Date(), - fid = "user:feed-1", - poll = poll, - pollVote = pollVote, - type = "feeds.poll.vote_changed", - ) - - handler.onEvent(event) - - verify(exactly = 0) { state.pollVoteUpdated(any()) } - } - - @Test - fun `on PollVoteRemovedFeedEvent for matching poll, then call pollVoteRemoved`() { - val poll = pollResponseData().copy(id = pollId) - val pollVote = pollVoteResponseData() - val event = - PollVoteRemovedFeedEvent( - createdAt = Date(), - fid = "user:feed-1", - poll = poll, - pollVote = pollVote, - type = "feeds.poll.vote_removed", - ) - - handler.onEvent(event) - - verify { state.pollVoteRemoved(pollVote.id) } - } - - @Test - fun `on PollVoteRemovedFeedEvent for different poll, then do not call pollVoteRemoved`() { - val poll = pollResponseData().copy(id = "different-poll") - val pollVote = pollVoteResponseData() - val event = - PollVoteRemovedFeedEvent( - createdAt = Date(), - fid = "user:feed-1", - poll = poll, - pollVote = pollVote, - type = "feeds.poll.vote_removed", +import org.junit.runners.Parameterized + +internal class PollVoteListEventHandlerTest( + testName: String, + event: StateUpdateEvent, + verifyBlock: MockKVerificationScope.(PollVoteListStateUpdates) -> Unit, +) : BaseEventHandlerTest(testName, event, verifyBlock) { + + override val state: PollVoteListStateUpdates = mockk(relaxed = true) + override val handler = PollVoteListEventHandler(pollId, state) + + companion object { + private const val pollId = "poll-1" + private const val otherPollId = "other-poll" + + @JvmStatic + @Parameterized.Parameters(name = "{0}") + fun data(): List> = + listOf( + testParams( + name = "PollVoteChanged matching poll", + event = PollVoteChanged("feed-1", pollId, pollVoteData()), + verifyBlock = { state -> state.pollVoteUpdated(pollVoteData()) }, + ), + testParams( + name = "PollVoteChanged non-matching poll", + event = PollVoteChanged("feed-1", otherPollId, pollVoteData()), + verifyBlock = { state -> state wasNot called }, + ), + testParams( + name = "PollVoteRemoved matching poll", + event = PollVoteRemoved("feed-1", pollId, pollVoteData("poll-vote-1")), + verifyBlock = { state -> state.pollVoteRemoved("poll-vote-1") }, + ), + testParams( + name = "PollVoteRemoved non-matching poll", + event = PollVoteRemoved("feed-1", otherPollId, pollVoteData("poll-vote-1")), + verifyBlock = { state -> state wasNot called }, + ), + testParams( + name = "PollVoteCasted matching poll", + event = PollVoteCasted("feed-1", pollId, pollVoteData()), + verifyBlock = { state -> state.pollVoteAdded(pollVoteData()) }, + ), + testParams( + name = "PollVoteCasted non-matching poll", + event = PollVoteCasted("feed-1", otherPollId, pollVoteData()), + verifyBlock = { state -> state wasNot called }, + ), ) - - handler.onEvent(event) - - verify(exactly = 0) { state.pollVoteRemoved(any()) } - } - - @Test - fun `on PollVoteCastedFeedEvent for matching poll, then call pollVoteAdded`() { - val poll = pollResponseData().copy(id = pollId) - val pollVote = pollVoteResponseData() - val event = - PollVoteCastedFeedEvent( - createdAt = Date(), - fid = "user:feed-1", - poll = poll, - pollVote = pollVote, - type = "feeds.poll.vote_casted", - ) - - handler.onEvent(event) - - verify { state.pollVoteAdded(pollVote.toModel()) } - } - - @Test - fun `on PollVoteCastedFeedEvent for different poll, then do not call pollVoteAdded`() { - val poll = pollResponseData().copy(id = "different-poll") - val pollVote = pollVoteResponseData() - val event = - PollVoteCastedFeedEvent( - createdAt = Date(), - fid = "user:feed-1", - poll = poll, - pollVote = pollVote, - type = "feeds.poll.vote_casted", - ) - - handler.onEvent(event) - - verify(exactly = 0) { state.pollVoteAdded(any()) } - } - - @Test - fun `on unknown event, then do nothing`() { - val unknownEvent = - object : WSEvent { - override fun getWSEventType(): String = "unknown.event" - } - - handler.onEvent(unknownEvent) - - verify { state wasNot called } } }