Skip to content

Commit 09db730

Browse files
authored
Fix message actions view with flag action when user has no capability (#3705)
* Fix message actions view with flag action when user has no capability * Update CHANGELOG.md * Update CHANGELOG.md * Fix UI Tests * Fix popup tests
1 parent 9be4edd commit 09db730

File tree

4 files changed

+26
-5
lines changed

4 files changed

+26
-5
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
2121
- `didChangeActiveLiveLocationMessages()`
2222
- `didFailToUpdateLiveLocation()`
2323

24+
## StreamChatUI
25+
### 🐞 Fixed
26+
- Fix message actions view with flag action when user has no capability [#3705](https://github.com/GetStream/stream-chat-swift/pull/3705)
2427

2528
# [4.80.0](https://github.com/GetStream/stream-chat-swift/releases/tag/4.80.0)
2629
_June 17, 2025_

Sources/StreamChatUI/MessageActionsPopup/ChatMessageActionsVC.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ open class ChatMessageActionsVC: _ViewController, ThemeProvider {
114114
let canUpdateOwnMessage = channel?.canUpdateOwnMessage ?? true
115115
let canDeleteAnyMessage = channel?.canDeleteAnyMessage ?? false
116116
let canDeleteOwnMessage = channel?.canDeleteOwnMessage ?? true
117+
let canFlagMessage = channel?.canFlagMessage ?? false
117118
let isSentByCurrentUser = message.isSentByCurrentUser
118119

119120
if canQuoteMessage {
@@ -152,7 +153,7 @@ open class ChatMessageActionsVC: _ViewController, ThemeProvider {
152153
actions.append(deleteActionItem())
153154
}
154155

155-
if !isSentByCurrentUser {
156+
if !isSentByCurrentUser && canFlagMessage {
156157
actions.append(flagActionItem())
157158
}
158159

Tests/StreamChatUITests/SnapshotTests/MessageActionsPopup/ChatMessageActionsVC_Tests.swift

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ final class ChatMessageActionsVC_Tests: XCTestCase {
1818
chatMessageController = .mock()
1919
vc = ChatMessageActionsVC()
2020
vc.messageController = chatMessageController
21-
vc.channel = .mock(cid: .unique, config: .mock(), ownCapabilities: [.sendReply, .quoteMessage, .readEvents])
21+
vc.channel = .mock(cid: .unique, config: .mock(), ownCapabilities: [.sendReply, .quoteMessage, .readEvents, .flagMessage])
2222

2323
chatMessageController.simulateInitial(
2424
message: ChatMessage.mock(id: .unique, cid: .unique, text: "test", author: ChatUser.mock(id: .unique)),
@@ -62,7 +62,7 @@ final class ChatMessageActionsVC_Tests: XCTestCase {
6262

6363
let vc = TestView()
6464
vc.messageController = chatMessageController
65-
vc.channel = .mock(cid: .unique, config: .mock(), ownCapabilities: [.sendReply, .quoteMessage, .readEvents])
65+
vc.channel = .mock(cid: .unique, config: .mock(), ownCapabilities: [.sendReply, .quoteMessage, .readEvents, .flagMessage])
6666
AssertSnapshot(vc.embedded())
6767
}
6868

@@ -336,11 +336,23 @@ final class ChatMessageActionsVC_Tests: XCTestCase {
336336
state: .remoteDataFetched
337337
)
338338

339-
vc.channel = .mock(cid: .unique, ownCapabilities: [])
339+
vc.channel = .mock(cid: .unique, ownCapabilities: [.flagMessage])
340340

341341
XCTAssertTrue(vc.messageActions.contains(where: { $0 is FlagActionItem }))
342342
}
343343

344+
func test_messageActions_whenMessageIsSentByAnotherUser_whenNoCapability_doesNotContainFlagAction() {
345+
chatMessageController.simulateInitial(
346+
message: ChatMessage.mock(isSentByCurrentUser: false),
347+
replies: [],
348+
state: .remoteDataFetched
349+
)
350+
351+
vc.channel = .mock(cid: .unique, ownCapabilities: [])
352+
353+
XCTAssertFalse(vc.messageActions.contains(where: { $0 is FlagActionItem }))
354+
}
355+
344356
func test_messageActions_whenSendingFailed_thenContainsResendActionEditActionDeleteAction() {
345357
chatMessageController.simulateInitial(
346358
message: .mock(localState: .sendingFailed, isSentByCurrentUser: false),
@@ -419,7 +431,8 @@ final class ChatMessageActionsVC_Tests: XCTestCase {
419431
.sendReply,
420432
.readEvents,
421433
.updateAnyMessage,
422-
.deleteAnyMessage
434+
.deleteAnyMessage,
435+
.flagMessage
423436
]
424437
)
425438

Tests/StreamChatUITests/SnapshotTests/MessageActionsPopup/ChatMessagePopupVC_Tests.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,10 @@ final class ChatMessagePopupVC_Tests: XCTestCase {
7272
vc.reactionsController = reactionsController
7373
actionsController = ChatMessageActionsVC()
7474
actionsController.messageController = chatMessageController
75+
actionsController.channel = .mock(
76+
cid: .unique,
77+
ownCapabilities: [.flagMessage, .sendReply, .quoteMessage, .readEvents]
78+
)
7579
actionsController.channelConfig = .mock()
7680
vc.actionsController = actionsController
7781
}

0 commit comments

Comments
 (0)