From 394b31c2dcf794afc4267c56e83a339e4478db29 Mon Sep 17 00:00:00 2001 From: Aleksandar Apostolov Date: Thu, 25 Sep 2025 14:23:14 +0200 Subject: [PATCH 1/5] Add tests for missing fields check and error interceptor --- .../StreamEndpointErrorInterceptorTest.kt | 111 +++++++++++ .../StreamInternalModelSerializationTest.kt | 180 ++++++++++++++++++ 2 files changed, 291 insertions(+) create mode 100644 stream-android-core/src/test/java/io/getstream/android/core/internal/http/interceptor/StreamEndpointErrorInterceptorTest.kt create mode 100644 stream-android-core/src/test/java/io/getstream/android/core/internal/model/StreamInternalModelSerializationTest.kt diff --git a/stream-android-core/src/test/java/io/getstream/android/core/internal/http/interceptor/StreamEndpointErrorInterceptorTest.kt b/stream-android-core/src/test/java/io/getstream/android/core/internal/http/interceptor/StreamEndpointErrorInterceptorTest.kt new file mode 100644 index 0000000..ac4fab9 --- /dev/null +++ b/stream-android-core/src/test/java/io/getstream/android/core/internal/http/interceptor/StreamEndpointErrorInterceptorTest.kt @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2014-2025 Stream.io Inc. All rights reserved. + */ +package io.getstream.android.core.internal.http.interceptor + +import io.getstream.android.core.api.model.exceptions.StreamEndpointErrorData +import io.getstream.android.core.api.model.exceptions.StreamEndpointException +import io.getstream.android.core.api.serialization.StreamJsonSerialization +import okhttp3.Connection +import java.io.IOException +import kotlin.test.assertEquals +import kotlin.test.assertFailsWith +import okhttp3.Interceptor +import okhttp3.MediaType.Companion.toMediaType +import okhttp3.Protocol +import okhttp3.Request +import okhttp3.Response +import okhttp3.ResponseBody.Companion.toResponseBody +import org.junit.Test + +internal class StreamEndpointErrorInterceptorTest { + + private val request = Request.Builder().url("https://example.test/path").build() + + private fun chainReturning(response: Response) = + object : Interceptor.Chain { + override fun call() = throw UnsupportedOperationException() + override fun connectTimeoutMillis() = 0 + override fun proceed(request: Request): Response = response + override fun connection(): Connection? = null + override fun readTimeoutMillis() = 0 + override fun request(): Request = request + override fun withConnectTimeout(timeout: Int, unit: java.util.concurrent.TimeUnit) = this + override fun withReadTimeout(timeout: Int, unit: java.util.concurrent.TimeUnit) = this + override fun withWriteTimeout(timeout: Int, unit: java.util.concurrent.TimeUnit) = this + override fun writeTimeoutMillis() = 0 + } + + @Test + fun `successful response bypasses error handling`() { + val response = + Response.Builder() + .request(request) + .protocol(Protocol.HTTP_1_1) + .code(200) + .message("OK") + .body("body".toResponseBody("text/plain".toMediaType())) + .build() + val interceptor = StreamEndpointErrorInterceptor(MockJsonSerialization()) + + val result = interceptor.intercept(chainReturning(response)) + + assertEquals(response, result) + } + + @Test + fun `unsuccessful response with parseable error returns api error`() { + val error = StreamEndpointErrorData(code = 40, message = "Invalid token") + val response = + Response.Builder() + .request(request) + .protocol(Protocol.HTTP_1_1) + .code(401) + .message("Unauthorized") + .body("{\"code\":40}".toResponseBody("application/json".toMediaType())) + .build() + val parser = MockJsonSerialization(result = Result.success(error)) + val interceptor = StreamEndpointErrorInterceptor(parser) + + val exception = + assertFailsWith { + interceptor.intercept(chainReturning(response)) + } + + assertEquals("Failed request: https://example.test/path", exception.message) + assertEquals(error, exception.apiError) + } + + @Test + fun `unsuccessful response with parse failure propagates cause`() { + val failure = IOException("boom") + val response = + Response.Builder() + .request(request) + .protocol(Protocol.HTTP_1_1) + .code(500) + .message("Server Error") + .body("oops".toResponseBody("text/plain".toMediaType())) + .build() + val parser = MockJsonSerialization(result = Result.failure(failure)) + val interceptor = StreamEndpointErrorInterceptor(parser) + + val exception = + assertFailsWith { + interceptor.intercept(chainReturning(response)) + } + + assertEquals("Failed request: https://example.test/path", exception.message) + assertEquals(failure, exception.cause) + } + + private class MockJsonSerialization( + private val result: Result = Result.failure(UnsupportedOperationException()), + ) : StreamJsonSerialization { + override fun toJson(any: Any): Result = Result.failure(UnsupportedOperationException()) + override fun fromJson(raw: String, clazz: Class): Result { + @Suppress("UNCHECKED_CAST") + return result as Result + } + } +} diff --git a/stream-android-core/src/test/java/io/getstream/android/core/internal/model/StreamInternalModelSerializationTest.kt b/stream-android-core/src/test/java/io/getstream/android/core/internal/model/StreamInternalModelSerializationTest.kt new file mode 100644 index 0000000..7900df8 --- /dev/null +++ b/stream-android-core/src/test/java/io/getstream/android/core/internal/model/StreamInternalModelSerializationTest.kt @@ -0,0 +1,180 @@ +/* + * Copyright (c) 2014-2025 Stream.io Inc. All rights reserved. + */ +package io.getstream.android.core.internal.model + +import com.squareup.moshi.JsonDataException +import io.getstream.android.core.api.model.connection.StreamConnectedUser +import io.getstream.android.core.api.model.exceptions.StreamEndpointErrorData +import io.getstream.android.core.internal.model.authentication.StreamWSAuthMessageRequest +import io.getstream.android.core.internal.model.events.EVENT_TYPE_CONNECTION_ERROR +import io.getstream.android.core.internal.model.events.EVENT_TYPE_CONNECTION_OK +import io.getstream.android.core.internal.model.events.StreamClientConnectedEvent +import io.getstream.android.core.internal.model.events.StreamClientConnectionErrorEvent +import io.getstream.android.core.internal.model.events.StreamHealthCheckEvent +import io.getstream.android.core.internal.serialization.moshi.StreamCoreMoshiProvider +import java.util.Date +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import org.junit.Test + +internal class StreamInternalModelSerializationTest { + + private val moshi = StreamCoreMoshiProvider().builder {}.build() + + @Test + fun `StreamWSAuthMessageRequest round trips through Moshi`() { + // Given + val details = + StreamConnectUserDetailsRequest( + id = "user-1", + image = "https://example.test/avatar.png", + invisible = true, + language = "en", + name = "User One", + custom = mapOf("role" to "admin", "tier" to "gold"), + ) + val request = + StreamWSAuthMessageRequest( + products = listOf("chat", "video"), + token = "jwt-token", + userDetails = details, + ) + + val adapter = moshi.adapter(StreamWSAuthMessageRequest::class.java) + + // When + val json = adapter.toJson(request) + val decoded = adapter.fromJson(json)!! + + // Then + assertEquals(request, decoded) + } + + @Test(expected = JsonDataException::class) + fun `StreamWSAuthMessageRequest missing required fields yields null`() { + // Given + val adapter = moshi.adapter(StreamWSAuthMessageRequest::class.java) + val invalidJson = "{\"products\":null,\"token\":null}" + + // When + adapter.fromJson(invalidJson) + + // Then expect exception + } + + @Test(expected = JsonDataException::class) + fun `StreamClientConnectedEvent missing connectionId yields null`() { + // Given + val adapter = moshi.adapter(StreamClientConnectedEvent::class.java) + val user = + StreamConnectedUser( + createdAt = Date(0), + id = "u", + language = "en", + role = "user", + updatedAt = Date(0), + teams = emptyList(), + ) + val jsonWithNullId = + "{" + + "\"me\":${moshi.adapter(StreamConnectedUser::class.java).toJson(user)}," + + "\"type\":\"${EVENT_TYPE_CONNECTION_OK}\"" + + "}" + + // When + adapter.fromJson(jsonWithNullId) + + // Then expect exception + } + + @Test + fun `StreamClientConnectedEvent serializes expected user info`() { + // Given + val now = Date(1_000L) + val user = + StreamConnectedUser( + createdAt = now, + id = "user-1", + language = "en", + role = "user", + updatedAt = now, + teams = listOf("team-a"), + custom = mapOf("ref" to "123"), + name = "User", + ) + val event = + StreamClientConnectedEvent( + connectionId = "conn-123", + me = user, + type = EVENT_TYPE_CONNECTION_OK, + ) + + val adapter = moshi.adapter(StreamClientConnectedEvent::class.java) + + // When + val decoded = adapter.fromJson(adapter.toJson(event))!! + + // Then + assertEquals(event.connectionId, decoded.connectionId) + assertEquals(event.type, decoded.type) + assertEquals(user.id, decoded.me.id) + assertEquals(user.language, decoded.me.language) + assertEquals(user.custom, decoded.me.custom) + assertEquals(user.teams, decoded.me.teams) + assertEquals(user.name, decoded.me.name) + } + + @Test + fun `StreamClientConnectionErrorEvent includes endpoint error data`() { + // Given + val error = + StreamEndpointErrorData( + code = 40, + duration = "12ms", + message = "Unauthorized", + moreInfo = "https://example.test/docs", + statusCode = 401, + details = listOf(1, 2, 3), + unrecoverable = true, + exceptionFields = mapOf("token" to "expired"), + ) + val event = + StreamClientConnectionErrorEvent( + connectionId = "conn-err", + createdAt = Date(500L), + error = error, + type = EVENT_TYPE_CONNECTION_ERROR, + ) + + val adapter = moshi.adapter(StreamClientConnectionErrorEvent::class.java) + + // When + val decoded = adapter.fromJson(adapter.toJson(event))!! + + // Then + assertEquals(event.connectionId, decoded.connectionId) + assertEquals(event.type, decoded.type) + assertEquals(error, decoded.error) + } + + @Test + fun `StreamHealthCheckEvent defaults custom map`() { + // Given + val adapter = moshi.adapter(StreamHealthCheckEvent::class.java) + val event = + StreamHealthCheckEvent( + connectionId = "conn-health", + createdAt = Date(100L), + type = "health.check", + ) + + // When + val decoded = adapter.fromJson(adapter.toJson(event))!! + + // Then + assertEquals(event.connectionId, decoded.connectionId) + assertTrue(decoded.custom.isEmpty()) + assertEquals(event.type, decoded.type) + } +} From 6401dfa25ede685ea2ac21aec59934408feb0006 Mon Sep 17 00:00:00 2001 From: Aleksandar Apostolov Date: Thu, 25 Sep 2025 14:23:44 +0200 Subject: [PATCH 2/5] Spotless --- .../StreamEndpointErrorInterceptorTest.kt | 33 ++++++++++++++++--- .../StreamInternalModelSerializationTest.kt | 12 +++++++ 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/stream-android-core/src/test/java/io/getstream/android/core/internal/http/interceptor/StreamEndpointErrorInterceptorTest.kt b/stream-android-core/src/test/java/io/getstream/android/core/internal/http/interceptor/StreamEndpointErrorInterceptorTest.kt index ac4fab9..f3bf99d 100644 --- a/stream-android-core/src/test/java/io/getstream/android/core/internal/http/interceptor/StreamEndpointErrorInterceptorTest.kt +++ b/stream-android-core/src/test/java/io/getstream/android/core/internal/http/interceptor/StreamEndpointErrorInterceptorTest.kt @@ -1,15 +1,27 @@ /* * Copyright (c) 2014-2025 Stream.io Inc. All rights reserved. + * + * Licensed under the Stream License; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://github.com/GetStream/stream-core-android/blob/main/LICENSE + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ package io.getstream.android.core.internal.http.interceptor import io.getstream.android.core.api.model.exceptions.StreamEndpointErrorData import io.getstream.android.core.api.model.exceptions.StreamEndpointException import io.getstream.android.core.api.serialization.StreamJsonSerialization -import okhttp3.Connection import java.io.IOException import kotlin.test.assertEquals import kotlin.test.assertFailsWith +import okhttp3.Connection import okhttp3.Interceptor import okhttp3.MediaType.Companion.toMediaType import okhttp3.Protocol @@ -25,14 +37,24 @@ internal class StreamEndpointErrorInterceptorTest { private fun chainReturning(response: Response) = object : Interceptor.Chain { override fun call() = throw UnsupportedOperationException() + override fun connectTimeoutMillis() = 0 + override fun proceed(request: Request): Response = response + override fun connection(): Connection? = null + override fun readTimeoutMillis() = 0 + override fun request(): Request = request - override fun withConnectTimeout(timeout: Int, unit: java.util.concurrent.TimeUnit) = this + + override fun withConnectTimeout(timeout: Int, unit: java.util.concurrent.TimeUnit) = + this + override fun withReadTimeout(timeout: Int, unit: java.util.concurrent.TimeUnit) = this + override fun withWriteTimeout(timeout: Int, unit: java.util.concurrent.TimeUnit) = this + override fun writeTimeoutMillis() = 0 } @@ -100,9 +122,12 @@ internal class StreamEndpointErrorInterceptorTest { } private class MockJsonSerialization( - private val result: Result = Result.failure(UnsupportedOperationException()), + private val result: Result = + Result.failure(UnsupportedOperationException()) ) : StreamJsonSerialization { - override fun toJson(any: Any): Result = Result.failure(UnsupportedOperationException()) + override fun toJson(any: Any): Result = + Result.failure(UnsupportedOperationException()) + override fun fromJson(raw: String, clazz: Class): Result { @Suppress("UNCHECKED_CAST") return result as Result diff --git a/stream-android-core/src/test/java/io/getstream/android/core/internal/model/StreamInternalModelSerializationTest.kt b/stream-android-core/src/test/java/io/getstream/android/core/internal/model/StreamInternalModelSerializationTest.kt index 7900df8..52389f2 100644 --- a/stream-android-core/src/test/java/io/getstream/android/core/internal/model/StreamInternalModelSerializationTest.kt +++ b/stream-android-core/src/test/java/io/getstream/android/core/internal/model/StreamInternalModelSerializationTest.kt @@ -1,5 +1,17 @@ /* * Copyright (c) 2014-2025 Stream.io Inc. All rights reserved. + * + * Licensed under the Stream License; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://github.com/GetStream/stream-core-android/blob/main/LICENSE + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ package io.getstream.android.core.internal.model From 1ea0736a18fa68cbf997d4d08f43d9026169f28b Mon Sep 17 00:00:00 2001 From: Aleksandar Apostolov Date: Thu, 25 Sep 2025 14:27:15 +0200 Subject: [PATCH 3/5] change test name --- .../internal/model/StreamInternalModelSerializationTest.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stream-android-core/src/test/java/io/getstream/android/core/internal/model/StreamInternalModelSerializationTest.kt b/stream-android-core/src/test/java/io/getstream/android/core/internal/model/StreamInternalModelSerializationTest.kt index 52389f2..098cd6a 100644 --- a/stream-android-core/src/test/java/io/getstream/android/core/internal/model/StreamInternalModelSerializationTest.kt +++ b/stream-android-core/src/test/java/io/getstream/android/core/internal/model/StreamInternalModelSerializationTest.kt @@ -64,7 +64,7 @@ internal class StreamInternalModelSerializationTest { } @Test(expected = JsonDataException::class) - fun `StreamWSAuthMessageRequest missing required fields yields null`() { + fun `StreamWSAuthMessageRequest missing required fields throws`() { // Given val adapter = moshi.adapter(StreamWSAuthMessageRequest::class.java) val invalidJson = "{\"products\":null,\"token\":null}" @@ -76,7 +76,7 @@ internal class StreamInternalModelSerializationTest { } @Test(expected = JsonDataException::class) - fun `StreamClientConnectedEvent missing connectionId yields null`() { + fun `StreamClientConnectedEvent missing connectionId throws`() { // Given val adapter = moshi.adapter(StreamClientConnectedEvent::class.java) val user = From 082a5cfbd9cc9cce921ad061691fc413d4837660 Mon Sep 17 00:00:00 2001 From: Aleksandar Apostolov Date: Thu, 25 Sep 2025 15:47:34 +0200 Subject: [PATCH 4/5] Update tests --- .../StreamInternalModelSerializationTest.kt | 212 +++++++++--------- 1 file changed, 104 insertions(+), 108 deletions(-) diff --git a/stream-android-core/src/test/java/io/getstream/android/core/internal/model/StreamInternalModelSerializationTest.kt b/stream-android-core/src/test/java/io/getstream/android/core/internal/model/StreamInternalModelSerializationTest.kt index 098cd6a..3e9849e 100644 --- a/stream-android-core/src/test/java/io/getstream/android/core/internal/model/StreamInternalModelSerializationTest.kt +++ b/stream-android-core/src/test/java/io/getstream/android/core/internal/model/StreamInternalModelSerializationTest.kt @@ -17,7 +17,6 @@ package io.getstream.android.core.internal.model import com.squareup.moshi.JsonDataException import io.getstream.android.core.api.model.connection.StreamConnectedUser -import io.getstream.android.core.api.model.exceptions.StreamEndpointErrorData import io.getstream.android.core.internal.model.authentication.StreamWSAuthMessageRequest import io.getstream.android.core.internal.model.events.EVENT_TYPE_CONNECTION_ERROR import io.getstream.android.core.internal.model.events.EVENT_TYPE_CONNECTION_OK @@ -27,42 +26,12 @@ import io.getstream.android.core.internal.model.events.StreamHealthCheckEvent import io.getstream.android.core.internal.serialization.moshi.StreamCoreMoshiProvider import java.util.Date import kotlin.test.assertEquals -import kotlin.test.assertTrue import org.junit.Test internal class StreamInternalModelSerializationTest { private val moshi = StreamCoreMoshiProvider().builder {}.build() - @Test - fun `StreamWSAuthMessageRequest round trips through Moshi`() { - // Given - val details = - StreamConnectUserDetailsRequest( - id = "user-1", - image = "https://example.test/avatar.png", - invisible = true, - language = "en", - name = "User One", - custom = mapOf("role" to "admin", "tier" to "gold"), - ) - val request = - StreamWSAuthMessageRequest( - products = listOf("chat", "video"), - token = "jwt-token", - userDetails = details, - ) - - val adapter = moshi.adapter(StreamWSAuthMessageRequest::class.java) - - // When - val json = adapter.toJson(request) - val decoded = adapter.fromJson(json)!! - - // Then - assertEquals(request, decoded) - } - @Test(expected = JsonDataException::class) fun `StreamWSAuthMessageRequest missing required fields throws`() { // Given @@ -101,92 +70,119 @@ internal class StreamInternalModelSerializationTest { } @Test - fun `StreamClientConnectedEvent serializes expected user info`() { - // Given - val now = Date(1_000L) - val user = - StreamConnectedUser( - createdAt = now, - id = "user-1", - language = "en", - role = "user", - updatedAt = now, - teams = listOf("team-a"), - custom = mapOf("ref" to "123"), - name = "User", - ) - val event = - StreamClientConnectedEvent( - connectionId = "conn-123", - me = user, - type = EVENT_TYPE_CONNECTION_OK, - ) + fun `StreamWSAuthMessageRequest parses canonical json`() { + val adapter = moshi.adapter(StreamWSAuthMessageRequest::class.java) + val json = + """ + { + "products": ["chat", "video"], + "token": "jwt-123", + "user_details": { + "id": "user-7", + "image": "https://example.test/u7.png", + "invisible": false, + "language": "en", + "name": "Seven", + "custom": {"role": "admin"} + } + } + """ + .trimIndent() + + val request = adapter.fromJson(json)!! + + assertEquals(listOf("chat", "video"), request.products) + assertEquals("jwt-123", request.token) + assertEquals("user-7", request.userDetails.id) + assertEquals("https://example.test/u7.png", request.userDetails.image) + assertEquals(false, request.userDetails.invisible) + assertEquals("admin", request.userDetails.custom?.get("role")) + } + @Test + fun `StreamClientConnectedEvent parses canonical json`() { val adapter = moshi.adapter(StreamClientConnectedEvent::class.java) - - // When - val decoded = adapter.fromJson(adapter.toJson(event))!! - - // Then - assertEquals(event.connectionId, decoded.connectionId) - assertEquals(event.type, decoded.type) - assertEquals(user.id, decoded.me.id) - assertEquals(user.language, decoded.me.language) - assertEquals(user.custom, decoded.me.custom) - assertEquals(user.teams, decoded.me.teams) - assertEquals(user.name, decoded.me.name) + val json = + """ + { + "connection_id": "conn-xyz", + "me": { + "created_at": 12312412312, + "id": "user-42", + "language": "en", + "role": "admin", + "updated_at": 12312412312, + "blocked_user_ids": ["u-1"], + "teams": ["team-a"], + "custom": {"source": "json"}, + "deactivated_at": null, + "deleted_at": null, + "image": "https://example.test/avatar.png", + "last_active": null, + "name": "User 42" + }, + "type": "connection.ok" + } + """ + .trimIndent() + + val event = adapter.fromJson(json)!! + + assertEquals("conn-xyz", event.connectionId) + assertEquals("connection.ok", event.type) + assertEquals("user-42", event.me.id) + assertEquals(listOf("team-a"), event.me.teams) + assertEquals(mapOf("source" to "json"), event.me.custom) } @Test - fun `StreamClientConnectionErrorEvent includes endpoint error data`() { - // Given - val error = - StreamEndpointErrorData( - code = 40, - duration = "12ms", - message = "Unauthorized", - moreInfo = "https://example.test/docs", - statusCode = 401, - details = listOf(1, 2, 3), - unrecoverable = true, - exceptionFields = mapOf("token" to "expired"), - ) - val event = - StreamClientConnectionErrorEvent( - connectionId = "conn-err", - createdAt = Date(500L), - error = error, - type = EVENT_TYPE_CONNECTION_ERROR, - ) - + fun `StreamClientConnectionErrorEvent parses canonical json`() { val adapter = moshi.adapter(StreamClientConnectionErrorEvent::class.java) - - // When - val decoded = adapter.fromJson(adapter.toJson(event))!! - - // Then - assertEquals(event.connectionId, decoded.connectionId) - assertEquals(event.type, decoded.type) - assertEquals(error, decoded.error) + val json = + """ + { + "connection_id": "conn-bad", + "created_at": 12312412312, + "error": { + "code": 32, + "duration": "5ms", + "message": "Failure", + "more_info": "https://example.test/help", + "StatusCode": 503, + "details": [10, 20], + "unrecoverable": false, + "exception_fields": {"reason": "maintenance"} + }, + "type": "connection.error" + } + """ + .trimIndent() + + val event = adapter.fromJson(json)!! + + assertEquals("conn-bad", event.connectionId) + assertEquals("connection.error", event.type) + assertEquals(32, event.error.code) + assertEquals("maintenance", event.error.exceptionFields?.get("reason")) } @Test - fun `StreamHealthCheckEvent defaults custom map`() { - // Given + fun `StreamHealthCheckEvent parses canonical json`() { val adapter = moshi.adapter(StreamHealthCheckEvent::class.java) - val event = - StreamHealthCheckEvent( - connectionId = "conn-health", - createdAt = Date(100L), - type = "health.check", - ) - - // When - val decoded = adapter.fromJson(adapter.toJson(event))!! - - // Then - assertEquals(event.connectionId, decoded.connectionId) - assertTrue(decoded.custom.isEmpty()) - assertEquals(event.type, decoded.type) + val json = + """ + { + "connection_id": "conn-health", + "created_at": 12312412312, + "custom": {"ping": "pong"}, + "type": "health.check" + } + """ + .trimIndent() + + val event = adapter.fromJson(json)!! + + assertEquals("conn-health", event.connectionId) + assertEquals(mapOf("ping" to "pong"), event.custom) } } From 18b978dfa5447ba5cf600fa7dc3c701dc294c98a Mon Sep 17 00:00:00 2001 From: Aleksandar Apostolov Date: Thu, 25 Sep 2025 15:47:49 +0200 Subject: [PATCH 5/5] Spotless --- .../core/internal/model/StreamInternalModelSerializationTest.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/stream-android-core/src/test/java/io/getstream/android/core/internal/model/StreamInternalModelSerializationTest.kt b/stream-android-core/src/test/java/io/getstream/android/core/internal/model/StreamInternalModelSerializationTest.kt index 3e9849e..793877c 100644 --- a/stream-android-core/src/test/java/io/getstream/android/core/internal/model/StreamInternalModelSerializationTest.kt +++ b/stream-android-core/src/test/java/io/getstream/android/core/internal/model/StreamInternalModelSerializationTest.kt @@ -18,7 +18,6 @@ package io.getstream.android.core.internal.model import com.squareup.moshi.JsonDataException import io.getstream.android.core.api.model.connection.StreamConnectedUser import io.getstream.android.core.internal.model.authentication.StreamWSAuthMessageRequest -import io.getstream.android.core.internal.model.events.EVENT_TYPE_CONNECTION_ERROR import io.getstream.android.core.internal.model.events.EVENT_TYPE_CONNECTION_OK import io.getstream.android.core.internal.model.events.StreamClientConnectedEvent import io.getstream.android.core.internal.model.events.StreamClientConnectionErrorEvent