discourse/spec/views/topics/show.html.erb_spec.rb
Natalie Tay 22ce638ec3
FIX: Use subfolder-safe url for category in html view (#24595)
Use subfolder-safe url for category in html view
2023-11-28 19:08:14 +08:00

80 lines
2.8 KiB
Ruby

# frozen_string_literal: true
require "rails_helper"
require "ostruct"
RSpec.describe "topics/show.html.erb" do
fab!(:category)
fab!(:topic) { Fabricate(:topic, category: category) }
it "uses subfolder-safe category url" do
set_subfolder "/subpath"
topic_view = OpenStruct.new(topic: topic, posts: [])
topic_view.stubs(:summary).returns("")
view.stubs(:crawler_layout?).returns(false)
assign(:topic_view, topic_view)
assign(:breadcrumbs, [{ name: category.name, color: category.color }])
assign(:tags, [])
render template: "topics/show", formats: [:html]
assert_select "a[href='/subpath/c/#{category.slug}/#{category.id}']"
end
it "add nofollow to RSS alternate link for topic" do
topic_view = OpenStruct.new(topic: topic, posts: [])
topic_view.stubs(:summary).returns("")
view.stubs(:crawler_layout?).returns(false)
view.stubs(:url_for).returns("https://www.example.com/test.rss")
view.instance_variable_set("@topic_view", topic_view)
assign(:tags, [])
render template: "topics/show", formats: [:html]
expect(view.content_for(:head)).to match(
%r{<link rel="alternate nofollow" type="application/rss\+xml" title="[^"]+" href="https://www.example.com/test\.rss" />},
)
end
it "adds structured data" do
view.stubs(:include_crawler_content?).returns(true)
post = Fabricate(:post, topic: topic)
TopicLink.create!(
topic_id: post.topic_id,
post_id: post.id,
user_id: post.user_id,
url: "https://example.com/",
domain: "example.com",
link_topic_id: Fabricate(:topic).id,
reflection: true,
)
assign(:topic_view, TopicView.new(topic))
assign(:tags, [])
render template: "topics/show", formats: [:html]
links_list = Nokogiri::HTML5.fragment(rendered).css(".crawler-linkback-list")
first_item = links_list.css('[itemprop="itemListElement"]')
expect(first_item.css('[itemprop="position"]')[0]["content"]).to eq("1")
expect(first_item.css('[itemprop="url"]')[0]["href"]).to eq("https://example.com/")
end
it "uses comment scheme type for replies" do
view.stubs(:crawler_layout?).returns(true)
view.stubs(:include_crawler_content?).returns(true)
Fabricate(:post, topic: topic)
Fabricate(:post, topic: topic)
Fabricate(:post, topic: topic)
assign(:topic_view, TopicView.new(topic))
assign(:tags, [])
render template: "topics/show", formats: [:html]
doc = Nokogiri::HTML5.fragment(rendered)
topic_schema = doc.css('[itemtype="http://schema.org/DiscussionForumPosting"]')
expect(topic_schema.size).to eq(1)
expect(topic_schema.css('[itemtype="http://schema.org/Comment"]').size).to eq(2)
expect(topic_schema.css('[itemprop="articleSection"]')[0]["content"]).to eq(topic.category.name)
end
end