diff --git a/app/listeners/reporting_event_listener.rb b/app/listeners/reporting_event_listener.rb index 9f683a97f..7c1ba01c4 100644 --- a/app/listeners/reporting_event_listener.rb +++ b/app/listeners/reporting_event_listener.rb @@ -67,6 +67,23 @@ class ReportingEventListener < BaseListener reporting_event.save! end + def conversation_created(event) + conversation = extract_conversation_and_account(event)[0] + + reporting_event = ReportingEvent.new( + name: 'conversation_created', + value: 0, + value_in_business_hours: 0, + account_id: conversation.account_id, + inbox_id: conversation.inbox_id, + user_id: nil, + conversation_id: conversation.id, + event_start_time: conversation.created_at, + event_end_time: conversation.created_at + ) + reporting_event.save! + end + def conversation_bot_handoff(event) conversation = extract_conversation_and_account(event)[0] diff --git a/spec/listeners/reporting_event_listener_spec.rb b/spec/listeners/reporting_event_listener_spec.rb index b31a85df1..690343ed4 100644 --- a/spec/listeners/reporting_event_listener_spec.rb +++ b/spec/listeners/reporting_event_listener_spec.rb @@ -10,6 +10,30 @@ describe ReportingEventListener do account: account, inbox: inbox, conversation: conversation) end + describe '#conversation_created' do + it 'creates conversation_created event' do + expect(account.reporting_events.where(name: 'conversation_created').count).to be 0 + event = Events::Base.new('conversation.created', Time.zone.now, conversation: conversation) + listener.conversation_created(event) + expect(account.reporting_events.where(name: 'conversation_created').count).to be 1 + + created_event = account.reporting_events.where(name: 'conversation_created').first + expect(created_event.value).to eq 0 + expect(created_event.conversation_id).to eq conversation.id + end + + it 'creates conversation_created event when conversation is created' do + # ensure gravatar job does not send a request + stub_request(:get, /gravatar\.com/).to_return(status: 404, body: '', headers: {}) + + expect do + perform_enqueued_jobs do + create(:conversation, account: account, inbox: inbox) + end + end.to change { account.reporting_events.where(name: 'conversation_created').count }.by(1) + end + end + describe '#conversation_resolved' do it 'creates conversation_resolved event' do expect(account.reporting_events.where(name: 'conversation_resolved').count).to be 0