spec/lib/onebox/engine_spec.rb in onebox-1.5.21 vs spec/lib/onebox/engine_spec.rb in onebox-1.5.22

- old
+ new

@@ -19,13 +19,19 @@ describe "#link" do before { allow(Onebox::View).to receive(:template) { %|this shold be a template| } } it "escapes `link`" do - html = OneboxEngineExample.new(%|http://foo.com" onscript="alert('foo')|).to_html - expect(html).not_to include(%|onscript="alert('foo')|) + html = OneboxEngineExample.new(%|http://foo.com/'?a=1&b=2|).to_html + expect(html).not_to match(/&(?!amp;)(?!#39;)/) end + + it "escapes xss" do + skip 'this is checking the wrong thing' + html = OneboxEngineExample.new(%|http://foo.com/'?%20onmouseover=alert(/foo/)|).to_html + expect(html).not_to include(%|onmouseover=alert(/foo/)|) + end end describe "#record" do class OneboxEngineRecord include Onebox::Engine @@ -64,9 +70,23 @@ result = OneboxEngineTripleEqual === URI("http://www.example.com/product/5?var=foo&bar=5") expect(result).to eq(true) end end + class AlwaysHttpsEngineExample < OneboxEngineExample + always_https + end + + describe "always_https" do + it "never returns a plain http url" do + url = 'http://play.google.com/store/apps/details?id=com.google.android.inputmethod.latin' + onebox = AlwaysHttpsEngineExample.new(url) + result = onebox.to_html + expect(result).to_not match(/http(?!s)/) + expect(result).to_not match(/['"]\/\//) + expect(result).to match(/https/) + end + end end describe ".onebox_name" do module ScopeForTemplateName class TemplateNameOnebox