Skip to content

Commit a4d06da

Browse files
authored
Use channel capabilities for validating delete message action (#933)
1 parent cf8b7ec commit a4d06da

File tree

3 files changed

+39
-3
lines changed

3 files changed

+39
-3
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
99
### 🐞 Fixed
1010
- Show attachment title instead of URL in the `FileAttachmentPreview` view [#930](https://github.com/GetStream/stream-chat-swiftui/pull/930)
1111
- Fix overriding title color in `ChannelTitleView` [#931](https://github.com/GetStream/stream-chat-swiftui/pull/931)
12+
- Use channel capabilities for validating delete message action [#933](https://github.com/GetStream/stream-chat-swiftui/pull/933)
1213

1314
# [4.86.0](https://github.com/GetStream/stream-chat-swiftui/releases/tag/4.86.0)
1415
_August 21, 2025_

Sources/StreamChatSwiftUI/ChatChannel/Reactions/MessageActions/DefaultMessageActions.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ public extension MessageAction {
156156
}
157157
}
158158

159-
if message.isSentByCurrentUser {
159+
if channel.canDeleteAnyMessage || channel.canDeleteOwnMessage && message.isSentByCurrentUser {
160160
let deleteAction = deleteMessageAction(
161161
for: message,
162162
channel: channel,
@@ -166,7 +166,9 @@ public extension MessageAction {
166166
)
167167

168168
messageActions.append(deleteAction)
169-
} else {
169+
}
170+
171+
if !message.isSentByCurrentUser {
170172
if channel.canFlagMessage {
171173
let flagAction = flagMessageAction(
172174
for: message,

StreamChatSwiftUITests/Tests/ChatChannel/MessageActions_Tests.swift

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -374,12 +374,45 @@ class MessageActions_Tests: StreamChatTestCase {
374374
// Then
375375
XCTAssertTrue(messageActions.contains(where: { $0.title == "Edit Message" }))
376376
}
377+
378+
func test_messageActions_otherUser_deletingEnabledWhenDeleteAnyMessageCapability() {
379+
// Given
380+
let channel = ChatChannel.mockDMChannel(ownCapabilities: [.deleteAnyMessage])
381+
let message = ChatMessage.mock(
382+
id: .unique,
383+
cid: channel.cid,
384+
text: "Test",
385+
author: .mock(id: .unique),
386+
isSentByCurrentUser: false
387+
)
388+
let factory = DefaultViewFactory.shared
389+
390+
// When
391+
let messageActions = MessageAction.defaultActions(
392+
factory: factory,
393+
for: message,
394+
channel: channel,
395+
chatClient: chatClient,
396+
onFinish: { _ in },
397+
onError: { _ in }
398+
)
399+
400+
// Then
401+
XCTAssertTrue(messageActions.contains(where: { $0.title == "Delete Message" }))
402+
}
377403

378404
// MARK: - Private
379405

380406
private var mockDMChannel: ChatChannel {
381407
ChatChannel.mockDMChannel(
382-
ownCapabilities: [.updateOwnMessage, .sendMessage, .uploadFile, .pinMessage, .readEvents]
408+
ownCapabilities: [
409+
.deleteOwnMessage,
410+
.updateOwnMessage,
411+
.sendMessage,
412+
.uploadFile,
413+
.pinMessage,
414+
.readEvents
415+
]
383416
)
384417
}
385418
}

0 commit comments

Comments
 (0)