mirror of
https://github.com/discourse/discourse.git
synced 2025-05-23 23:31:18 +08:00
DEV: Absorb onebox gem into core (#12979)
* Move onebox gem in core library * Update template file path * Remove warning for onebox gem caching * Remove onebox version file * Remove onebox gem * Add sanitize gem * Require onebox library in lazy-yt plugin * Remove onebox web specific code This code was used in standalone onebox Sinatra application * Merge Discourse specific AllowlistedGenericOnebox engine in core * Fix onebox engine filenames to match class name casing * Move onebox specs from gem into core * DEV: Rename `response` helper to `onebox_response` Fixes a naming collision. * Require rails_helper * Don't use `before/after(:all)` * Whitespace * Remove fakeweb * Remove poor unit tests * DEV: Re-add fakeweb, plugins are using it * Move onebox helpers * Stub Instagram API * FIX: Follow additional redirect status codes (#476) Don’t throw errors if we encounter 303, 307 or 308 HTTP status codes in responses * Remove an empty file * DEV: Update the license file Using the copy from https://choosealicense.com/licenses/gpl-2.0/# Hopefully this will enable GitHub to show the license UI? * DEV: Update embedded copyrights * DEV: Add Onebox copyright notice * DEV: Add MIT license, convert COPYRIGHT.txt to md * DEV: Remove an incorrect copyright claim Co-authored-by: Jarek Radosz <jradosz@gmail.com> Co-authored-by: jbrw <jamie@goatforce5.org>
This commit is contained in:
85
spec/lib/onebox/engine_spec.rb
Normal file
85
spec/lib/onebox/engine_spec.rb
Normal file
@ -0,0 +1,85 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "rails_helper"
|
||||
|
||||
describe Onebox::Engine do
|
||||
class OneboxEngineExample
|
||||
include Onebox::Engine
|
||||
|
||||
def to_html
|
||||
"Hello #{link}"
|
||||
end
|
||||
|
||||
def data
|
||||
{ foo: raw[:key], url: @url }
|
||||
end
|
||||
|
||||
def raw
|
||||
{ key: "value" }
|
||||
end
|
||||
end
|
||||
|
||||
describe "#link" do
|
||||
before do
|
||||
Onebox::View.stubs(:template).returns(%|this should be a template|)
|
||||
end
|
||||
|
||||
it "escapes `link`" do
|
||||
html = OneboxEngineExample.new(%|http://foo.com/bar?a='&b=2|).to_html
|
||||
expect(html).not_to match(/'/)
|
||||
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 === 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
|
||||
include Onebox::Engine
|
||||
end
|
||||
end
|
||||
|
||||
let(:onebox_name) { ScopeForTemplateName::TemplateNameOnebox.onebox_name }
|
||||
|
||||
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(onebox_name).not_to include("onebox", "Onebox")
|
||||
end
|
||||
end
|
Reference in New Issue
Block a user