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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user