diff --git a/stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/MoshiChatApi.kt b/stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/MoshiChatApi.kt index 20632488989..387a2188a48 100644 --- a/stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/MoshiChatApi.kt +++ b/stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/MoshiChatApi.kt @@ -50,7 +50,6 @@ import io.getstream.chat.android.client.api2.mapping.toFilterDomainWithFields import io.getstream.chat.android.client.api2.model.dto.PartialUpdateUserDto import io.getstream.chat.android.client.api2.model.dto.UpstreamPushPreferenceInputDto import io.getstream.chat.android.client.api2.model.requests.AcceptInviteRequest -import io.getstream.chat.android.client.api2.model.requests.AddDeviceRequest import io.getstream.chat.android.client.api2.model.requests.AddMembersRequest import io.getstream.chat.android.client.api2.model.requests.AddUserGroupMembersRequest import io.getstream.chat.android.client.api2.model.requests.BanUserRequest @@ -168,6 +167,7 @@ import io.getstream.chat.android.models.Vote import io.getstream.chat.android.models.VotingVisibility import io.getstream.chat.android.models.querysort.QuerySorter import io.getstream.chat.android.network.models.BlockUsersRequest +import io.getstream.chat.android.network.models.CreateDeviceRequest import io.getstream.chat.android.network.models.UnblockUsersRequest import io.getstream.log.taggedLogger import io.getstream.result.Error @@ -468,10 +468,10 @@ constructor( override fun addDevice(device: Device): Call { return deviceApi.addDevices( - request = AddDeviceRequest( - device.token, - device.pushProvider.key, - device.providerName, + request = CreateDeviceRequest( + id = device.token, + pushProvider = CreateDeviceRequest.PushProvider.fromString(device.pushProvider.key), + pushProviderName = device.providerName, ), ).toUnitCall() } diff --git a/stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/endpoint/DeviceApi.kt b/stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/endpoint/DeviceApi.kt index 1f91c323a43..4c630a3b8ea 100644 --- a/stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/endpoint/DeviceApi.kt +++ b/stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/endpoint/DeviceApi.kt @@ -17,9 +17,9 @@ package io.getstream.chat.android.client.api2.endpoint import io.getstream.chat.android.client.api.AuthenticatedApi -import io.getstream.chat.android.client.api2.model.requests.AddDeviceRequest -import io.getstream.chat.android.client.api2.model.response.DevicesResponse import io.getstream.chat.android.client.call.RetrofitCall +import io.getstream.chat.android.network.models.CreateDeviceRequest +import io.getstream.chat.android.network.models.ListDevicesResponse import io.getstream.chat.android.network.models.Response import retrofit2.http.Body import retrofit2.http.DELETE @@ -31,10 +31,10 @@ import retrofit2.http.Query internal interface DeviceApi { @GET("/devices") - fun getDevices(): RetrofitCall + fun getDevices(): RetrofitCall @POST("/devices") - fun addDevices(@Body request: AddDeviceRequest): RetrofitCall + fun addDevices(@Body request: CreateDeviceRequest): RetrofitCall @DELETE("/devices") fun deleteDevice(@Query("id") id: String): RetrofitCall diff --git a/stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/mapping/DomainMapping.kt b/stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/mapping/DomainMapping.kt index 1068336b703..88a91becc4a 100644 --- a/stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/mapping/DomainMapping.kt +++ b/stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/mapping/DomainMapping.kt @@ -137,6 +137,7 @@ import io.getstream.chat.android.models.querysort.QuerySortByField import io.getstream.chat.android.models.querysort.QuerySorter import io.getstream.chat.android.models.querysort.SortDirection import io.getstream.chat.android.network.models.BlockUsersResponse +import io.getstream.chat.android.network.models.DeviceResponse import java.util.Date @Suppress("TooManyFunctions", "LargeClass") @@ -689,8 +690,14 @@ internal class DomainMapping( ) /** - * Transforms [DeviceDto] to [Device]. + * Transforms [DeviceResponse] to [Device]. */ + internal fun DeviceResponse.toDomain(): Device = Device( + token = id, + pushProvider = PushProvider.fromKey(pushProvider), + providerName = pushProviderName, + ) + internal fun DeviceDto.toDomain(): Device = Device( token = id, pushProvider = PushProvider.fromKey(push_provider), diff --git a/stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/model/requests/AddDeviceRequest.kt b/stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/model/requests/AddDeviceRequest.kt deleted file mode 100644 index ea532ead87e..00000000000 --- a/stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/model/requests/AddDeviceRequest.kt +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (c) 2014-2026 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-chat-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.chat.android.client.api2.model.requests - -import com.squareup.moshi.JsonClass - -@JsonClass(generateAdapter = true) -internal data class AddDeviceRequest( - val id: String, - val push_provider: String, - val push_provider_name: String?, -) diff --git a/stream-chat-android-client/src/main/java/io/getstream/chat/android/network/infrastructure/Serializer.kt b/stream-chat-android-client/src/main/java/io/getstream/chat/android/network/infrastructure/Serializer.kt index cb3d334913c..dc1ea241ea6 100644 --- a/stream-chat-android-client/src/main/java/io/getstream/chat/android/network/infrastructure/Serializer.kt +++ b/stream-chat-android-client/src/main/java/io/getstream/chat/android/network/infrastructure/Serializer.kt @@ -28,6 +28,7 @@ import com.squareup.moshi.Moshi internal object Serializer { @JvmStatic internal val moshiBuilder: Moshi.Builder = Moshi.Builder() + .add(io.getstream.chat.android.network.models.CreateDeviceRequest.PushProvider.PushProviderAdapter()) .add(io.getstream.chat.android.network.infrastructure.IsoDateAdapter()) .addLast(com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory()) diff --git a/stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/CreateDeviceRequest.kt b/stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/CreateDeviceRequest.kt new file mode 100644 index 00000000000..e8675f94e6f --- /dev/null +++ b/stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/CreateDeviceRequest.kt @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2014-2026 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-chat-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. + */ + +@file:Suppress( + "ArrayInDataClass", + "EnumEntryName", + "RemoveRedundantQualifierName", + "UnusedImport", +) + +package io.getstream.chat.android.network.models + +import com.squareup.moshi.FromJson +import com.squareup.moshi.Json +import com.squareup.moshi.JsonAdapter +import com.squareup.moshi.JsonReader +import com.squareup.moshi.JsonWriter +import com.squareup.moshi.ToJson + +/** + * Create device request + */ + +@com.squareup.moshi.JsonClass(generateAdapter = true) +internal data class CreateDeviceRequest( + @Json(name = "id") + val id: kotlin.String, + + @Json(name = "push_provider") + val pushProvider: PushProvider, + + @Json(name = "hardware_id") + val hardwareId: kotlin.String? = null, + + @Json(name = "push_provider_name") + val pushProviderName: kotlin.String? = null, + + @Json(name = "voip_token") + val voipToken: kotlin.Boolean? = null, +) { + + /** + * PushProvider Enum + */ + sealed class PushProvider(val value: kotlin.String) { + override fun toString(): String = value + + companion object { + fun fromString(s: kotlin.String): PushProvider = when (s) { + "apn" -> Apn + "firebase" -> Firebase + "huawei" -> Huawei + "xiaomi" -> Xiaomi + else -> Unknown(s) + } + } + object Apn : PushProvider("apn") + object Firebase : PushProvider("firebase") + object Huawei : PushProvider("huawei") + object Xiaomi : PushProvider("xiaomi") + data class Unknown(val unknownValue: kotlin.String) : PushProvider(unknownValue) + + class PushProviderAdapter : JsonAdapter() { + @FromJson + override fun fromJson(reader: JsonReader): PushProvider? { + val s = reader.nextString() ?: return null + return PushProvider.fromString(s) + } + + @ToJson + override fun toJson(writer: JsonWriter, value: PushProvider?) { + writer.value(value?.value) + } + } + } +} diff --git a/stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/DeviceResponse.kt b/stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/DeviceResponse.kt new file mode 100644 index 00000000000..ecb99e80313 --- /dev/null +++ b/stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/DeviceResponse.kt @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2014-2026 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-chat-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. + */ + +@file:Suppress( + "ArrayInDataClass", + "EnumEntryName", + "RemoveRedundantQualifierName", + "UnusedImport", +) + +package io.getstream.chat.android.network.models + +import com.squareup.moshi.Json + +/** + * Response for Device + */ + +@com.squareup.moshi.JsonClass(generateAdapter = true) +internal data class DeviceResponse( + @Json(name = "created_at") + val createdAt: java.util.Date, + + @Json(name = "id") + val id: kotlin.String, + + @Json(name = "push_provider") + val pushProvider: kotlin.String, + + @Json(name = "user_id") + val userId: kotlin.String, + + @Json(name = "disabled") + val disabled: kotlin.Boolean? = null, + + @Json(name = "disabled_reason") + val disabledReason: kotlin.String? = null, + + @Json(name = "hardware_id") + val hardwareId: kotlin.String? = null, + + @Json(name = "push_provider_name") + val pushProviderName: kotlin.String? = null, + + @Json(name = "voip") + val voip: kotlin.Boolean? = null, +) diff --git a/stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/model/response/DevicesResponse.kt b/stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/ListDevicesResponse.kt similarity index 52% rename from stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/model/response/DevicesResponse.kt rename to stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/ListDevicesResponse.kt index 569ba17bd71..e165346d33a 100644 --- a/stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/model/response/DevicesResponse.kt +++ b/stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/ListDevicesResponse.kt @@ -14,12 +14,27 @@ * limitations under the License. */ -package io.getstream.chat.android.client.api2.model.response +@file:Suppress( + "ArrayInDataClass", + "EnumEntryName", + "RemoveRedundantQualifierName", + "UnusedImport", +) + +package io.getstream.chat.android.network.models + +import com.squareup.moshi.Json +import kotlin.collections.List + +/** + * List devices response + */ -import com.squareup.moshi.JsonClass -import io.getstream.chat.android.client.api2.model.dto.DeviceDto +@com.squareup.moshi.JsonClass(generateAdapter = true) +internal data class ListDevicesResponse( + @Json(name = "duration") + val duration: kotlin.String, -@JsonClass(generateAdapter = true) -internal data class DevicesResponse( - val devices: List, + @Json(name = "devices") + val devices: kotlin.collections.List = emptyList(), ) diff --git a/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/Mother.kt b/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/Mother.kt index 8a520bb4b8e..7891064ef31 100644 --- a/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/Mother.kt +++ b/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/Mother.kt @@ -103,6 +103,7 @@ import io.getstream.chat.android.models.VotingVisibility import io.getstream.chat.android.models.querysort.QuerySortByField import io.getstream.chat.android.models.querysort.QuerySorter import io.getstream.chat.android.network.models.BlockUsersResponse +import io.getstream.chat.android.network.models.DeviceResponse import io.getstream.chat.android.network.models.UnblockUsersResponse import io.getstream.chat.android.positiveRandomInt import io.getstream.chat.android.positiveRandomLong @@ -834,6 +835,20 @@ internal object Mother { set = set, ) + fun randomDeviceResponse( + id: String = randomString(), + pushProvider: String = randomString(), + pushProviderName: String = randomString(), + createdAt: Date = randomDate(), + userId: String = randomString(), + ): DeviceResponse = DeviceResponse( + createdAt = createdAt, + id = id, + pushProvider = pushProvider, + userId = userId, + pushProviderName = pushProviderName, + ) + fun randomDeviceDto( id: String = randomString(), pushProvider: String = randomString(), diff --git a/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/api2/MoshiChatApiTest.kt b/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/api2/MoshiChatApiTest.kt index a558b991253..5d4150c03cd 100644 --- a/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/api2/MoshiChatApiTest.kt +++ b/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/api2/MoshiChatApiTest.kt @@ -47,7 +47,6 @@ import io.getstream.chat.android.client.api2.model.dto.UnreadDto import io.getstream.chat.android.client.api2.model.dto.UpstreamChatPreferencesDto import io.getstream.chat.android.client.api2.model.dto.UpstreamPushPreferenceInputDto import io.getstream.chat.android.client.api2.model.requests.AcceptInviteRequest -import io.getstream.chat.android.client.api2.model.requests.AddDeviceRequest import io.getstream.chat.android.client.api2.model.requests.AddUserGroupMembersRequest import io.getstream.chat.android.client.api2.model.requests.BanUserRequest import io.getstream.chat.android.client.api2.model.requests.CreatePollRequest @@ -91,7 +90,6 @@ import io.getstream.chat.android.client.api2.model.requests.UpstreamOptionDto import io.getstream.chat.android.client.api2.model.requests.UpstreamVoteDto import io.getstream.chat.android.client.api2.model.response.AppSettingsResponse import io.getstream.chat.android.client.api2.model.response.ChannelResponse -import io.getstream.chat.android.client.api2.model.response.DevicesResponse import io.getstream.chat.android.client.api2.model.response.DraftMessageResponse import io.getstream.chat.android.client.api2.model.response.EventResponse import io.getstream.chat.android.client.api2.model.response.FlagResponse @@ -166,6 +164,8 @@ import io.getstream.chat.android.models.querysort.QuerySortByField.Companion.asc import io.getstream.chat.android.models.querysort.QuerySortByField.Companion.descByName import io.getstream.chat.android.network.models.BlockUsersRequest import io.getstream.chat.android.network.models.BlockUsersResponse +import io.getstream.chat.android.network.models.CreateDeviceRequest +import io.getstream.chat.android.network.models.ListDevicesResponse import io.getstream.chat.android.network.models.Response import io.getstream.chat.android.network.models.UnblockUsersRequest import io.getstream.chat.android.network.models.UnblockUsersResponse @@ -517,10 +517,10 @@ internal class MoshiChatApiTest { val device = randomDevice() val result = sut.addDevice(device).await() // then - val expectedRequest = AddDeviceRequest( + val expectedRequest = CreateDeviceRequest( id = device.token, - push_provider = device.pushProvider.key, - push_provider_name = device.providerName, + pushProvider = CreateDeviceRequest.PushProvider.fromString(device.pushProvider.key), + pushProviderName = device.providerName, ) result `should be instance of` expected verify(api, times(1)).addDevices(expectedRequest) @@ -545,7 +545,7 @@ internal class MoshiChatApiTest { @ParameterizedTest @MethodSource("io.getstream.chat.android.client.api2.MoshiChatApiTestArguments#getDevicesInput") - fun testGetDevices(call: RetrofitCall, expected: KClass<*>) = runTest { + fun testGetDevices(call: RetrofitCall, expected: KClass<*>) = runTest { // given val api = mock() whenever(api.getDevices()).doReturn(call) diff --git a/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/api2/MoshiChatApiTestArguments.kt b/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/api2/MoshiChatApiTestArguments.kt index 8fa81edb427..f55767ccdd6 100644 --- a/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/api2/MoshiChatApiTestArguments.kt +++ b/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/api2/MoshiChatApiTestArguments.kt @@ -34,7 +34,6 @@ import io.getstream.chat.android.client.api2.model.requests.UpdateLiveLocationRe import io.getstream.chat.android.client.api2.model.requests.UpdateMemberPartialResponse import io.getstream.chat.android.client.api2.model.response.AppSettingsResponse import io.getstream.chat.android.client.api2.model.response.ChannelResponse -import io.getstream.chat.android.client.api2.model.response.DevicesResponse import io.getstream.chat.android.client.api2.model.response.EventResponse import io.getstream.chat.android.client.api2.model.response.FlagResponse import io.getstream.chat.android.client.api2.model.response.MessageResponse @@ -78,6 +77,7 @@ import io.getstream.chat.android.models.UnreadCounts import io.getstream.chat.android.models.UnreadThread import io.getstream.chat.android.models.UploadedFile import io.getstream.chat.android.network.models.BlockUsersResponse +import io.getstream.chat.android.network.models.ListDevicesResponse import io.getstream.chat.android.network.models.Response import io.getstream.chat.android.network.models.UnblockUsersResponse import io.getstream.chat.android.positiveRandomInt @@ -225,10 +225,12 @@ internal object MoshiChatApiTestArguments { @JvmStatic fun getDevicesInput() = listOf( Arguments.of( - RetroSuccess(DevicesResponse(listOf(Mother.randomDeviceDto()))).toRetrofitCall(), + RetroSuccess( + ListDevicesResponse(duration = randomString(), devices = listOf(Mother.randomDeviceResponse())), + ).toRetrofitCall(), Result.Success::class, ), - Arguments.of(RetroError(statusCode = 500).toRetrofitCall(), Result.Failure::class), + Arguments.of(RetroError(statusCode = 500).toRetrofitCall(), Result.Failure::class), ) @JvmStatic diff --git a/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/api2/mapping/DomainMappingTest.kt b/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/api2/mapping/DomainMappingTest.kt index 3b25bf87324..0be9aa5c220 100644 --- a/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/api2/mapping/DomainMappingTest.kt +++ b/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/api2/mapping/DomainMappingTest.kt @@ -27,7 +27,7 @@ import io.getstream.chat.android.client.Mother.randomBlockUsersResponse import io.getstream.chat.android.client.Mother.randomChannelInfoDto import io.getstream.chat.android.client.Mother.randomCommandDto import io.getstream.chat.android.client.Mother.randomConfigDto -import io.getstream.chat.android.client.Mother.randomDeviceDto +import io.getstream.chat.android.client.Mother.randomDeviceResponse import io.getstream.chat.android.client.Mother.randomDownstreamChannelDto import io.getstream.chat.android.client.Mother.randomDownstreamChannelMuteDto import io.getstream.chat.android.client.Mother.randomDownstreamChannelUserRead @@ -709,14 +709,14 @@ internal class DomainMappingTest { } @Test - fun `DeviceDto is correctly mapped to Device`() { - val deviceDto = randomDeviceDto() + fun `DeviceResponse is correctly mapped to Device`() { + val deviceDto = randomDeviceResponse() val sut = Fixture().get() val device = with(sut) { deviceDto.toDomain() } val expected = Device( token = deviceDto.id, - pushProvider = PushProvider.fromKey(deviceDto.id), - providerName = deviceDto.push_provider_name, + pushProvider = PushProvider.fromKey(deviceDto.pushProvider), + providerName = deviceDto.pushProviderName, ) assertEquals(expected, device) } diff --git a/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/parser2/DeviceParsingTest.kt b/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/parser2/DeviceParsingTest.kt index 80bd47a3b14..1b95f8500cb 100644 --- a/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/parser2/DeviceParsingTest.kt +++ b/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/parser2/DeviceParsingTest.kt @@ -18,12 +18,12 @@ package io.getstream.chat.android.client.parser2 import com.squareup.moshi.JsonDataException import io.getstream.chat.android.client.api2.mapping.DomainMapping -import io.getstream.chat.android.client.api2.model.dto.DeviceDto import io.getstream.chat.android.client.parser2.direct.DeviceAdapter import io.getstream.chat.android.client.parser2.testdata.DeviceTestData import io.getstream.chat.android.models.NoOpChannelTransformer import io.getstream.chat.android.models.NoOpMessageTransformer import io.getstream.chat.android.models.NoOpUserTransformer +import io.getstream.chat.android.network.models.DeviceResponse import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test import org.junit.jupiter.api.assertThrows @@ -41,18 +41,18 @@ internal class DeviceParsingTest { private val deviceAdapter = DeviceAdapter() - // region DTO path (JSON → DeviceDto → Device) + // region DTO path (JSON → DeviceResponse → Device) @Test fun `DTO path - deserializes all fields`() { - val dto = parser.fromJson(DeviceTestData.jsonAllFields, DeviceDto::class.java) + val dto = parser.fromJson(DeviceTestData.jsonAllFields, DeviceResponse::class.java) val device = with(domainMapping) { dto.toDomain() } assertEquals(DeviceTestData.expectedDeviceAllFields, device) } @Test fun `DTO path - deserializes with optional field missing`() { - val dto = parser.fromJson(DeviceTestData.jsonOptionalFieldMissing, DeviceDto::class.java) + val dto = parser.fromJson(DeviceTestData.jsonOptionalFieldMissing, DeviceResponse::class.java) val device = with(domainMapping) { dto.toDomain() } assertEquals(DeviceTestData.expectedDeviceOptionalMissing, device) } @@ -79,7 +79,7 @@ internal class DeviceParsingTest { @Test fun `DTO path - deserializes with explicit null values`() { - val dto = parser.fromJson(DeviceTestData.jsonWithExplicitNulls, DeviceDto::class.java) + val dto = parser.fromJson(DeviceTestData.jsonWithExplicitNulls, DeviceResponse::class.java) val device = with(domainMapping) { dto.toDomain() } assertEquals(DeviceTestData.expectedWithExplicitNulls, device) } @@ -97,7 +97,7 @@ internal class DeviceParsingTest { @Test fun `DTO path - throws on missing id`() { assertThrows { - parser.fromJson(DeviceTestData.jsonMissingId, DeviceDto::class.java) + parser.fromJson(DeviceTestData.jsonMissingId, DeviceResponse::class.java) } } @@ -111,7 +111,7 @@ internal class DeviceParsingTest { @Test fun `DTO path - throws on missing push_provider`() { assertThrows { - parser.fromJson(DeviceTestData.jsonMissingPushProvider, DeviceDto::class.java) + parser.fromJson(DeviceTestData.jsonMissingPushProvider, DeviceResponse::class.java) } } diff --git a/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/parser2/testdata/DeviceTestData.kt b/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/parser2/testdata/DeviceTestData.kt index 8efb1acaff9..2552b670ae9 100644 --- a/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/parser2/testdata/DeviceTestData.kt +++ b/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/parser2/testdata/DeviceTestData.kt @@ -24,19 +24,19 @@ internal object DeviceTestData { @Language("JSON") val jsonAllFields = - """{"id":"token1","push_provider":"firebase","push_provider_name":"myProvider"}""" + """{"id":"token1","push_provider":"firebase","push_provider_name":"myProvider","created_at":"2020-06-10T11:04:31.000Z","user_id":"userId"}""" @Language("JSON") val jsonOptionalFieldMissing = - """{"id":"token1","push_provider":"firebase"}""" + """{"id":"token1","push_provider":"firebase","created_at":"2020-06-10T11:04:31.000Z","user_id":"userId"}""" @Language("JSON") val jsonMissingId = - """{"push_provider":"firebase","push_provider_name":"myProvider"}""" + """{"push_provider":"firebase","push_provider_name":"myProvider","created_at":"2020-06-10T11:04:31.000Z","user_id":"userId"}""" @Language("JSON") val jsonMissingPushProvider = - """{"id":"token1","push_provider_name":"myProvider"}""" + """{"id":"token1","push_provider_name":"myProvider","created_at":"2020-06-10T11:04:31.000Z","user_id":"userId"}""" val expectedDeviceAllFields = Device( token = "token1", @@ -52,7 +52,7 @@ internal object DeviceTestData { @Language("JSON") val jsonWithExplicitNulls = - """{"id":"token1","push_provider":"firebase","push_provider_name":null}""" + """{"id":"token1","push_provider":"firebase","push_provider_name":null,"created_at":"2020-06-10T11:04:31.000Z","user_id":"userId"}""" val expectedWithExplicitNulls = Device( token = "token1", diff --git a/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/parser2/testdata/UserDtoTestData.kt b/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/parser2/testdata/UserDtoTestData.kt index af41c453879..3e26cf3dbbb 100644 --- a/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/parser2/testdata/UserDtoTestData.kt +++ b/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/parser2/testdata/UserDtoTestData.kt @@ -158,7 +158,9 @@ internal object UserDtoTestData { { "id": "deviceId", "push_provider": "provider", - "push_provider_name": "provider_name" + "push_provider_name": "provider_name", + "created_at": "2020-06-10T11:04:31.000Z", + "user_id": "userId" } ], "online": true, @@ -212,7 +214,11 @@ internal object UserDtoTestData { language = "language", role = "owner", devices = listOf( - DeviceDto(id = "deviceId", push_provider = "provider", push_provider_name = "provider_name"), + DeviceDto( + id = "deviceId", + push_provider = "provider", + push_provider_name = "provider_name", + ), ), online = true, updated_at = Date(1591787071588), @@ -326,7 +332,13 @@ internal object UserDtoTestData { ), ), banned = false, - devices = listOf(DeviceDto(id = "deviceId", push_provider = "provider", push_provider_name = "provider_name")), + devices = listOf( + DeviceDto( + id = "deviceId", + push_provider = "provider", + push_provider_name = "provider_name", + ), + ), teams = listOf("team1", "team2"), teams_role = mapOf( "team1" to "owner", diff --git a/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/parser2/testdata/UserTestData.kt b/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/parser2/testdata/UserTestData.kt index e56c78cc393..95041363b53 100644 --- a/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/parser2/testdata/UserTestData.kt +++ b/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/parser2/testdata/UserTestData.kt @@ -47,7 +47,9 @@ internal object UserTestData { { "id": "device1", "push_provider": "firebase", - "push_provider_name": "Firebase" + "push_provider_name": "Firebase", + "created_at": "2020-01-01T00:00:00.000Z", + "user_id": "user1" } ], "online": true,