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