diff --git a/app/finders/message_finder.rb b/app/finders/message_finder.rb index 56173cd63..8854e239a 100644 --- a/app/finders/message_finder.rb +++ b/app/finders/message_finder.rb @@ -22,11 +22,29 @@ class MessageFinder def current_messages if @params[:after].present? && @params[:before].present? - messages.reorder('created_at asc').where('id >= ? AND id < ?', @params[:after].to_i, @params[:before].to_i).limit(1000) + messages_between(@params[:after].to_i, @params[:before].to_i) elsif @params[:before].present? - messages.reorder('created_at desc').where('id < ?', @params[:before].to_i).limit(20).reverse + messages_before(@params[:before].to_i) + elsif @params[:after].present? + messages_after(@params[:after].to_i) else - messages.reorder('created_at desc').limit(20).reverse + messages_latest end end + + def messages_after(after_id) + messages.reorder('created_at asc').where('id > ?', after_id).limit(100) + end + + def messages_before(before_id) + messages.reorder('created_at desc').where('id < ?', before_id).limit(20).reverse + end + + def messages_between(after_id, before_id) + messages.reorder('created_at asc').where('id >= ? AND id < ?', after_id, before_id).limit(1000) + end + + def messages_latest + messages.reorder('created_at desc').limit(20).reverse + end end diff --git a/spec/finders/message_finder_spec.rb b/spec/finders/message_finder_spec.rb index ad43ca50e..d61a0785b 100644 --- a/spec/finders/message_finder_spec.rb +++ b/spec/finders/message_finder_spec.rb @@ -53,10 +53,25 @@ describe ::MessageFinder do it 'filter conversations by status' do result = message_finder.perform - expect(result.count).to be 6 - expect(result.first.id).to be conversation.messages.first.id + expect(result.count).to be 5 + expect(result.first.id).to be conversation.messages.second.id expect(result.last.message_type).to eq 'outgoing' end end + + context 'with after and before attribute' do + let(:params) do + { + after: conversation.messages.first.id, + before: conversation.messages.last.id + } + end + + it 'filter conversations by status' do + result = message_finder.perform + expect(result.count).to be 5 + expect(result.last.id).to be conversation.messages[-2].id + end + end end end