- Re-write the methods for clarity - Remove the dependency on the ReportHelper class. - Remove n+1 queries in the average metric time series data.
51 lines
1.8 KiB
Ruby
51 lines
1.8 KiB
Ruby
require 'rails_helper'
|
|
|
|
RSpec.describe V2::Reports::Conversations::MetricBuilder, type: :model do
|
|
subject { described_class.new(account, params) }
|
|
|
|
let(:account) { create(:account) }
|
|
let(:params) { { since: '2023-01-01', until: '2024-01-01' } }
|
|
let(:count_builder_instance) { instance_double(V2::Reports::Timeseries::CountReportBuilder, aggregate_value: 42) }
|
|
let(:avg_builder_instance) { instance_double(V2::Reports::Timeseries::AverageReportBuilder, aggregate_value: 42) }
|
|
|
|
before do
|
|
allow(V2::Reports::Timeseries::CountReportBuilder).to receive(:new).and_return(count_builder_instance)
|
|
allow(V2::Reports::Timeseries::AverageReportBuilder).to receive(:new).and_return(avg_builder_instance)
|
|
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
|
|
}
|
|
)
|
|
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'))
|
|
end
|
|
end
|
|
|
|
describe '#bot_summary' do
|
|
it 'returns a detailed summary of bot-specific conversation metrics' do
|
|
bot_summary = subject.bot_summary
|
|
expect(bot_summary).to eq(
|
|
{
|
|
bot_resolutions_count: 42,
|
|
bot_handoffs_count: 42
|
|
}
|
|
)
|
|
end
|
|
end
|
|
end
|