feat: sort conversation on priority (#6943)

* feat: update seed script to include prioritt

* feat: add sort_handler for conversations

* test: sort on priority order

---------

Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com>
This commit is contained in:
Shivam Mishra
2023-04-25 09:47:47 +05:30
committed by GitHub
parent cf91e9eb58
commit 0bbb28c432
4 changed files with 47 additions and 6 deletions

View File

@@ -691,15 +691,17 @@ RSpec.describe Conversation, type: :model do
describe 'Custom Sort' do
include ActiveJob::TestHelper
let!(:conversation_4) { create(:conversation, created_at: DateTime.now - 10.days, last_activity_at: DateTime.now - 10.days) }
let!(:conversation_3) { create(:conversation, created_at: DateTime.now - 9.days, last_activity_at: DateTime.now - 9.days) }
let!(:conversation_1) { create(:conversation, created_at: DateTime.now - 8.days, last_activity_at: DateTime.now - 8.days) }
let!(:conversation_2) { create(:conversation, created_at: DateTime.now - 6.days, last_activity_at: DateTime.now - 6.days) }
let!(:conversation_7) { create(:conversation, created_at: DateTime.now - 10.days, last_activity_at: DateTime.now - 13.days) }
let!(:conversation_6) { create(:conversation, created_at: DateTime.now - 10.days, last_activity_at: DateTime.now - 10.days) }
let!(:conversation_5) { create(:conversation, created_at: DateTime.now - 10.days, last_activity_at: DateTime.now - 12.days, priority: :urgent) }
let!(:conversation_4) { create(:conversation, created_at: DateTime.now - 10.days, last_activity_at: DateTime.now - 10.days, priority: :urgent) }
let!(:conversation_3) { create(:conversation, created_at: DateTime.now - 9.days, last_activity_at: DateTime.now - 9.days, priority: :low) }
let!(:conversation_2) { create(:conversation, created_at: DateTime.now - 6.days, last_activity_at: DateTime.now - 6.days, priority: :high) }
let!(:conversation_1) { create(:conversation, created_at: DateTime.now - 8.days, last_activity_at: DateTime.now - 8.days, priority: :medium) }
it 'Sort conversations based on created_at' do
records = described_class.sort_on_created_at
expect(records.first.id).to eq(conversation_4.id)
expect(records.first.id).to eq(conversation_7.id)
expect(records.last.id).to eq(conversation_2.id)
end
@@ -778,5 +780,28 @@ RSpec.describe Conversation, type: :model do
expect(records.first.id).to eq(conversation_3.id)
end
end
context 'when sort on priority' do
it 'Sort conversations with the following order high > medium > low > nil' do
# ensure they are not pre-sorted
records = described_class.sort_on_created_at
expect(records.pluck(:priority)).not_to eq(['urgent', 'urgent', 'high', 'medium', 'low', nil, nil])
records = described_class.sort_on_priority
expect(records.pluck(:priority)).to eq(['urgent', 'urgent', 'high', 'medium', 'low', nil, nil])
end
it 'sorts conversation with last_activity for the same priority' do
records = described_class.where(priority: 'urgent').sort_on_priority
# ensure that the conversation 4 last_activity_at is more recent than conversation 5
expect(conversation_4.last_activity_at > conversation_5.last_activity_at).to be(true)
expect(records.pluck(:priority, :id)).to eq([['urgent', conversation_4.id], ['urgent', conversation_5.id]])
records = described_class.where(priority: nil).sort_on_priority
# ensure that the conversation 6 last_activity_at is more recent than conversation 7
expect(conversation_6.last_activity_at > conversation_7.last_activity_at).to be(true)
expect(records.pluck(:priority, :id)).to eq([[nil, conversation_6.id], [nil, conversation_7.id]])
end
end
end
end