onebox 1.8.39 → 1.8.40
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -1
- data/.travis.yml +0 -1
- data/README.md +1 -1
- data/lib/onebox/engine/amazon_onebox.rb +98 -17
- data/lib/onebox/version.rb +3 -1
- data/onebox.gemspec +5 -5
- data/templates/amazon.mustache +7 -1
- metadata +7 -177
- data/spec/fixtures/amazon-og.response +0 -3675
- data/spec/fixtures/amazon.response +0 -3040
- data/spec/fixtures/cloudapp-gif.response +0 -66
- data/spec/fixtures/cloudapp-jpg.response +0 -66
- data/spec/fixtures/cloudapp-mp4.response +0 -65
- data/spec/fixtures/cloudapp-others.response +0 -66
- data/spec/fixtures/dailymail.response +0 -5914
- data/spec/fixtures/discourse_topic.response +0 -344
- data/spec/fixtures/discourse_topic_reply.response +0 -345
- data/spec/fixtures/douban.response +0 -4399
- data/spec/fixtures/etsy.response +0 -5827
- data/spec/fixtures/etsy_mobile.response +0 -4230
- data/spec/fixtures/gfycat.response +0 -1
- data/spec/fixtures/githubblob.response +0 -46
- data/spec/fixtures/githubcommit.response +0 -87
- data/spec/fixtures/githubgist.response +0 -310
- data/spec/fixtures/githubpullrequest.response +0 -216
- data/spec/fixtures/googleplayapp.response +0 -138
- data/spec/fixtures/image.response +0 -0
- data/spec/fixtures/meetup.response.html +0 -4419
- data/spec/fixtures/meetup_oembed.response +0 -1
- data/spec/fixtures/pubmed-electronic-xml.response +0 -175
- data/spec/fixtures/pubmed-electronic.response +0 -307
- data/spec/fixtures/pubmed-xml.response +0 -122
- data/spec/fixtures/pubmed.response +0 -300
- data/spec/fixtures/slides.response +0 -2852
- data/spec/fixtures/stackexchange-answer.response +0 -1
- data/spec/fixtures/stackexchange-question.response +0 -1
- data/spec/fixtures/twitterstatus.response +0 -2814
- data/spec/fixtures/video.response +0 -0
- data/spec/fixtures/wechat-mp.response +0 -631
- data/spec/fixtures/wikimedia.response +0 -1
- data/spec/fixtures/wikipedia.response +0 -566
- data/spec/fixtures/wikipediaredirected.response +0 -899
- data/spec/fixtures/xkcd.response +0 -1
- data/spec/fixtures/youku-meta.response +0 -1
- data/spec/fixtures/youku.response +0 -1443
- data/spec/fixtures/youtube-channel.response +0 -5446
- data/spec/fixtures/youtube-json.response +0 -1
- data/spec/fixtures/youtube-list-json.response +0 -1
- data/spec/fixtures/youtube.response +0 -1625
- data/spec/lib/onebox/engine/amazon_onebox_spec.rb +0 -116
- data/spec/lib/onebox/engine/audio_onebox_spec.rb +0 -31
- data/spec/lib/onebox/engine/cloudapp_onebox_spec.rb +0 -26
- data/spec/lib/onebox/engine/douban_onebox_spec.rb +0 -29
- data/spec/lib/onebox/engine/gfycat_onebox_spec.rb +0 -34
- data/spec/lib/onebox/engine/github_blob_onebox_spec.rb +0 -21
- data/spec/lib/onebox/engine/github_commit_onebox_spec.rb +0 -108
- data/spec/lib/onebox/engine/github_gist_onebox_spec.rb +0 -67
- data/spec/lib/onebox/engine/github_pullrequest_onebox_spec.rb +0 -46
- data/spec/lib/onebox/engine/google_docs_onebox_spec.rb +0 -35
- data/spec/lib/onebox/engine/google_maps_onebox_spec.rb +0 -72
- data/spec/lib/onebox/engine/google_play_app_onebox_spec.rb +0 -28
- data/spec/lib/onebox/engine/html_spec.rb +0 -25
- data/spec/lib/onebox/engine/image_onebox_spec.rb +0 -39
- data/spec/lib/onebox/engine/json_spec.rb +0 -25
- data/spec/lib/onebox/engine/pdf_onebox_spec.rb +0 -28
- data/spec/lib/onebox/engine/pubmed_onebox_spec.rb +0 -78
- data/spec/lib/onebox/engine/slides_onebox_spec.rb +0 -24
- data/spec/lib/onebox/engine/stack_exchange_onebox_spec.rb +0 -97
- data/spec/lib/onebox/engine/trello_onebox_spec.rb +0 -30
- data/spec/lib/onebox/engine/twitch_clips_onebox_spec.rb +0 -10
- data/spec/lib/onebox/engine/twitch_stream_onebox_spec.rb +0 -15
- data/spec/lib/onebox/engine/twitch_video_onebox_spec.rb +0 -10
- data/spec/lib/onebox/engine/twitter_status_onebox_spec.rb +0 -187
- data/spec/lib/onebox/engine/video_onebox_spec.rb +0 -31
- data/spec/lib/onebox/engine/wechat_mp_onebox_spec.rb +0 -26
- data/spec/lib/onebox/engine/whitelisted_generic_onebox_spec.rb +0 -179
- data/spec/lib/onebox/engine/wikimedia_onebox_spec.rb +0 -23
- data/spec/lib/onebox/engine/wikipedia_onebox_spec.rb +0 -21
- data/spec/lib/onebox/engine/xkcd_spec.rb +0 -27
- data/spec/lib/onebox/engine/youku_onebox_spec.rb +0 -13
- data/spec/lib/onebox/engine/youtube_onebox_spec.rb +0 -84
- data/spec/lib/onebox/engine_spec.rb +0 -101
- data/spec/lib/onebox/helpers_spec.rb +0 -73
- data/spec/lib/onebox/layout_spec.rb +0 -79
- data/spec/lib/onebox/matcher_spec.rb +0 -74
- data/spec/lib/onebox/preview_spec.rb +0 -74
- data/spec/lib/onebox/status_check_spec.rb +0 -68
- data/spec/lib/onebox_spec.rb +0 -65
- data/spec/spec_helper.rb +0 -90
- data/spec/support/html_spec_helper.rb +0 -18
- data/web/assets/javascripts/jquery.js +0 -4
- data/web/assets/javascripts/main.js +0 -23
- data/web/assets/stylesheets/normalize.css +0 -427
- data/web/assets/stylesheets/style.css +0 -25
- data/web/views/index.haml +0 -29
- data/web/views/layout.haml +0 -11
@@ -1,23 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Onebox::Engine::WikimediaOnebox do
|
4
|
-
let(:link) { "https://commons.wikimedia.org/wiki/File:Stones_members_montage2.jpg" }
|
5
|
-
let(:api_link) { "https://en.wikipedia.org/w/api.php?action=query&titles=File:Stones_members_montage2.jpg&prop=imageinfo&iilimit=50&iiprop=timestamp|user|url&iiurlwidth=500&format=json" }
|
6
|
-
let(:html) { described_class.new(link).to_html }
|
7
|
-
|
8
|
-
before do
|
9
|
-
fake(api_link, response("wikimedia"))
|
10
|
-
end
|
11
|
-
|
12
|
-
it "has the title" do
|
13
|
-
expect(html).to include("File:Stones members montage2.jpg")
|
14
|
-
end
|
15
|
-
|
16
|
-
it "has the link" do
|
17
|
-
expect(html).to include(link)
|
18
|
-
end
|
19
|
-
|
20
|
-
it "has the image" do
|
21
|
-
expect(html).to include("https://upload.wikimedia.org/wikipedia/commons/a/af/Stones_members_montage2.jpg")
|
22
|
-
end
|
23
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Onebox::Engine::WikipediaOnebox do
|
4
|
-
before(:all) do
|
5
|
-
@link = "http://en.wikipedia.org/wiki/Billy_Jack"
|
6
|
-
fake("https://en.wikipedia.org/wiki/Billy_Jack", response(described_class.onebox_name))
|
7
|
-
end
|
8
|
-
|
9
|
-
include_context "engines"
|
10
|
-
it_behaves_like "an engine"
|
11
|
-
|
12
|
-
describe "#to_html" do
|
13
|
-
it "includes article image" do
|
14
|
-
expect(html).to include("Billy_Jack_poster.jpg")
|
15
|
-
end
|
16
|
-
|
17
|
-
it "includes summary" do
|
18
|
-
expect(html).to include("Billy Jack is a 1971 action/drama")
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Onebox::Engine::XkcdOnebox do
|
4
|
-
let(:link) { "https://xkcd.com/327/" }
|
5
|
-
let(:api_link) { "https://xkcd.com/327/info.0.json" }
|
6
|
-
let(:html) { described_class.new(link).to_html }
|
7
|
-
|
8
|
-
before do
|
9
|
-
fake(api_link, response("xkcd"))
|
10
|
-
end
|
11
|
-
|
12
|
-
it "has the comic's description" do
|
13
|
-
expect(html).to include("Her daughter is named Help")
|
14
|
-
end
|
15
|
-
|
16
|
-
it "has the comic's title" do
|
17
|
-
expect(html).to include("Exploits of a Mom")
|
18
|
-
end
|
19
|
-
|
20
|
-
it "has the permalink to the comic" do
|
21
|
-
expect(html).to include(link)
|
22
|
-
end
|
23
|
-
|
24
|
-
it "has the comic image" do
|
25
|
-
expect(html).to include("http://imgs.xkcd.com/comics/exploits_of_a_mom.png")
|
26
|
-
end
|
27
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Onebox::Engine::YoukuOnebox do
|
4
|
-
before do
|
5
|
-
FakeWeb.register_uri(:get, 'http://v.youku.com/v_show/id_XNjM3MzAxNzc2.html', body: response('youku'), content_type: 'text/html')
|
6
|
-
FakeWeb.register_uri(:get, 'http://v.youku.com/player/getPlayList/VideoIDS/XNjM3MzAxNzc2', body: response('youku-meta'), content_type: 'text/html')
|
7
|
-
end
|
8
|
-
|
9
|
-
it 'returns embed as the placeholder' do
|
10
|
-
expect(Onebox.preview('http://v.youku.com/v_show/id_XNjM3MzAxNzc2.html')
|
11
|
-
.placeholder_html).to match(/embed/)
|
12
|
-
end
|
13
|
-
end
|
@@ -1,84 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Onebox::Engine::YoutubeOnebox do
|
4
|
-
before do
|
5
|
-
fake("https://www.youtube.com/watch?feature=player_embedded&v=21Lk4YiASMo", response("youtube"))
|
6
|
-
fake("https://youtu.be/21Lk4YiASMo", response("youtube"))
|
7
|
-
fake("https://www.youtube.com/channel/UCL8ZULXASCc1I_oaOT0NaOQ", response("youtube-channel"))
|
8
|
-
fake("http://www.youtube.com/user/googlechrome", response("youtube-channel"))
|
9
|
-
fake("https://www.youtube.com/playlist?list=PL5308B2E5749D1696", response("youtube-playlist"))
|
10
|
-
fake("https://www.youtube.com/oembed?format=json&url=https://www.youtube.com/watch?v=21Lk4YiASMo", response("youtube-json"))
|
11
|
-
fake("https://www.youtube.com/oembed?format=json&url=https://www.youtube.com/playlist?list=PL5308B2E5749D1696", response("youtube-list-json"))
|
12
|
-
end
|
13
|
-
|
14
|
-
it "adds wmode=opaque" do
|
15
|
-
expect(Onebox.preview('https://www.youtube.com/watch?v=21Lk4YiASMo').to_s).to match(/wmode=opaque/)
|
16
|
-
end
|
17
|
-
|
18
|
-
it "rewrites URLs for videos to be HTTPS" do
|
19
|
-
# match: plain HTTP and protocol agnostic
|
20
|
-
regex = /(http:|["']\/\/)/
|
21
|
-
|
22
|
-
expect(Onebox.preview('https://www.youtube.com/watch?v=21Lk4YiASMo').to_s).not_to match(regex)
|
23
|
-
expect(Onebox.preview('https://www.youtube.com/watch?v=21Lk4YiASMo').placeholder_html).not_to match(regex)
|
24
|
-
expect(Onebox.preview('https://www.youtube.com/channel/UCL8ZULXASCc1I_oaOT0NaOQ').to_s).not_to match(regex)
|
25
|
-
end
|
26
|
-
|
27
|
-
it "can onebox a channel page" do
|
28
|
-
expect(Onebox.preview('https://www.youtube.com/channel/UCL8ZULXASCc1I_oaOT0NaOQ').to_s).to match(/Google Chrome/)
|
29
|
-
end
|
30
|
-
|
31
|
-
it "can onebox a playlist" do
|
32
|
-
expect(Onebox.preview('https://www.youtube.com/playlist?list=PL5308B2E5749D1696').to_s).to match(/iframe/)
|
33
|
-
placeholder_html = Onebox.preview('https://www.youtube.com/playlist?list=PL5308B2E5749D1696').placeholder_html
|
34
|
-
expect(placeholder_html).to match(/<img/)
|
35
|
-
expect(placeholder_html).to include("The web is what you make of it")
|
36
|
-
end
|
37
|
-
|
38
|
-
it "does not make HTTP requests unless necessary" do
|
39
|
-
# We haven't defined any fixture for requests associated with this ID, so if
|
40
|
-
# any HTTP requests are made fakeweb will complain and the test will fail.
|
41
|
-
Onebox.preview('http://www.youtube.com/watch?v=q39Ce3zDScI').to_s
|
42
|
-
end
|
43
|
-
|
44
|
-
it "does not fail if we cannot get the video ID from the URL" do
|
45
|
-
expect(Onebox.preview('http://www.youtube.com/watch?feature=player_embedded&v=21Lk4YiASMo').to_s).to match(/embed/)
|
46
|
-
end
|
47
|
-
|
48
|
-
it "returns an image as the placeholder" do
|
49
|
-
expect(Onebox.preview('https://www.youtube.com/watch?v=21Lk4YiASMo').placeholder_html).to match(/<img/)
|
50
|
-
expect(Onebox.preview('https://youtu.be/21Lk4YiASMo').placeholder_html).to match(/<img/)
|
51
|
-
end
|
52
|
-
|
53
|
-
it "passes the playlist ID through" do
|
54
|
-
expect(Onebox.preview('https://www.youtube.com/watch?v=21Lk4YiASMo&list=UUQau-O2C0kGJpR3_CHBTGbw&index=1').to_s).to match(/UUQau-O2C0kGJpR3_CHBTGbw/)
|
55
|
-
end
|
56
|
-
|
57
|
-
it "filters out nonsense parameters" do
|
58
|
-
expect(Onebox.preview('https://www.youtube.com/watch?v=21Lk4YiASMo&potential[]=exploit&potential[]=fun').to_s).not_to match(/potential|exploit|fun/)
|
59
|
-
end
|
60
|
-
|
61
|
-
it "converts time strings into a &start= parameter" do
|
62
|
-
expect(Onebox.preview('https://www.youtube.com/watch?v=21Lk4YiASMo&start=3782').to_s).to match(/start=3782/)
|
63
|
-
expect(Onebox.preview('https://www.youtube.com/watch?start=1h3m2s&v=21Lk4YiASMo').to_s).to match(/start=3782/)
|
64
|
-
expect(Onebox.preview('https://www.youtube.com/watch?v=21Lk4YiASMo&t=1h3m2s').to_s).to match(/start=3782/)
|
65
|
-
expect(Onebox.preview('https://www.youtube.com/watch?v=21Lk4YiASMo&start=1h3m2s').to_s).to match(/start=3782/)
|
66
|
-
expect(Onebox.preview('https://www.youtube.com/watch?v=21Lk4YiASMo#t=1h3m2s').to_s).to match(/start=3782/)
|
67
|
-
end
|
68
|
-
|
69
|
-
it "allows both start and end" do
|
70
|
-
preview = expect(Onebox.preview('https://www.youtube.com/watch?v=21Lk4YiASMo&start=2m&end=3m').to_s)
|
71
|
-
preview.to match(/start=120/)
|
72
|
-
preview.to match(/end=180/)
|
73
|
-
end
|
74
|
-
|
75
|
-
it "permits looping videos" do
|
76
|
-
preview = expect(Onebox.preview('https://www.youtube.com/watch?v=21Lk4YiASMo&loop').to_s)
|
77
|
-
preview.to match(/loop=1/)
|
78
|
-
preview.to match(/playlist=21Lk4YiASMo/)
|
79
|
-
end
|
80
|
-
|
81
|
-
it "includes title in preview" do
|
82
|
-
expect(Onebox.preview("https://youtu.be/21Lk4YiASMo").placeholder_html).to include("96neko - orange")
|
83
|
-
end
|
84
|
-
end
|
@@ -1,101 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Onebox::Engine do
|
4
|
-
class OneboxEngineExample
|
5
|
-
include Onebox::Engine
|
6
|
-
|
7
|
-
def to_html
|
8
|
-
"Hello #{link}"
|
9
|
-
end
|
10
|
-
|
11
|
-
def data
|
12
|
-
{ foo: raw[:key], url: @url }
|
13
|
-
end
|
14
|
-
|
15
|
-
def raw
|
16
|
-
{ key: "value" }
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
describe "#link" do
|
21
|
-
before { allow(Onebox::View).to receive(:template) { %|this should be a template| } }
|
22
|
-
|
23
|
-
it "escapes `link`" do
|
24
|
-
html = OneboxEngineExample.new(%|http://foo.com/'?a=1&b=2|).to_html
|
25
|
-
expect(html).not_to match(/'/)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
describe "#record" do
|
30
|
-
class OneboxEngineRecord
|
31
|
-
include Onebox::Engine
|
32
|
-
|
33
|
-
def data
|
34
|
-
"new content"
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
it "returns cached value for given url if its url is already in cache" do
|
39
|
-
cache = { "http://example.com" => "old content" }
|
40
|
-
result = OneboxEngineRecord.new("http://example.com", cache).send(:record)
|
41
|
-
expect(result).to eq("old content")
|
42
|
-
end
|
43
|
-
|
44
|
-
it "stores cache value for given url if cache key doesn't exist" do
|
45
|
-
cache = { "http://example.com1" => "old content" }
|
46
|
-
result = OneboxEngineRecord.new("http://example.com", cache).send(:record)
|
47
|
-
expect(result).to eq("new content")
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
describe '.placeholder_html' do
|
52
|
-
let(:onebox) { OneboxEngineExample.new('http://eviltrout.com') }
|
53
|
-
it "returns `to_html` by default" do
|
54
|
-
expect(onebox.to_html).to eq(onebox.placeholder_html)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
describe ".===" do
|
59
|
-
class OneboxEngineTripleEqual
|
60
|
-
include Onebox::Engine
|
61
|
-
@@matcher = /example/
|
62
|
-
end
|
63
|
-
it "returns true if argument matches the matcher" do
|
64
|
-
result = OneboxEngineTripleEqual === URI("http://www.example.com/product/5?var=foo&bar=5")
|
65
|
-
expect(result).to eq(true)
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
class AlwaysHttpsEngineExample < OneboxEngineExample
|
70
|
-
always_https
|
71
|
-
end
|
72
|
-
|
73
|
-
describe "always_https" do
|
74
|
-
it "never returns a plain http url" do
|
75
|
-
url = 'http://play.google.com/store/apps/details?id=com.google.android.inputmethod.latin'
|
76
|
-
onebox = AlwaysHttpsEngineExample.new(url)
|
77
|
-
result = onebox.to_html
|
78
|
-
expect(result).to_not match(/http(?!s)/)
|
79
|
-
expect(result).to_not match(/['"]\/\//)
|
80
|
-
expect(result).to match(/https/)
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
describe ".onebox_name" do
|
86
|
-
module ScopeForTemplateName
|
87
|
-
class TemplateNameOnebox
|
88
|
-
include Onebox::Engine
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
let(:onebox_name) { ScopeForTemplateName::TemplateNameOnebox.onebox_name }
|
93
|
-
|
94
|
-
it "should not include the scope" do
|
95
|
-
expect(onebox_name).not_to include("ScopeForTemplateName", "scopefortemplatename")
|
96
|
-
end
|
97
|
-
|
98
|
-
it "should not include the word Onebox" do
|
99
|
-
expect(onebox_name).not_to include("onebox", "Onebox")
|
100
|
-
end
|
101
|
-
end
|
@@ -1,73 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
RSpec.describe Onebox::Helpers do
|
4
|
-
describe '.blank?' do
|
5
|
-
it { expect(described_class.blank?("")).to be(true) }
|
6
|
-
it { expect(described_class.blank?(" ")).to be(true) }
|
7
|
-
it { expect(described_class.blank?("test")).to be(false) }
|
8
|
-
it { expect(described_class.blank?(["test", "testing"])).to be(false) }
|
9
|
-
it { expect(described_class.blank?([])).to be(true) }
|
10
|
-
it { expect(described_class.blank?({})).to be(true) }
|
11
|
-
it { expect(described_class.blank?(nil)).to be(true) }
|
12
|
-
it { expect(described_class.blank?(true)).to be(false) }
|
13
|
-
it { expect(described_class.blank?(false)).to be(true) }
|
14
|
-
it { expect(described_class.blank?(a: 'test')).to be(false) }
|
15
|
-
end
|
16
|
-
|
17
|
-
describe ".truncate" do
|
18
|
-
let(:test_string) { "Chops off on spaces" }
|
19
|
-
it { expect(described_class.truncate(test_string)).to eq(test_string) }
|
20
|
-
it { expect(described_class.truncate(test_string, 5)).to eq("Chops...") }
|
21
|
-
it { expect(described_class.truncate(test_string, 7)).to eq("Chops...") }
|
22
|
-
it { expect(described_class.truncate(test_string, 9)).to eq("Chops off...") }
|
23
|
-
it { expect(described_class.truncate(test_string, 10)).to eq("Chops off...") }
|
24
|
-
it { expect(described_class.truncate(test_string, 100)).to eq("Chops off on spaces") }
|
25
|
-
it { expect(described_class.truncate(" #{test_string} ", 6)).to eq(" Chops...") }
|
26
|
-
end
|
27
|
-
|
28
|
-
describe "fetch_response" do
|
29
|
-
after(:each) do
|
30
|
-
Onebox.options = Onebox::DEFAULTS
|
31
|
-
end
|
32
|
-
|
33
|
-
before do
|
34
|
-
Onebox.options = { max_download_kb: 1 }
|
35
|
-
fake("http://example.com/large-file", response("slides"))
|
36
|
-
end
|
37
|
-
|
38
|
-
it "raises an exception when responses are larger than our limit" do
|
39
|
-
expect {
|
40
|
-
described_class.fetch_response('http://example.com/large-file')
|
41
|
-
}.to raise_error(Onebox::Helpers::DownloadTooLarge)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
describe "user_agent" do
|
46
|
-
before do
|
47
|
-
fake("http://example.com/some-resource", body: 'test')
|
48
|
-
end
|
49
|
-
|
50
|
-
context "default" do
|
51
|
-
it "has the Ruby user agent" do
|
52
|
-
described_class.fetch_response('http://example.com/some-resource')
|
53
|
-
expect(FakeWeb.last_request.to_hash['user-agent'][0]).to eq("Ruby")
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
context "Custom option" do
|
58
|
-
after(:each) do
|
59
|
-
Onebox.options = Onebox::DEFAULTS
|
60
|
-
end
|
61
|
-
|
62
|
-
before do
|
63
|
-
Onebox.options = { user_agent: "EvilTroutBot v0.1" }
|
64
|
-
end
|
65
|
-
|
66
|
-
it "has the custom user agent" do
|
67
|
-
described_class.fetch_response('http://example.com/some-resource')
|
68
|
-
expect(FakeWeb.last_request.to_hash['user-agent'][0]).to eq("EvilTroutBot v0.1")
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
end
|
@@ -1,79 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Onebox::Layout do
|
4
|
-
let(:cache) { Moneta.new(:Memory, expires: true, serializer: :json) }
|
5
|
-
let(:record) { {} }
|
6
|
-
let(:onebox) { described_class.new("amazon", record, cache) }
|
7
|
-
let(:html) { onebox.to_html }
|
8
|
-
|
9
|
-
describe ".template_path" do
|
10
|
-
let(:template_path) { onebox.template_path }
|
11
|
-
|
12
|
-
before(:each) do
|
13
|
-
Onebox.options.load_paths << "directory_a"
|
14
|
-
Onebox.options.load_paths << "directory_b"
|
15
|
-
end
|
16
|
-
|
17
|
-
context "when template exists in directory_b" do
|
18
|
-
before(:each) do
|
19
|
-
allow_any_instance_of(described_class).to receive(:template?) { |_, path| path == "directory_b" }
|
20
|
-
end
|
21
|
-
|
22
|
-
it "returns directory_b" do
|
23
|
-
expect(template_path).to eq("directory_b")
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
context "when template exists in directory_a" do
|
28
|
-
before(:each) do
|
29
|
-
allow_any_instance_of(described_class).to receive(:template?) { |_, path| path == "directory_a" }
|
30
|
-
end
|
31
|
-
|
32
|
-
it "returns directory_a" do
|
33
|
-
expect(template_path).to eq("directory_a")
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
context "when template doesn't exist in directory_a or directory_b" do
|
38
|
-
it "returns default path" do
|
39
|
-
expect(template_path).to include("template")
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
after(:each) do
|
44
|
-
Onebox.options.load_paths.pop(2)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
describe "#to_html" do
|
49
|
-
class OneboxEngineLayout
|
50
|
-
include Onebox::Engine
|
51
|
-
|
52
|
-
def data
|
53
|
-
"new content"
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
it "reads from cache if rendered template is cached" do
|
58
|
-
described_class.new("amazon", record, cache).to_html
|
59
|
-
expect(cache).to receive(:fetch)
|
60
|
-
described_class.new("amazon", record, cache).to_html
|
61
|
-
end
|
62
|
-
|
63
|
-
it "contains layout template" do
|
64
|
-
expect(html).to include(%|class="onebox|)
|
65
|
-
end
|
66
|
-
|
67
|
-
it "contains the view" do
|
68
|
-
record = { link: "foo" }
|
69
|
-
html = described_class.new("amazon", record, cache).to_html
|
70
|
-
expect(html).to include(%|"foo"|)
|
71
|
-
end
|
72
|
-
|
73
|
-
it "rewrites relative image path" do
|
74
|
-
record = { image: "/image.png", link: "https://discourse.org" }
|
75
|
-
klass = described_class.new("whitelistedgeneric", record, cache)
|
76
|
-
expect(klass.view.record[:image]).to include("https://discourse.org")
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
@@ -1,74 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
class TestEngine
|
4
|
-
def self.===(uri)
|
5
|
-
true
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
describe Onebox::Matcher do
|
10
|
-
|
11
|
-
describe "oneboxed" do
|
12
|
-
|
13
|
-
describe "with a path" do
|
14
|
-
let(:url) { "http://party.time.made.up-url.com/beep/boop" }
|
15
|
-
let(:matcher) { Onebox::Matcher.new(url) }
|
16
|
-
|
17
|
-
it "finds an engine" do
|
18
|
-
matcher.stubs(:ordered_engines).returns([TestEngine])
|
19
|
-
expect(matcher.oneboxed).not_to be_nil
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
describe "without a path" do
|
24
|
-
let(:url) { "http://party.time.made.up-url.com/" }
|
25
|
-
let(:matcher) { Onebox::Matcher.new(url) }
|
26
|
-
|
27
|
-
it "doesn't find an engine" do
|
28
|
-
matcher.stubs(:ordered_engines).returns([TestEngine])
|
29
|
-
expect(matcher.oneboxed).not_to be_nil
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
describe "without a path but has a query string" do
|
34
|
-
let(:url) { "http://party.time.made.up-url.com/?article_id=1234" }
|
35
|
-
let(:matcher) { Onebox::Matcher.new(url) }
|
36
|
-
|
37
|
-
it "finds an engine" do
|
38
|
-
matcher.stubs(:ordered_engines).returns([TestEngine])
|
39
|
-
expect(matcher.oneboxed).not_to be_nil
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
describe "without a path but has a fragment string" do
|
44
|
-
let(:url) { "http://party.time.made.up-url.com/#article_id=1234" }
|
45
|
-
let(:matcher) { Onebox::Matcher.new(url) }
|
46
|
-
|
47
|
-
it "finds an engine" do
|
48
|
-
matcher.stubs(:ordered_engines).returns([TestEngine])
|
49
|
-
expect(matcher.oneboxed).not_to be_nil
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
describe "with a whitelisted port/scheme" do
|
54
|
-
%w{http://example.com https://example.com http://example.com:80 //example.com}.each do |url|
|
55
|
-
it "finds an engine for '#{url}'" do
|
56
|
-
matcher = Onebox::Matcher.new(url)
|
57
|
-
matcher.stubs(:ordered_engines).returns([TestEngine])
|
58
|
-
expect(matcher.oneboxed).not_to be_nil
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
describe "without a whitelisted port/scheme" do
|
64
|
-
%w{http://example.com:21 ftp://example.com}.each do |url|
|
65
|
-
it "doesn't find an engine for '#{url}'" do
|
66
|
-
matcher = Onebox::Matcher.new(url)
|
67
|
-
matcher.stubs(:ordered_engines).returns([TestEngine])
|
68
|
-
expect(matcher.oneboxed).to be_nil
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
end
|
74
|
-
end
|