FIX: Display actual readers on the first post

FIX: Display actual readers on the first post

diff --git a/app/controllers/post_readers_controller.rb b/app/controllers/post_readers_controller.rb
index 76d75a7..a5fd76f 100644
--- a/app/controllers/post_readers_controller.rb
+++ b/app/controllers/post_readers_controller.rb
@@ -10,7 +10,8 @@ class PostReadersController < ApplicationController
 
     readers = User
       .joins(:topic_users)
-      .where('topic_users.topic_id = ? AND COALESCE(topic_users.last_read_post_number, 1) >= ?', post.topic_id, post.post_number)
+      .where.not(topic_users: { last_read_post_number: nil })
+      .where('topic_users.topic_id = ? AND topic_users.last_read_post_number >= ?', post.topic_id, post.post_number)
       .where.not(id: [current_user.id, post.user_id])
 
     readers = readers.map do |r|
diff --git a/spec/requests/post_readers_controller_spec.rb b/spec/requests/post_readers_controller_spec.rb
index fa2cf3d..d5d60c8 100644
--- a/spec/requests/post_readers_controller_spec.rb
+++ b/spec/requests/post_readers_controller_spec.rb
@@ -65,6 +65,16 @@ describe PostReadersController do
 
          expect(reader).to be_nil
       end
+
+      it "doesn't include users without reading progress on first post" do
+        @post.update(post_number: 1)
+        TopicUser.create!(user: reader, topic: @group_message, last_read_post_number: nil)
+
+        get '/post_readers.json', params: { id: @post.id }
+        readers = JSON.parse(response.body)['post_readers']
+
+        expect(readers).to be_empty
+      end
     end
 
     def assert_reader_is_correctly_serialized(reader_data, reader, post)

GitHub sha: 03d51d65

1 Like