FIX: skip hidden posts while generating canonical url.

Previously, while generating the topic page's canoncial url we used the current post number. It will create invalid canonical path if the topic has whsiper posts. Now we only taking the visible posts for current page index calculation.
This commit is contained in:
Vinoth Kannan 2020-07-05 14:04:31 +05:30
parent 6b4cebed3e
commit 06d426bd87
2 changed files with 15 additions and 3 deletions

View File

@ -122,7 +122,8 @@ class TopicView
if @page > 1 if @page > 1
"?page=#{@page}" "?page=#{@page}"
else else
page = ((@post_number - 1) / @limit) + 1 posts_count = unfiltered_posts.where("post_number <= ?", @post_number).count
page = ((posts_count - 1) / @limit) + 1
page > 1 ? "?page=#{page}" : "" page > 1 ? "?page=#{page}" : ""
end end

View File

@ -244,8 +244,19 @@ describe TopicView do
end end
it "generates a canonical correctly for paged results" do it "generates a canonical correctly for paged results" do
expect(TopicView.new(1234, user, post_number: 10 * TopicView.chunk_size) 5.times { |i| Fabricate(:post, post_number: i + 1, topic: topic) }
.canonical_path).to eql("/1234?page=10")
expect(TopicView.new(1234, user, post_number: 5, limit: 2)
.canonical_path).to eql("/1234?page=3")
end
it "generates canonical path correctly by skipping whisper posts" do
2.times { |i| Fabricate(:post, post_number: i + 1, topic: topic) }
2.times { |i| Fabricate(:whisper, post_number: i + 3, topic: topic) }
Fabricate(:post, post_number: 5, topic: topic)
expect(TopicView.new(1234, user, post_number: 5, limit: 2)
.canonical_path).to eql("/1234?page=2")
end end
end end