discourse/spec/lib/onebox/engine_spec.rb
Arpit Jalan 283b08d45f
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>
2021-05-26 15:11:35 +05:30

86 lines
2.0 KiB
Ruby

# 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