require 'rails_helper' RSpec.describe V2::Reports::TeamSummaryBuilder do let(:account) { create(:account) } let(:team1) { create(:team, account: account, name: 'team-1') } let(:team2) { create(:team, account: account, name: 'team-2') } let(:params) do { business_hours: business_hours, since: 1.week.ago.beginning_of_day, until: Time.current.end_of_day } end let(:builder) { described_class.new(account: account, params: params) } describe '#build' do context 'when there is team data' do before do c1 = create(:conversation, account: account, team: team1, created_at: Time.current) c2 = create(:conversation, account: account, team: team2, created_at: Time.current) create( :reporting_event, account: account, conversation: c2, name: 'conversation_resolved', value: 50, value_in_business_hours: 40, created_at: Time.current ) create( :reporting_event, account: account, conversation: c1, name: 'first_response', value: 20, value_in_business_hours: 10, created_at: Time.current ) create( :reporting_event, account: account, conversation: c1, name: 'reply_time', value: 30, value_in_business_hours: 15, created_at: Time.current ) create( :reporting_event, account: account, conversation: c1, name: 'reply_time', value: 40, value_in_business_hours: 25, created_at: Time.current ) end context 'when business hours is disabled' do let(:business_hours) { false } it 'returns the correct team stats' do report = builder.build expect(report).to eq( [ { id: team1.id, conversations_count: 1, resolved_conversations_count: 0, avg_resolution_time: nil, avg_first_response_time: 20.0, avg_reply_time: 35.0 }, { id: team2.id, conversations_count: 1, resolved_conversations_count: 1, avg_resolution_time: 50.0, avg_first_response_time: nil, avg_reply_time: nil } ] ) end end context 'when business hours is enabled' do let(:business_hours) { true } it 'uses business hours values' do report = builder.build expect(report).to eq( [ { id: team1.id, conversations_count: 1, resolved_conversations_count: 0, avg_resolution_time: nil, avg_first_response_time: 10.0, avg_reply_time: 20.0 }, { id: team2.id, conversations_count: 1, resolved_conversations_count: 1, avg_resolution_time: 40.0, avg_first_response_time: nil, avg_reply_time: nil } ] ) end end end context 'when there is no team data' do let!(:new_team) { create(:team, account: account) } let(:business_hours) { false } it 'returns zero values' do report = builder.build expect(report).to include( { id: new_team.id, conversations_count: 0, resolved_conversations_count: 0, avg_resolution_time: nil, avg_first_response_time: nil, avg_reply_time: nil } ) end end end end