diff --git a/app/models/message/pagination.rb b/app/models/message/pagination.rb index 3be7983..0e7690b 100644 --- a/app/models/message/pagination.rb +++ b/app/models/message/pagination.rb @@ -49,7 +49,7 @@ module Message::Pagination end def paged? - count > PAGE_SIZE + offset(PAGE_SIZE).exists? end end end diff --git a/test/models/message_test.rb b/test/models/message_test.rb index 5ffecea..df3a694 100644 --- a/test/models/message_test.rb +++ b/test/models/message_test.rb @@ -65,6 +65,18 @@ class MessageTest < ActiveSupport::TestCase assert_equal room.messages.ordered.first(Message::Pagination::PAGE_SIZE).map(&:id), room.messages.first_page.map(&:id) end + test "paged? tells whether a room has more than a page of messages without counting them all" do + room = Rooms::Closed.create!(name: "Paging", creator: users(:david)) + Message.insert_all Array.new(Message::Pagination::PAGE_SIZE) { |i| { room_id: room.id, creator_id: users(:david).id, client_message_id: "paging-#{i}" } } + + assert_no_queries_match(/COUNT/i) do + assert_not room.messages.paged? + + Message.insert_all [ { room_id: room.id, creator_id: users(:david).id, client_message_id: "paging-next" } ] + assert room.messages.paged? + end + end + private def create_new_message_in(room) room.messages.create!(creator: users(:jason), body: "Hello", client_message_id: "123")