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 524e50e0270..45950a7ea6f 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 @@ -28,7 +28,6 @@ import io.getstream.chat.android.client.api2.model.dto.DeviceDto import io.getstream.chat.android.client.api2.model.dto.DownstreamChannelDto import io.getstream.chat.android.client.api2.model.dto.DownstreamChannelMuteDto import io.getstream.chat.android.client.api2.model.dto.DownstreamChannelUserRead -import io.getstream.chat.android.client.api2.model.dto.DownstreamChatPreferencesDto import io.getstream.chat.android.client.api2.model.dto.DownstreamDraftDto import io.getstream.chat.android.client.api2.model.dto.DownstreamFlagDto import io.getstream.chat.android.client.api2.model.dto.DownstreamLocationDto @@ -1365,16 +1364,6 @@ internal class DomainMapping( chatPreferences = chat_preferences?.toDomain(), ) - internal fun DownstreamChatPreferencesDto.toDomain(): ChatPreferences = ChatPreferences( - directMentions = ChatPreferenceToggle.fromValue(direct_mentions), - roleMentions = ChatPreferenceToggle.fromValue(role_mentions), - groupMentions = ChatPreferenceToggle.fromValue(group_mentions), - hereMentions = ChatPreferenceToggle.fromValue(here_mentions), - channelMentions = ChatPreferenceToggle.fromValue(channel_mentions), - threadReplies = ChatPreferenceToggle.fromValue(thread_replies), - defaultPreference = ChatPreferenceToggle.fromValue(default_preference), - ) - internal fun PushPreferencesResponse.toDomain(): PushPreference = PushPreference( level = PushPreferenceLevel.fromValue(chatLevel), disabledUntil = disabledUntil, diff --git a/stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/model/dto/PushPreferenceDtos.kt b/stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/model/dto/DownstreamPushPreferenceDto.kt similarity index 73% rename from stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/model/dto/PushPreferenceDtos.kt rename to stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/model/dto/DownstreamPushPreferenceDto.kt index 3714ecc4843..d2c083d3d6a 100644 --- a/stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/model/dto/PushPreferenceDtos.kt +++ b/stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/model/dto/DownstreamPushPreferenceDto.kt @@ -17,6 +17,7 @@ package io.getstream.chat.android.client.api2.model.dto import com.squareup.moshi.JsonClass +import io.getstream.chat.android.network.models.ChatPreferencesResponse import java.util.Date /** @@ -30,16 +31,5 @@ import java.util.Date internal data class DownstreamPushPreferenceDto( val chat_level: String?, val disabled_until: Date?, - val chat_preferences: DownstreamChatPreferencesDto? = null, -) - -@JsonClass(generateAdapter = true) -internal data class DownstreamChatPreferencesDto( - val direct_mentions: String? = null, - val role_mentions: String? = null, - val group_mentions: String? = null, - val here_mentions: String? = null, - val channel_mentions: String? = null, - val thread_replies: String? = null, - val default_preference: String? = null, + val chat_preferences: ChatPreferencesResponse? = null, ) 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 7544485856c..a4b74382063 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 @@ -73,6 +73,7 @@ import io.getstream.chat.android.client.Mother.randomUserGroupMemberDto import io.getstream.chat.android.client.Mother.randomUserGroupResponse import io.getstream.chat.android.client.Mother.randomUserResponse import io.getstream.chat.android.client.api2.mapping.DomainMappingTest.Companion.toSortDomainArguments +import io.getstream.chat.android.client.api2.model.dto.DownstreamPushPreferenceDto import io.getstream.chat.android.client.api2.model.dto.DownstreamUserGroupDto import io.getstream.chat.android.client.api2.model.dto.DownstreamUserGroupMemberDto import io.getstream.chat.android.client.api2.model.response.MessageResponse @@ -89,6 +90,7 @@ import io.getstream.chat.android.models.ChannelMute import io.getstream.chat.android.models.ChannelTransformer import io.getstream.chat.android.models.ChannelUserRead import io.getstream.chat.android.models.ChatPreferenceToggle +import io.getstream.chat.android.models.ChatPreferences import io.getstream.chat.android.models.Command import io.getstream.chat.android.models.Config import io.getstream.chat.android.models.Device @@ -109,6 +111,7 @@ import io.getstream.chat.android.models.NoOpUserTransformer import io.getstream.chat.android.models.Option import io.getstream.chat.android.models.PendingMessage import io.getstream.chat.android.models.Poll +import io.getstream.chat.android.models.PushPreference import io.getstream.chat.android.models.PushPreferenceLevel import io.getstream.chat.android.models.PushProvider import io.getstream.chat.android.models.QueryPollVotesResult @@ -1683,6 +1686,42 @@ internal class DomainMappingTest { ) } + @Test + fun `DownstreamPushPreferenceDto keeps every chat preference toggle`() { + val sut = Fixture().get() + + val result = with(sut) { + DownstreamPushPreferenceDto( + chat_level = "all", + disabled_until = Date(1000), + chat_preferences = ChatPreferencesResponse( + directMentions = "all", + roleMentions = "none", + groupMentions = "all", + hereMentions = "none", + channelMentions = "all", + threadReplies = "none", + defaultPreference = "all", + ), + ).toDomain() + } + + val expected = PushPreference( + level = PushPreferenceLevel.all, + disabledUntil = Date(1000), + chatPreferences = ChatPreferences( + directMentions = ChatPreferenceToggle.all, + roleMentions = ChatPreferenceToggle.none, + groupMentions = ChatPreferenceToggle.all, + hereMentions = ChatPreferenceToggle.none, + channelMentions = ChatPreferenceToggle.all, + threadReplies = ChatPreferenceToggle.none, + defaultPreference = ChatPreferenceToggle.all, + ), + ) + assertEquals(expected, result) + } + @Test fun `Channel push preferences keep their chat preferences`() { val sut = Fixture().get() 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 cd78b753360..2fd73e36d14 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 @@ -25,6 +25,7 @@ import io.getstream.chat.android.client.api2.model.dto.PrivacySettingsDto import io.getstream.chat.android.client.api2.model.dto.ReadReceiptsDto import io.getstream.chat.android.client.api2.model.dto.TypingIndicatorsDto import io.getstream.chat.android.client.api2.model.dto.UpstreamUserDto +import io.getstream.chat.android.network.models.ChatPreferencesResponse import io.getstream.chat.android.network.models.UserResponse import org.intellij.lang.annotations.Language import java.util.Date @@ -191,7 +192,16 @@ internal object UserDtoTestData { "avg_response_time": 1000, "push_preferences": { "chat_level": "default", - "disabled_until": "2020-06-10T11:04:31.588Z" + "disabled_until": "2020-06-10T11:04:31.588Z", + "chat_preferences": { + "direct_mentions": "all", + "role_mentions": "none", + "group_mentions": "all", + "here_mentions": "none", + "channel_mentions": "all", + "thread_replies": "none", + "default_preference": "all" + } } }""" const val userResponseJson = @@ -275,6 +285,16 @@ internal object UserDtoTestData { push_preferences = DownstreamPushPreferenceDto( chat_level = "default", disabled_until = Date(1591787071588), + // Toggles alternate so a key read into the wrong property cannot look correct. + chat_preferences = ChatPreferencesResponse( + directMentions = "all", + roleMentions = "none", + groupMentions = "all", + hereMentions = "none", + channelMentions = "all", + threadReplies = "none", + defaultPreference = "all", + ), ), extraData = emptyMap(), )