mirror of
https://github.com/discourse/discourse.git
synced 2024-11-24 04:04:21 +08:00
b2f4659792
When you specify `discourse_username` param on the embed URL, it should translate to creating the post with that username. This commit ensures that this is now the case.
141 lines
4.4 KiB
Ruby
141 lines
4.4 KiB
Ruby
require 'rails_helper'
|
|
|
|
describe EmbedController do
|
|
|
|
let(:host) { "eviltrout.com" }
|
|
let(:embed_url) { "http://eviltrout.com/2013/02/10/why-discourse-uses-emberjs.html" }
|
|
let(:discourse_username) { "eviltrout" }
|
|
|
|
it "is 404 without an embed_url" do
|
|
get :comments
|
|
expect(response).not_to be_success
|
|
end
|
|
|
|
it "raises an error with a missing host" do
|
|
get :comments, embed_url: embed_url
|
|
expect(response).not_to be_success
|
|
end
|
|
|
|
context "by topic id" do
|
|
|
|
before do
|
|
Fabricate(:embeddable_host)
|
|
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
|
|
|
|
context ".info" do
|
|
context "without api key" do
|
|
it "fails" do
|
|
get :info, format: :json
|
|
expect(response).not_to be_success
|
|
end
|
|
end
|
|
|
|
context "with api key" do
|
|
|
|
let(:api_key) { ApiKey.create_master_key }
|
|
|
|
context "with valid embed url" do
|
|
let(:topic_embed) { Fabricate(:topic_embed, embed_url: embed_url) }
|
|
|
|
it "returns information about the topic" do
|
|
get :info, format: :json, embed_url: topic_embed.embed_url, api_key: api_key.key, api_username: "system"
|
|
json = JSON.parse(response.body)
|
|
expect(json['topic_id']).to eq(topic_embed.topic.id)
|
|
expect(json['post_id']).to eq(topic_embed.post.id)
|
|
expect(json['topic_slug']).to eq(topic_embed.topic.slug)
|
|
end
|
|
end
|
|
|
|
context "without invalid embed url" do
|
|
it "returns error response" do
|
|
get :info, format: :json, embed_url: "http://nope.com", api_key: api_key.key, api_username: "system"
|
|
json = JSON.parse(response.body)
|
|
expect(json["error_type"]).to eq("not_found")
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
context "with a host" do
|
|
let!(:embeddable_host) { Fabricate(:embeddable_host) }
|
|
|
|
it "raises an error with no referer" do
|
|
get :comments, embed_url: embed_url
|
|
expect(response).not_to be_success
|
|
end
|
|
|
|
context "success" do
|
|
before do
|
|
controller.request.stubs(:referer).returns(embed_url)
|
|
end
|
|
|
|
after do
|
|
expect(response).to be_success
|
|
expect(response.headers['X-Frame-Options']).to eq("ALLOWALL")
|
|
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)
|
|
get :comments, embed_url: embed_url
|
|
end
|
|
|
|
it "creates a topic view when a topic_id is found" do
|
|
TopicEmbed.expects(:topic_id_for_embed).returns(123)
|
|
TopicView.expects(:new).with(123, nil, {limit: 100, exclude_first: true, exclude_deleted_users: true})
|
|
get :comments, embed_url: embed_url
|
|
end
|
|
|
|
it "provides the topic retriever with the discourse username when provided" do
|
|
TopicRetriever.expects(:new).with(embed_url, has_entry({author_username: discourse_username}))
|
|
get :comments, embed_url: embed_url, discourse_username: discourse_username
|
|
end
|
|
|
|
end
|
|
end
|
|
|
|
context "with multiple hosts" do
|
|
before do
|
|
Fabricate(:embeddable_host)
|
|
Fabricate(:embeddable_host, host: 'http://discourse.org')
|
|
Fabricate(:embeddable_host, host: 'https://example.com/1234')
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
end
|