diff --git a/CHANGELOG.md b/CHANGELOG.md index ee98d9421..76c932538 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). # Upcoming ### 🐞 Fixed +- Fix showing unmute user message action just after muting the user [#847](https://github.com/GetStream/stream-chat-swiftui/pull/847) - Fix rare concurrency crash in `ChannelAvatarsMerger.createMergedAvatar(from:)` [#858](https://github.com/GetStream/stream-chat-swiftui/pull/858) # [4.79.1](https://github.com/GetStream/stream-chat-swiftui/releases/tag/4.79.1) diff --git a/Sources/StreamChatSwiftUI/ChatChannel/Reactions/MessageActions/DefaultMessageActions.swift b/Sources/StreamChatSwiftUI/ChatChannel/Reactions/MessageActions/DefaultMessageActions.swift index 2d9c49373..499504669 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/Reactions/MessageActions/DefaultMessageActions.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/Reactions/MessageActions/DefaultMessageActions.swift @@ -182,7 +182,7 @@ public extension MessageAction { if channel.config.mutesEnabled { let author = message.author let currentUser = chatClient.currentUserController().currentUser - let isMuted = currentUser?.mutedUsers.contains(message.author) ?? false + let isMuted = currentUser?.mutedUsers.contains(where: { $0.id == author.id }) ?? false if isMuted { let unmuteAction = unmuteAction( for: message, diff --git a/StreamChatSwiftUITests/Infrastructure/Shared/StreamChatModel.xcdatamodeld/StreamChatModel.xcdatamodel/contents b/StreamChatSwiftUITests/Infrastructure/Shared/StreamChatModel.xcdatamodeld/StreamChatModel.xcdatamodel/contents index 1a43f6d46..97ecb5c8c 100644 --- a/StreamChatSwiftUITests/Infrastructure/Shared/StreamChatModel.xcdatamodeld/StreamChatModel.xcdatamodel/contents +++ b/StreamChatSwiftUITests/Infrastructure/Shared/StreamChatModel.xcdatamodeld/StreamChatModel.xcdatamodel/contents @@ -1,5 +1,5 @@ - + @@ -44,6 +44,8 @@ + + @@ -469,6 +471,7 @@ + diff --git a/StreamChatSwiftUITests/Tests/ChatChannel/MessageActions_Tests.swift b/StreamChatSwiftUITests/Tests/ChatChannel/MessageActions_Tests.swift index 29e5475a0..67ab89a48 100644 --- a/StreamChatSwiftUITests/Tests/ChatChannel/MessageActions_Tests.swift +++ b/StreamChatSwiftUITests/Tests/ChatChannel/MessageActions_Tests.swift @@ -375,6 +375,46 @@ class MessageActions_Tests: StreamChatTestCase { // Then XCTAssertTrue(messageActions.contains(where: { $0.title == "Edit Message" })) } + + func test_messageActions_currentUser_unmuteUser() throws { + // Given + // Note: internally creates current user controller + let mutedUserId = UserId.unique + try chatClient.databaseContainer.writeSynchronously { session in + try session.saveCurrentUser( + payload: .dummy( + userId: .unique, + role: .admin, + mutedUsers: [ + .dummy(userId: mutedUserId) + ] + ) + ) + } + + let channel = ChatChannel.mockDMChannel(config: .mock(mutesEnabled: true)) + let message = ChatMessage.mock( + id: .unique, + cid: channel.cid, + text: "Test", + author: .mock(id: mutedUserId), + isSentByCurrentUser: false + ) + let factory = DefaultViewFactory.shared + + // When + let messageActions = MessageAction.defaultActions( + factory: factory, + for: message, + channel: channel, + chatClient: chatClient, + onFinish: { _ in }, + onError: { _ in } + ) + + // Then + XCTAssertTrue(messageActions.contains(where: { $0.title == "Unmute User" })) + } // MARK: - Private