From fed8d224286cba72eaa75562bc09441dc8e71fa8 Mon Sep 17 00:00:00 2001 From: Codex Date: Mon, 9 Mar 2026 14:12:57 +0300 Subject: [PATCH] android: add mapper fallback test and checklist updates --- android/CHANGELOG.md | 4 ++ .../data/message/mapper/MessageMappersTest.kt | 70 +++++++++++++++++++ docs/android-checklist.md | 2 +- 3 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 android/app/src/test/java/ru/daemonlord/messenger/data/message/mapper/MessageMappersTest.kt diff --git a/android/CHANGELOG.md b/android/CHANGELOG.md index 60771ec..4431a5b 100644 --- a/android/CHANGELOG.md +++ b/android/CHANGELOG.md @@ -233,3 +233,7 @@ - Added gradient wallpaper-like chat background layer in `ChatScreen`. - Kept pinned/composer/action surfaces on semi-transparent containers to preserve readability over wallpaper. - Updated Telegram UI checklist items for wallpaper and overlay readability. + +### Step 38 - Quality/docs / mapper fallback coverage +- Added `MessageMappersTest` to verify reply preview fallback resolution from Room self-relation (`reply_to_message_id`). +- Updated Android master checklist for completed chat list tabs/filters coverage. diff --git a/android/app/src/test/java/ru/daemonlord/messenger/data/message/mapper/MessageMappersTest.kt b/android/app/src/test/java/ru/daemonlord/messenger/data/message/mapper/MessageMappersTest.kt new file mode 100644 index 0000000..4dab233 --- /dev/null +++ b/android/app/src/test/java/ru/daemonlord/messenger/data/message/mapper/MessageMappersTest.kt @@ -0,0 +1,70 @@ +package ru.daemonlord.messenger.data.message.mapper + +import org.junit.Assert.assertEquals +import org.junit.Assert.assertTrue +import org.junit.Test +import ru.daemonlord.messenger.data.message.local.entity.MessageEntity +import ru.daemonlord.messenger.data.message.local.model.MessageLocalModel + +class MessageMappersTest { + + @Test + fun toDomain_usesReplyRelationFallbackWhenPreviewFieldsMissing() { + val replyMessage = messageEntity( + id = 10, + senderId = 44, + senderDisplayName = "Alice", + text = "Original message", + ) + val sourceMessage = messageEntity( + id = 11, + senderId = 55, + senderDisplayName = "Bob", + text = "Reply body", + replyToMessageId = 10, + replyPreviewText = null, + replyPreviewSenderName = null, + ) + val localModel = MessageLocalModel( + message = sourceMessage, + attachments = emptyList(), + replyToMessage = replyMessage, + ) + + val domain = localModel.toDomain(currentUserId = 55) + + assertEquals("Alice", domain.replyPreviewSenderName) + assertEquals("Original message", domain.replyPreviewText) + assertTrue(domain.isOutgoing) + } + + private fun messageEntity( + id: Long, + senderId: Long, + senderDisplayName: String?, + text: String?, + replyToMessageId: Long? = null, + replyPreviewText: String? = null, + replyPreviewSenderName: String? = null, + ): MessageEntity { + return MessageEntity( + id = id, + chatId = 1, + senderId = senderId, + senderDisplayName = senderDisplayName, + senderUsername = null, + senderAvatarUrl = null, + replyToMessageId = replyToMessageId, + replyPreviewText = replyPreviewText, + replyPreviewSenderName = replyPreviewSenderName, + forwardedFromMessageId = null, + forwardedFromDisplayName = null, + type = "text", + text = text, + status = "sent", + attachmentWaveformJson = null, + createdAt = "2026-03-09T10:00:00Z", + updatedAt = null, + ) + } +} diff --git a/docs/android-checklist.md b/docs/android-checklist.md index 32f8bac..cd6648a 100644 --- a/docs/android-checklist.md +++ b/docs/android-checklist.md @@ -41,7 +41,7 @@ - [ ] Blocked users management ## 6. Список чатов -- [ ] Tabs/фильтры (all/private/group/channel/archive) +- [x] Tabs/фильтры (all/private/group/channel/archive) - [x] Pinned chats - [x] Unread badge + mention badge `@` - [x] Muted badge