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 0c6c3f91c..074ab1283 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 @@ -20,6 +20,7 @@ import io.getstream.android.core.api.StreamClient import io.getstream.android.core.api.log.StreamLogger import io.getstream.android.core.api.model.connection.StreamConnectedUser import io.getstream.android.core.api.model.connection.StreamConnectionState +import io.getstream.android.core.api.model.event.StreamClientWsEvent import io.getstream.android.core.api.model.exceptions.StreamClientException import io.getstream.android.core.api.model.value.StreamApiKey import io.getstream.android.core.api.processing.StreamAggregatedEvent @@ -190,6 +191,10 @@ internal class FeedsClientImpl( listener.onEvent(stateEvent) } } + } else if (event is StreamClientWsEvent) { + // Core forwards its own lifecycle events (e.g. connection.ok) to listeners. + // Connection state is exposed separately, so there is nothing to do here. + logger.v { "[onEvent] Ignoring core event: $event" } } else { logger.e { "[onEvent] Received non-WSEvent: $event" } } diff --git a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/client/FeedsClientImplTest.kt b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/client/FeedsClientImplTest.kt index 9ffda5497..85f58fa9d 100644 --- a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/client/FeedsClientImplTest.kt +++ b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/client/FeedsClientImplTest.kt @@ -20,6 +20,7 @@ import io.getstream.android.core.api.StreamClient import io.getstream.android.core.api.log.StreamLogger import io.getstream.android.core.api.model.connection.StreamConnectedUser import io.getstream.android.core.api.model.connection.StreamConnectionState +import io.getstream.android.core.api.model.event.StreamClientWsEvent import io.getstream.android.core.api.model.exceptions.StreamClientException import io.getstream.android.core.api.model.value.StreamApiKey import io.getstream.android.core.api.processing.StreamAggregatedEvent @@ -475,6 +476,26 @@ internal class FeedsClientImplTest { verify(exactly = 1) { feedsEventsSubscriptionManager.forEach(any()) } } + @Test + fun `on core event, then ignore it without logging an error`() = runTest { + val listener = captureClientListener() + + listener.onEvent(object : StreamClientWsEvent {}) + + verify(exactly = 0) { feedsEventsSubscriptionManager.forEach(any()) } + verify(exactly = 0) { logger.e(any<() -> String>()) } + } + + @Test + fun `on unknown event, then log an error`() = runTest { + val listener = captureClientListener() + + listener.onEvent("not-an-event") + + verify(exactly = 0) { feedsEventsSubscriptionManager.forEach(any()) } + verify(exactly = 1) { logger.e(any<() -> String>()) } + } + private suspend fun captureClientListener(): StreamClientListener { val listener = slot() every { coreClient.subscribe(capture(listener)) } returns Result.success(mockk())