diff --git a/lib/stream-chat/client.rb b/lib/stream-chat/client.rb index fa587e1..bf5e60e 100644 --- a/lib/stream-chat/client.rb +++ b/lib/stream-chat/client.rb @@ -419,6 +419,13 @@ def delete_message(message_id, **options) delete("messages/#{message_id}", params: options) end + # Un-deletes a message. + sig { params(message_id: String, undeleted_by: String, options: T.untyped).returns(StreamChat::StreamResponse) } + def undelete_message(message_id, undeleted_by, **options) + payload = { undeleted_by: undeleted_by }.merge(options) + post("messages/#{message_id}/undelete", data: payload) + end + # Queries banned users. # # Banned users can be retrieved in different ways: diff --git a/spec/client_spec.rb b/spec/client_spec.rb index 05379ef..31d116d 100644 --- a/spec/client_spec.rb +++ b/spec/client_spec.rb @@ -411,6 +411,28 @@ def loop_times(times) @client.delete_message(msg_id, hard: true) end + it 'undeletes a message' do + msg_id = SecureRandom.uuid + user_id = @random_user[:id] + @channel.send_message({ + 'id' => msg_id, + 'text' => 'to be deleted and restored' + }, user_id) + # soft delete + @client.delete_message(msg_id) + + # check it is deleted + response = @client.get_message(msg_id, show_deleted_message: true) + expect(response['message']['deleted_at']).not_to be_nil + + # now undelete + @client.undelete_message(msg_id, user_id) + + # now we should be able to get it without an error and without the flag + response = @client.get_message(msg_id) + expect(response['message']['deleted_at']).to be_nil + end + it 'query banned users' do @client.ban_user(@random_user[:id], user_id: @random_users[0][:id], reason: 'rubytest') response = @client.query_banned_users({ 'reason' => 'rubytest' }, limit: 1)