diff --git a/lib/stream-chat/client.rb b/lib/stream-chat/client.rb index dbbd7ab..13a96f1 100644 --- a/lib/stream-chat/client.rb +++ b/lib/stream-chat/client.rb @@ -1065,6 +1065,15 @@ def query_reminders(user_id, filter_conditions = {}, sort: nil, **options) post('reminders/query', data: params) end + # Send the mark delivered event for this user, only works if the `delivery_receipts` setting is enabled + # + # @param [StringKeyHash, nil] data The delivery confirmation data + # @return [StreamChat::StreamResponse] API response + sig { params(data: T.nilable(StringKeyHash), user_id: T.nilable(String)).returns(StreamChat::StreamResponse) } + def mark_delivered(data = nil, user_id: nil) + post('channels/delivered', data: data || {}, params: { user_id: user_id }) + end + private sig { returns(T::Hash[String, String]) } diff --git a/spec/channel_spec.rb b/spec/channel_spec.rb index 9ff2755..0971ef3 100644 --- a/spec/channel_spec.rb +++ b/spec/channel_spec.rb @@ -354,6 +354,9 @@ def loop_times(times) end it 'can send message with restricted visibility' do + # Add users as members before testing restricted visibility + @channel.add_members([@random_users[0][:id], @random_users[1][:id]]) + # Send a message that's only visible to specific users msg = @channel.send_message( { @@ -372,6 +375,9 @@ def loop_times(times) end it 'can update message with restricted visibility' do + # Add users as members before testing restricted visibility + @channel.add_members([@random_users[0][:id], @random_users[1][:id]]) + # First send a regular message msg = @channel.send_message( { @@ -399,6 +405,9 @@ def loop_times(times) end it 'can update message partially with restricted visibility' do + # Add users as members before testing restricted visibility + @channel.add_members([@random_users[0][:id], @random_users[1][:id]]) + # First send a regular message msg = @channel.send_message( { diff --git a/spec/client_spec.rb b/spec/client_spec.rb index ddde19e..5dc819d 100644 --- a/spec/client_spec.rb +++ b/spec/client_spec.rb @@ -1435,4 +1435,28 @@ def loop_times(times) expect(response['active_live_locations'].length).to be >= 1 end end + + describe '#mark_delivered' do + it 'should mark messages as delivered' do + # Create some test messages first + message = @channel.send_message({ text: 'Test message 1' }, @frodo) + + # Create delivery confirmation data + delivery_data = { + latest_delivered_messages: [ + { + cid: @channel.cid, + id: message['message']['id'] + } + ], + user_id: @gandalf + } + + # Call the method + response = @client.mark_delivered(delivery_data, user_id: @gandalf) + + # The response should be successful (status 201) + expect(response.status_code).to eq(201) + end + end end