diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index 520aab3bcc..c404cb6969 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -79,6 +79,8 @@ class PostsController < ApplicationController rss_description = I18n.t("rss_description.private_posts") else posts = Post.public_posts + .visible + .where(post_type: Post.types[:regular]) .order(created_at: :desc) .where('posts.id <= ?', last_post_id) .where('posts.id > ?', last_post_id - 50) @@ -122,6 +124,7 @@ class PostsController < ApplicationController raise Discourse::NotFound unless guardian.can_see_profile?(user) posts = Post.public_posts + .visible .where(user_id: user.id) .where(post_type: Post.types[:regular]) .order(created_at: :desc) diff --git a/spec/requests/posts_controller_spec.rb b/spec/requests/posts_controller_spec.rb index 348a5d026a..a7ffbdb8be 100644 --- a/spec/requests/posts_controller_spec.rb +++ b/spec/requests/posts_controller_spec.rb @@ -2063,6 +2063,29 @@ RSpec.describe PostsController do expect(body).to include(public_post.url) end + it "doesn't include posts from hidden topics" do + public_post.topic.update!(visible: false) + + get "/u/#{user.username}/activity.rss" + + expect(response.status).to eq(200) + + body = response.body + expect(body).not_to include(public_post.url) + end + + it "excludes small actions" do + small_action = Fabricate(:small_action, user: user) + + get "/u/#{user.username}/activity.rss" + + expect(response.status).to eq(200) + + body = response.body + + expect(body).not_to include(small_action.canonical_url) + end + it 'returns public posts as JSON' do public_post private_post @@ -2164,6 +2187,33 @@ RSpec.describe PostsController do expect(body).to_not include(private_post.url) end + it "doesn't include posts from hidden topics" do + public_post.topic.update!(visible: false) + + get "/posts.rss" + + expect(response.status).to eq(200) + + body = response.body + + # we cache in redis, in rare cases this can cause a flaky test + PostsHelper.clear_canonical_cache!(public_post) + + expect(body).not_to include(public_post.canonical_url) + end + + it "excludes small actions" do + small_action = Fabricate(:small_action) + + get "/posts.rss" + + expect(response.status).to eq(200) + + body = response.body + + expect(body).not_to include(small_action.canonical_url) + end + it 'returns public posts with topic for json' do topicless_post.update topic_id: -100