Skip to content

Commit aedef36

Browse files
author
Daksh
committed
add methods and tests
1 parent 7239afa commit aedef36

File tree

2 files changed

+91
-0
lines changed

2 files changed

+91
-0
lines changed

lib/stream-chat/client.rb

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,35 @@ def delete_message(message_id, **options)
431431
delete("messages/#{message_id}", params: options)
432432
end
433433

434+
# Deletes a message with hard delete option.
435+
sig { params(message_id: String).returns(StreamChat::StreamResponse) }
436+
def hard_delete_message(message_id)
437+
delete_message(message_id, hard: true)
438+
end
439+
440+
# Deletes a message with delete_for_me option.
441+
sig { params(message_id: String, user_id: String).returns(StreamChat::StreamResponse) }
442+
def delete_message_for_me(message_id, user_id)
443+
raise ArgumentError, 'user_id must not be empty for delete_for_me functionality' if user_id.to_s.empty?
444+
445+
delete_message(message_id, delete_for_me: true, deleted_by: user_id)
446+
end
447+
448+
# Deletes a message with advanced options.
449+
sig { params(message_id: String, hard: T.nilable(T::Boolean), delete_for_me: T.nilable(T::Boolean), user_id: T.nilable(String)).returns(StreamChat::StreamResponse) }
450+
def delete_message_with_options(message_id, hard: nil, delete_for_me: nil, user_id: nil)
451+
options = {}
452+
options[:hard] = true if hard
453+
454+
if delete_for_me
455+
raise ArgumentError, 'user_id must not be empty for delete_for_me functionality' if user_id.to_s.empty?
456+
options[:delete_for_me] = true
457+
options[:deleted_by] = user_id
458+
end
459+
460+
delete_message(message_id, **options)
461+
end
462+
434463
# Un-deletes a message.
435464
sig { params(message_id: String, undeleted_by: String, options: T.untyped).returns(StreamChat::StreamResponse) }
436465
def undelete_message(message_id, undeleted_by, **options)

spec/client_spec.rb

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,68 @@ def loop_times(times)
423423
@client.delete_message(msg_id, hard: true)
424424
end
425425

426+
it 'hard deletes a message using hard_delete_message method' do
427+
msg_id = SecureRandom.uuid
428+
@channel.send_message({
429+
'id' => msg_id,
430+
'text' => 'hello world'
431+
}, @random_user[:id])
432+
@client.hard_delete_message(msg_id)
433+
end
434+
435+
it 'deletes a message for me using delete_message_for_me method' do
436+
msg_id = SecureRandom.uuid
437+
user_id = @random_user[:id]
438+
@channel.send_message({
439+
'id' => msg_id,
440+
'text' => 'test message to delete for me'
441+
}, user_id)
442+
@client.delete_message_for_me(msg_id, user_id)
443+
end
444+
445+
it 'deletes a message with options using delete_message_with_options method' do
446+
msg_id = SecureRandom.uuid
447+
user_id = @random_user[:id]
448+
@channel.send_message({
449+
'id' => msg_id,
450+
'text' => 'test message to delete with options'
451+
}, user_id)
452+
@client.delete_message_with_options(msg_id, delete_for_me: true, user_id: user_id)
453+
end
454+
455+
it 'hard deletes a message with options using delete_message_with_options method' do
456+
msg_id = SecureRandom.uuid
457+
@channel.send_message({
458+
'id' => msg_id,
459+
'text' => 'test message to hard delete with options'
460+
}, @random_user[:id])
461+
@client.delete_message_with_options(msg_id, hard: true)
462+
end
463+
464+
it 'raises error when delete_for_me is true but user_id is empty' do
465+
msg_id = SecureRandom.uuid
466+
@channel.send_message({
467+
'id' => msg_id,
468+
'text' => 'test message'
469+
}, @random_user[:id])
470+
471+
expect {
472+
@client.delete_message_for_me(msg_id, '')
473+
}.to raise_error(ArgumentError, 'user_id must not be empty for delete_for_me functionality')
474+
end
475+
476+
it 'raises error when delete_for_me is true but user_id is nil in delete_message_with_options' do
477+
msg_id = SecureRandom.uuid
478+
@channel.send_message({
479+
'id' => msg_id,
480+
'text' => 'test message'
481+
}, @random_user[:id])
482+
483+
expect {
484+
@client.delete_message_with_options(msg_id, delete_for_me: true, user_id: nil)
485+
}.to raise_error(ArgumentError, 'user_id must not be empty for delete_for_me functionality')
486+
end
487+
426488
it 'undeletes a message' do
427489
msg_id = SecureRandom.uuid
428490
user_id = @random_user[:id]

0 commit comments

Comments
 (0)