spec/lib/onebox/engine_spec.rb in onebox-1.1.0 vs spec/lib/onebox/engine_spec.rb in onebox-1.2.0

- old
+ new

@@ -1,33 +1,28 @@ require "spec_helper" -class OneboxEngineExample - include Onebox::Engine +describe Onebox::Engine do + class OneboxEngineExample + include Onebox::Engine - def data - { foo: raw[:key], url: @url } - end + def to_html + "Hello #{link}" + end - def raw - { key: "value" } - end + def data + { foo: raw[:key], url: @url } + end - def view - @view.tap do |layout| - layout.view.template = %|<div class="onebox"><a href="{{url}}"></a></div>| + def raw + { key: "value" } end end -end -describe Onebox::Engine do - describe "#to_html" do - it "returns the onebox wrapper" do - html = OneboxEngineExample.new("foo").to_html - expect(html).to include(%|class="onebox"|) - end + describe "#link" do + before { Onebox::View.any_instance.stub(:template) { %|this shold be a template| } } - it "doesn't allow XSS injection" do + it "escapes `link`" do html = OneboxEngineExample.new(%|http://foo.com" onscript="alert('foo')|).to_html expect(html).not_to include(%|onscript="alert('foo')|) end end @@ -51,17 +46,24 @@ result = OneboxEngineRecord.new("http://example.com", cache).send(:record) expect(result).to eq("new content") end end + describe '.placeholder_html' do + let(:onebox) { OneboxEngineExample.new('http://eviltrout.com') } + it "returns `to_html` by default" do + expect(onebox.to_html).to eq(onebox.placeholder_html) + end + end + describe ".===" do class OneboxEngineTripleEqual include Onebox::Engine @@matcher = /example/ end it "returns true if argument matches the matcher" do - result = OneboxEngineTripleEqual === "http://www.example.com/product/5?var=foo&bar=5" + result = OneboxEngineTripleEqual === URI("http://www.example.com/product/5?var=foo&bar=5") expect(result).to eq(true) end end describe ".matches" do @@ -77,23 +79,24 @@ regex = OneboxEngineMatches.class_variable_get(:@@matcher) expect(regex).to be_a(Regexp) end end - describe ".template_name" do - module ScopeForTemplateName - class TemplateNameOnebox - include Onebox::Engine - end +end + +describe ".onebox_name" do + module ScopeForTemplateName + class TemplateNameOnebox + include Onebox::Engine end + end - let(:template_name) { ScopeForTemplateName::TemplateNameOnebox.template_name } + let(:onebox_name) { ScopeForTemplateName::TemplateNameOnebox.onebox_name } - it "should not include the scope" do - expect(template_name).not_to include("ScopeForTemplateName", "scopefortemplatename") - end + it "should not include the scope" do + expect(onebox_name).not_to include("ScopeForTemplateName", "scopefortemplatename") + end - it "should not include the word Onebox" do - expect(template_name).not_to include("onebox", "Onebox") - end + it "should not include the word Onebox" do + expect(onebox_name).not_to include("onebox", "Onebox") end end