mirror of
https://gh.wpcy.net/https://github.com/discourse/discourse.git
synced 2026-05-03 13:46:26 +08:00
Sometimes, HTML entities can be escaped twice, typically when getting sanitized data from our `Onebox::OpenGraph` class then providing that value to a template. We’re using the Mustache gem to process the Onebox templates, and it will automatically escape HTML entities. This is usually not a problem, but it is for things like ampersands. For example, if the value we provide to the template is `&`, then Mustache will convert it to `&`. This patch fixes that behavior by decoding the result of the sanitization we apply in `Onebox::OpenGraph`. That way, templates will get `&` instead of `&`, thus there won’t be any double escaping.
58 lines
2 KiB
Ruby
58 lines
2 KiB
Ruby
# frozen_string_literal: true
|
||
|
||
require "onebox/open_graph"
|
||
|
||
RSpec.describe Onebox::OpenGraph do
|
||
describe "Normalization" do
|
||
subject(:graph) { described_class.new(doc) }
|
||
|
||
let(:doc) do
|
||
Nokogiri.HTML(
|
||
'<html><title>Did’ you <b>miss me</b>? - Album on Imgur</title><meta name="og:description" content="Post with 7 votes and 151 views. Shared by vinothkannans. Did you <b>miss me</b>?" /><meta property="og:image" content="http://test.com/test\'ing.mp3" /><meta name="og:author" content="Batman & Robin" /></html>',
|
||
)
|
||
end
|
||
|
||
it "excludes html tags" do
|
||
expect(graph).to have_attributes(
|
||
title: "Did’ you miss me? - Album on Imgur",
|
||
description: "Post with 7 votes and 151 views. Shared by vinothkannans. Did you miss me?",
|
||
)
|
||
end
|
||
|
||
it "correctly normalizes the url properties" do
|
||
expect(graph.image).to eq("http://test.com/test'ing.mp3")
|
||
end
|
||
|
||
it "normalizes ampersands properly" do
|
||
expect(graph.author).to eq("Batman & Robin")
|
||
end
|
||
end
|
||
|
||
describe "Collections" do
|
||
subject(:graph) { described_class.new(doc) }
|
||
|
||
let(:doc) { Nokogiri.HTML(<<-HTML) }
|
||
<html>
|
||
<title>test</title>
|
||
<meta property="og:article:tag" content="<b>tag1</b>" />
|
||
<meta property="og:article:tag" content="tag2" />
|
||
<meta property="og:article:section" content="category1" />
|
||
<meta property="og:article:section" content="category2" />
|
||
<meta property="og:article:section:color" content="ff0000" />
|
||
<meta property="og:article:section:color" content="0000ff" />
|
||
</html>
|
||
HTML
|
||
|
||
it "handles multiple article:tag tags" do
|
||
expect(graph.article_tags).to eq %w[tag1 tag2]
|
||
end
|
||
|
||
it "handles multiple article:section tags" do
|
||
expect(graph.article_sections).to eq %w[category1 category2]
|
||
end
|
||
|
||
it "handles multiple article:section:color tags" do
|
||
expect(graph.article_section_colors).to eq %w[ff0000 0000ff]
|
||
end
|
||
end
|
||
end
|