chore: fix flaky spec (#7686)

- fix flaky reporting specs
- fix flaky export spec
This commit is contained in:
Sojan Jose
2023-08-25 00:11:41 -07:00
committed by GitHub
parent 5598b4b27e
commit 6ab964b161
3 changed files with 87 additions and 83 deletions

View File

@@ -9,46 +9,48 @@ describe V2::ReportBuilder do
# Update this spec to use travel_to # Update this spec to use travel_to
# This spec breaks in certain timezone # This spec breaks in certain timezone
describe '#timeseries' do describe '#timeseries' do
before_all do before do
user = create(:user, account: account) travel_to(Time.zone.today) do
inbox = create(:inbox, account: account) user = create(:user, account: account)
create(:inbox_member, user: user, inbox: inbox) inbox = create(:inbox, account: account)
create(:inbox_member, user: user, inbox: inbox)
gravatar_url = 'https://www.gravatar.com' gravatar_url = 'https://www.gravatar.com'
stub_request(:get, /#{gravatar_url}.*/).to_return(status: 404) stub_request(:get, /#{gravatar_url}.*/).to_return(status: 404)
perform_enqueued_jobs do perform_enqueued_jobs do
10.times do 10.times do
conversation = create(:conversation, account: account, conversation = create(:conversation, account: account,
inbox: inbox, assignee: user, inbox: inbox, assignee: user,
created_at: Time.zone.today) created_at: Time.zone.today)
create_list(:message, 5, message_type: 'outgoing', create_list(:message, 5, message_type: 'outgoing',
account: account, inbox: inbox, account: account, inbox: inbox,
conversation: conversation, created_at: Time.zone.today + 2.hours) conversation: conversation, created_at: Time.zone.today + 2.hours)
create_list(:message, 2, message_type: 'incoming', create_list(:message, 2, message_type: 'incoming',
account: account, inbox: inbox, account: account, inbox: inbox,
conversation: conversation, conversation: conversation,
created_at: Time.zone.today + 3.hours) created_at: Time.zone.today + 3.hours)
conversation.update_labels('label_1') conversation.update_labels('label_1')
conversation.label_list conversation.label_list
conversation.save! conversation.save!
end end
5.times do 5.times do
conversation = create(:conversation, account: account, conversation = create(:conversation, account: account,
inbox: inbox, assignee: user, inbox: inbox, assignee: user,
created_at: (Time.zone.today - 2.days)) created_at: (Time.zone.today - 2.days))
create_list(:message, 3, message_type: 'outgoing', create_list(:message, 3, message_type: 'outgoing',
account: account, inbox: inbox, account: account, inbox: inbox,
conversation: conversation, conversation: conversation,
created_at: (Time.zone.today - 2.days)) created_at: (Time.zone.today - 2.days))
create_list(:message, 1, message_type: 'incoming', create_list(:message, 1, message_type: 'incoming',
account: account, inbox: inbox, account: account, inbox: inbox,
conversation: conversation, conversation: conversation,
created_at: (Time.zone.today - 2.days)) created_at: (Time.zone.today - 2.days))
conversation.update_labels('label_2') conversation.update_labels('label_2')
conversation.label_list conversation.label_list
conversation.save! conversation.save!
end
end end
end end
end end
@@ -100,28 +102,30 @@ describe V2::ReportBuilder do
end end
it 'return resolutions count' do it 'return resolutions count' do
params = { travel_to(Time.zone.today) do
metric: 'resolutions_count', params = {
type: :account, metric: 'resolutions_count',
since: (Time.zone.today - 3.days).to_time.to_i.to_s, type: :account,
until: Time.zone.today.end_of_day.to_time.to_i.to_s since: (Time.zone.today - 3.days).to_time.to_i.to_s,
} until: Time.zone.today.end_of_day.to_time.to_i.to_s
}
conversations = account.conversations.where('created_at < ?', 1.day.ago) conversations = account.conversations.where('created_at < ?', 1.day.ago)
perform_enqueued_jobs do perform_enqueued_jobs do
# Resolve all 5 conversations # Resolve all 5 conversations
conversations.each(&:resolved!) conversations.each(&:resolved!)
# Reopen 1 conversation # Reopen 1 conversation
conversations.first.open! conversations.first.open!
end
builder = described_class.new(account, params)
metrics = builder.timeseries
# 4 conversations are resolved
expect(metrics[Time.zone.today]).to be 4
expect(metrics[Time.zone.today - 2.days]).to be 0
end end
builder = described_class.new(account, params)
metrics = builder.timeseries
# 4 conversations are resolved
expect(metrics[Time.zone.today]).to be 4
expect(metrics[Time.zone.today - 2.days]).to be 0
end end
it 'returns average first response time' do it 'returns average first response time' do
@@ -218,30 +222,32 @@ describe V2::ReportBuilder do
end end
it 'return resolutions count' do it 'return resolutions count' do
params = { travel_to(Time.zone.today) do
metric: 'resolutions_count', params = {
type: :label, metric: 'resolutions_count',
id: label_2.id, type: :label,
since: (Time.zone.today - 3.days).to_time.to_i.to_s, id: label_2.id,
until: (Time.zone.today + 1.day).to_time.to_i.to_s since: (Time.zone.today - 3.days).to_time.to_i.to_s,
} until: (Time.zone.today + 1.day).to_time.to_i.to_s
}
conversations = account.conversations.where('created_at < ?', 1.day.ago) conversations = account.conversations.where('created_at < ?', 1.day.ago)
perform_enqueued_jobs do perform_enqueued_jobs do
# ensure 5 reporting events are created # ensure 5 reporting events are created
conversations.each(&:resolved!) conversations.each(&:resolved!)
# open one of the conversations to check if it is not counted # open one of the conversations to check if it is not counted
conversations.last.open! conversations.last.open!
end
builder = described_class.new(account, params)
metrics = builder.timeseries
# this should count only 4 since the last conversation was reopened
expect(metrics[Time.zone.today]).to be 4
expect(metrics[Time.zone.today - 2.days]).to be 0
end end
builder = described_class.new(account, params)
metrics = builder.timeseries
# this should count only 4 since the last conversation was reopened
expect(metrics[Time.zone.today]).to be 4
expect(metrics[Time.zone.today - 2.days]).to be 0
end end
it 'returns average first response time' do it 'returns average first response time' do

View File

@@ -15,7 +15,7 @@ RSpec.describe 'Reports API', type: :request do
before do before do
create_list(:conversation, 10, account: account, inbox: inbox, create_list(:conversation, 10, account: account, inbox: inbox,
assignee: user, created_at: Time.zone.today) assignee: user, created_at: Time.current.in_time_zone(default_timezone).to_date)
end end
describe 'GET /api/v2/accounts/:account_id/reports/account' do describe 'GET /api/v2/accounts/:account_id/reports/account' do

View File

@@ -37,15 +37,13 @@ RSpec.describe Account::ContactsExportJob do
described_class.perform_now(account.id, []) described_class.perform_now(account.id, [])
csv_data = CSV.parse(account.contacts_export.download, headers: true) csv_data = CSV.parse(account.contacts_export.download, headers: true)
first_row = csv_data[0] emails = csv_data.pluck('email')
last_row = csv_data[csv_data.length - 1] phone_numbers = csv_data.pluck('phone_number')
first_contact = account.contacts.find_by(email: 'test1@text.example')
last_contact = account.contacts.find_by(email: 'test2@text.example')
expect(csv_data.length).to eq(account.contacts.count) expect(csv_data.length).to eq(account.contacts.count)
expect([first_row['email'], last_row['email']]).to contain_exactly(first_contact.email, last_contact.email) expect(emails).to include('test1@text.example', 'test2@text.example')
expect([first_row['phone_number'], last_row['phone_number']]).to contain_exactly(first_contact.phone_number, last_contact.phone_number) expect(phone_numbers).to include('+910808080818', '+910808080808')
end end
end end
end end