From 0134cbeed0eacd5fe2b77ce0dfe96f95e7b92aa0 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Tue, 14 Oct 2025 16:32:57 +0530 Subject: [PATCH] feat: ignore incoming messages for agent report --- .../reports/conversations/metric_builder.rb | 8 ++- .../conversations/metric_builder_spec.rb | 64 ++++++++++++++----- 2 files changed, 53 insertions(+), 19 deletions(-) diff --git a/app/builders/v2/reports/conversations/metric_builder.rb b/app/builders/v2/reports/conversations/metric_builder.rb index 6635fb186..918d23eca 100644 --- a/app/builders/v2/reports/conversations/metric_builder.rb +++ b/app/builders/v2/reports/conversations/metric_builder.rb @@ -1,14 +1,18 @@ class V2::Reports::Conversations::MetricBuilder < V2::Reports::Conversations::BaseReportBuilder def summary - { + result = { conversations_count: count('conversations_count'), - incoming_messages_count: count('incoming_messages_count'), outgoing_messages_count: count('outgoing_messages_count'), avg_first_response_time: count('avg_first_response_time'), avg_resolution_time: count('avg_resolution_time'), resolutions_count: count('resolutions_count'), reply_time: count('reply_time') } + + # Only include incoming_messages_count for non-agent summaries + result[:incoming_messages_count] = count('incoming_messages_count') unless params[:type] == :agent + + result end def bot_summary diff --git a/spec/builders/v2/reports/conversations/metric_builder_spec.rb b/spec/builders/v2/reports/conversations/metric_builder_spec.rb index 1b0ed7a38..935f225e8 100644 --- a/spec/builders/v2/reports/conversations/metric_builder_spec.rb +++ b/spec/builders/v2/reports/conversations/metric_builder_spec.rb @@ -14,25 +14,55 @@ RSpec.describe V2::Reports::Conversations::MetricBuilder, type: :model do end describe '#summary' do - it 'returns the correct summary values' do - summary = subject.summary - expect(summary).to eq( - { - conversations_count: 42, - incoming_messages_count: 42, - outgoing_messages_count: 42, - avg_first_response_time: 42, - avg_resolution_time: 42, - resolutions_count: 42, - reply_time: 42 - } - ) + context 'when type is not agent' do + let(:params) { { since: '2023-01-01', until: '2024-01-01', type: :inbox } } + + it 'returns the correct summary values including incoming_messages_count' do + summary = subject.summary + expect(summary).to eq( + { + conversations_count: 42, + outgoing_messages_count: 42, + avg_first_response_time: 42, + avg_resolution_time: 42, + resolutions_count: 42, + reply_time: 42, + incoming_messages_count: 42 + } + ) + end + + it 'creates builders with proper params' do + subject.summary + expect(V2::Reports::Timeseries::CountReportBuilder).to have_received(:new).with(account, params.merge(metric: 'conversations_count')) + expect(V2::Reports::Timeseries::CountReportBuilder).to have_received(:new).with(account, params.merge(metric: 'incoming_messages_count')) + expect(V2::Reports::Timeseries::AverageReportBuilder).to have_received(:new).with(account, params.merge(metric: 'avg_first_response_time')) + end end - it 'creates builders with proper params' do - subject.summary - expect(V2::Reports::Timeseries::CountReportBuilder).to have_received(:new).with(account, params.merge(metric: 'conversations_count')) - expect(V2::Reports::Timeseries::AverageReportBuilder).to have_received(:new).with(account, params.merge(metric: 'avg_first_response_time')) + context 'when type is agent' do + let(:params) { { since: '2023-01-01', until: '2024-01-01', type: :agent } } + + it 'returns the correct summary values without incoming_messages_count' do + summary = subject.summary + expect(summary).to eq( + { + conversations_count: 42, + outgoing_messages_count: 42, + avg_first_response_time: 42, + avg_resolution_time: 42, + resolutions_count: 42, + reply_time: 42 + } + ) + end + + it 'does not create builder for incoming_messages_count' do + subject.summary + expect(V2::Reports::Timeseries::CountReportBuilder).to have_received(:new).with(account, params.merge(metric: 'conversations_count')) + expect(V2::Reports::Timeseries::CountReportBuilder).not_to have_received(:new).with(account, params.merge(metric: 'incoming_messages_count')) + expect(V2::Reports::Timeseries::AverageReportBuilder).to have_received(:new).with(account, params.merge(metric: 'avg_first_response_time')) + end end end