2013-12-31 14:37:43 -05:00
require 'spec_helper'
describe EmbedController do
let ( :host ) { " eviltrout.com " }
let ( :embed_url ) { " http://eviltrout.com/2013/02/10/why-discourse-uses-emberjs.html " }
it " is 404 without an embed_url " do
2014-01-03 12:52:24 -05:00
get :comments
2015-01-09 14:04:02 -03:00
expect ( response ) . not_to be_success
2013-12-31 14:37:43 -05:00
end
it " raises an error with a missing host " do
2014-01-03 12:52:24 -05:00
get :comments , embed_url : embed_url
2015-01-09 14:04:02 -03:00
expect ( response ) . not_to be_success
2013-12-31 14:37:43 -05:00
end
2015-06-09 16:24:04 -04:00
context " by topic id " do
before do
2015-08-18 17:15:46 -04:00
Fabricate ( :embeddable_host )
2015-06-09 16:24:04 -04:00
controller . request . stubs ( :referer ) . returns ( 'http://eviltrout.com/some-page' )
end
it " allows a topic to be embedded by id " do
topic = Fabricate ( :topic )
get :comments , topic_id : topic . id
expect ( response ) . to be_success
end
end
2013-12-31 14:37:43 -05:00
context " with a host " do
2015-08-18 17:15:46 -04:00
let! ( :embeddable_host ) { Fabricate ( :embeddable_host ) }
2013-12-31 14:37:43 -05:00
it " raises an error with no referer " do
2014-01-03 12:52:24 -05:00
get :comments , embed_url : embed_url
2015-01-09 14:04:02 -03:00
expect ( response ) . not_to be_success
2013-12-31 14:37:43 -05:00
end
context " success " do
before do
controller . request . stubs ( :referer ) . returns ( embed_url )
end
after do
2015-01-09 14:04:02 -03:00
expect ( response ) . to be_success
expect ( response . headers [ 'X-Frame-Options' ] ) . to eq ( " ALLOWALL " )
2013-12-31 14:37:43 -05:00
end
it " tells the topic retriever to work when no previous embed is found " do
TopicEmbed . expects ( :topic_id_for_embed ) . returns ( nil )
retriever = mock
TopicRetriever . expects ( :new ) . returns ( retriever )
retriever . expects ( :retrieve )
2014-01-03 12:52:24 -05:00
get :comments , embed_url : embed_url
2013-12-31 14:37:43 -05:00
end
it " creates a topic view when a topic_id is found " do
TopicEmbed . expects ( :topic_id_for_embed ) . returns ( 123 )
2014-06-18 17:39:12 -04:00
TopicView . expects ( :new ) . with ( 123 , nil , { limit : 100 , exclude_first : true , exclude_deleted_users : true } )
2014-01-03 12:52:24 -05:00
get :comments , embed_url : embed_url
2013-12-31 14:37:43 -05:00
end
end
end
2015-06-09 12:19:41 -04:00
context " with multiple hosts " do
before do
2015-08-18 17:15:46 -04:00
Fabricate ( :embeddable_host )
Fabricate ( :embeddable_host , host : 'http://discourse.org' )
Fabricate ( :embeddable_host , host : 'https://example.com/1234' )
2015-06-09 12:19:41 -04:00
end
context " success " do
it " works with the first host " do
controller . request . stubs ( :referer ) . returns ( " http://eviltrout.com/wat/1-2-3.html " )
get :comments , embed_url : embed_url
expect ( response ) . to be_success
end
2013-12-31 14:37:43 -05:00
2015-06-09 12:19:41 -04:00
it " works with the second host " do
controller . request . stubs ( :referer ) . returns ( " https://discourse.org/blog-entry-1 " )
get :comments , embed_url : embed_url
expect ( response ) . to be_success
end
2015-08-10 15:26:58 -04:00
it " works with a host with a path " do
controller . request . stubs ( :referer ) . returns ( " https://example.com/some-other-path " )
get :comments , embed_url : embed_url
expect ( response ) . to be_success
end
2015-06-09 12:19:41 -04:00
it " doesn't work with a made up host " do
controller . request . stubs ( :referer ) . returns ( " http://codinghorror.com/invalid-url " )
get :comments , embed_url : embed_url
expect ( response ) . to_not be_success
end
end
end
2013-12-31 14:37:43 -05:00
end