diff --git a/CHANGELOG.md b/CHANGELOG.md index 51b838951..3960b9776 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Add extra data to user display info [#819](https://github.com/GetStream/stream-chat-swiftui/pull/819) ### 🐞 Fixed - Fix swipe to reply enabled when quoting a message is disabled [#824](https://github.com/GetStream/stream-chat-swiftui/pull/824) +- Fix mark unread action not removed when read events are disabled [#823](https://github.com/GetStream/stream-chat-swiftui/pull/823) # [4.78.0](https://github.com/GetStream/stream-chat-swiftui/releases/tag/4.78.0) _April 24, 2025_ diff --git a/Sources/StreamChatSwiftUI/ChatChannel/Reactions/MessageActions/DefaultMessageActions.swift b/Sources/StreamChatSwiftUI/ChatChannel/Reactions/MessageActions/DefaultMessageActions.swift index 8dc7cc287..8a0e9912d 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/Reactions/MessageActions/DefaultMessageActions.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/Reactions/MessageActions/DefaultMessageActions.swift @@ -131,7 +131,7 @@ public extension MessageAction { ) messageActions.append(markThreadUnreadAction) } - } else if !message.isSentByCurrentUser { + } else if !message.isSentByCurrentUser && channel.canReceiveReadEvents { if !message.isPartOfThread || message.showReplyInChannel { let markUnreadAction = markAsUnreadAction( for: message, diff --git a/StreamChatSwiftUITests/Tests/ChatChannel/MessageActionsViewModel_Tests.swift b/StreamChatSwiftUITests/Tests/ChatChannel/MessageActionsViewModel_Tests.swift index 20e07d4d6..3daff5bf7 100644 --- a/StreamChatSwiftUITests/Tests/ChatChannel/MessageActionsViewModel_Tests.swift +++ b/StreamChatSwiftUITests/Tests/ChatChannel/MessageActionsViewModel_Tests.swift @@ -20,7 +20,7 @@ class MessageActionsViewModel_Tests: StreamChatTestCase { text: "test", author: .mock(id: .unique) ), - channel: .mockDMChannel(ownCapabilities: [.sendMessage, .uploadFile, .pinMessage]), + channel: .mockDMChannel(ownCapabilities: [.sendMessage, .uploadFile, .pinMessage, .readEvents]), chatClient: chatClient, onFinish: { _ in }, onError: { _ in } diff --git a/StreamChatSwiftUITests/Tests/ChatChannel/MessageActions_Tests.swift b/StreamChatSwiftUITests/Tests/ChatChannel/MessageActions_Tests.swift index 83e10a087..fd474938b 100644 --- a/StreamChatSwiftUITests/Tests/ChatChannel/MessageActions_Tests.swift +++ b/StreamChatSwiftUITests/Tests/ChatChannel/MessageActions_Tests.swift @@ -72,7 +72,38 @@ class MessageActions_Tests: StreamChatTestCase { XCTAssert(messageActions[4].title == "Mark Unread") XCTAssert(messageActions[5].title == "Mute User") } - + + func test_messageActions_otherUserDefaultReadEventsDisabled() { + // Given + let channel = ChatChannel.mockDMChannel(ownCapabilities: [.sendMessage, .uploadFile, .pinMessage]) + let message = ChatMessage.mock( + id: .unique, + cid: channel.cid, + text: "Test", + author: .mock(id: .unique), + isSentByCurrentUser: false + ) + let factory = DefaultViewFactory.shared + + // When + let messageActions = MessageAction.defaultActions( + factory: factory, + for: message, + channel: channel, + chatClient: chatClient, + onFinish: { _ in }, + onError: { _ in } + ) + + // Then + XCTAssert(messageActions.count == 5) + XCTAssert(messageActions[0].title == "Reply") + XCTAssert(messageActions[1].title == "Thread Reply") + XCTAssert(messageActions[2].title == "Pin to conversation") + XCTAssert(messageActions[3].title == "Copy Message") + XCTAssert(messageActions[4].title == "Mute User") + } + func test_messageActions_otherUserDefaultBlockingEnabled() { // Given streamChat = StreamChat( @@ -297,7 +328,7 @@ class MessageActions_Tests: StreamChatTestCase { private var mockDMChannel: ChatChannel { ChatChannel.mockDMChannel( - ownCapabilities: [.sendMessage, .uploadFile, .pinMessage] + ownCapabilities: [.sendMessage, .uploadFile, .pinMessage, .readEvents] ) } } diff --git a/StreamChatSwiftUITests/Tests/ChatChannel/ReactionsOverlayView_Tests.swift b/StreamChatSwiftUITests/Tests/ChatChannel/ReactionsOverlayView_Tests.swift index 03c4f6dbd..7832063a2 100644 --- a/StreamChatSwiftUITests/Tests/ChatChannel/ReactionsOverlayView_Tests.swift +++ b/StreamChatSwiftUITests/Tests/ChatChannel/ReactionsOverlayView_Tests.swift @@ -136,7 +136,7 @@ class ReactionsOverlayView_Tests: StreamChatTestCase { let view = VerticallyCenteredView { ReactionsOverlayView( factory: DefaultViewFactory.shared, - channel: .mockDMChannel(ownCapabilities: [.sendMessage, .uploadFile, .pinMessage]), + channel: .mockDMChannel(ownCapabilities: [.sendMessage, .uploadFile, .pinMessage, .readEvents]), currentSnapshot: self.overlayImage, messageDisplayInfo: messageDisplayInfo, onBackgroundTap: {},