diff --git a/app/models/conversation.rb b/app/models/conversation.rb index 3a39b82fc..df4bbf31c 100644 --- a/app/models/conversation.rb +++ b/app/models/conversation.rb @@ -124,6 +124,10 @@ class Conversation < ApplicationRecord last_message_in_messaging_window?(messaging_window) end + def last_activity_at + self[:last_activity_at] || created_at + end + def last_incoming_message messages&.incoming&.last end diff --git a/app/presenters/conversations/event_data_presenter.rb b/app/presenters/conversations/event_data_presenter.rb index 67c7dc1dd..2617721ec 100644 --- a/app/presenters/conversations/event_data_presenter.rb +++ b/app/presenters/conversations/event_data_presenter.rb @@ -40,6 +40,7 @@ class Conversations::EventDataPresenter < SimpleDelegator { agent_last_seen_at: agent_last_seen_at.to_i, contact_last_seen_at: contact_last_seen_at.to_i, + last_activity_at: last_activity_at.to_i, timestamp: last_activity_at.to_i, created_at: created_at.to_i } diff --git a/spec/models/conversation_spec.rb b/spec/models/conversation_spec.rb index 0ca7303ef..5813d8c3c 100644 --- a/spec/models/conversation_spec.rb +++ b/spec/models/conversation_spec.rb @@ -525,6 +525,7 @@ RSpec.describe Conversation do id: conversation.display_id, messages: [], labels: [], + last_activity_at: conversation.last_activity_at.to_i, inbox_id: conversation.inbox_id, status: conversation.status, contact_inbox: conversation.contact_inbox, @@ -881,4 +882,39 @@ RSpec.describe Conversation do expect(conversation.cached_label_list_array).to eq %w[customer-support enterprise paid-customer] end end + + describe '#last_activity_at' do + let(:conversation) { create(:conversation) } + let(:message_params) do + { + conversation: conversation, + account: conversation.account, + inbox: conversation.inbox, + sender: conversation.assignee + } + end + + context 'when a new conversation is created' do + it 'sets last_activity_at to the created_at time' do + expect(conversation.last_activity_at).to eq(conversation.created_at) + end + end + + context 'when a new message is added' do + it 'updates the last_activity_at to the new message\'s created_at time' do + message = create(:message, created_at: 1.hour.from_now, **message_params) + conversation.reload + expect(conversation.last_activity_at).to be_within(1.second).of(message.created_at) + end + end + + context 'when multiple messages are added' do + it 'sets last_activity_at to the most recent message\'s created_at time' do + create(:message, created_at: 2.hours.ago, **message_params) + latest_message = create(:message, created_at: 1.hour.from_now, **message_params) + conversation.reload + expect(conversation.last_activity_at).to be_within(1.second).of(latest_message.created_at) + end + end + end end