From e51293d298f4f5ec45b2a1b7a9db5d9c46fb5966 Mon Sep 17 00:00:00 2001 From: Rafael dos Santos Silva Date: Mon, 1 Feb 2016 13:30:48 -0200 Subject: [PATCH 1/2] FIX: Local onebox on subfolder installs This should fix oneboxing local topics when using the subfolder install feature. --- lib/onebox/engine/discourse_local_onebox.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/onebox/engine/discourse_local_onebox.rb b/lib/onebox/engine/discourse_local_onebox.rb index cac4503d6..6708c98d8 100644 --- a/lib/onebox/engine/discourse_local_onebox.rb +++ b/lib/onebox/engine/discourse_local_onebox.rb @@ -14,7 +14,7 @@ module Onebox if other.kind_of?(URI) uri = other begin - route = Rails.application.routes.recognize_path(uri.path) + route = Rails.application.routes.recognize_path(uri.path.sub(Discourse.base_uri, "")) case route[:controller] when 'uploads' super @@ -34,7 +34,7 @@ module Onebox def to_html uri = URI::parse(@url) - route = Rails.application.routes.recognize_path(uri.path) + route = Rails.application.routes.recognize_path(uri.path.sub(Discourse.base_uri, "")) url = @url.sub(/[&?]source_topic_id=(\d+)/, "") source_topic_id = $1.to_i From 2b32a5c48e00ce69f471a7f46dd9498540387001 Mon Sep 17 00:00:00 2001 From: Rafael dos Santos Silva Date: Tue, 2 Feb 2016 22:57:54 -0200 Subject: [PATCH 2/2] Adds tests to subfolder internal oneboxing Test if the local onebox engine works fine when using a sulbfolder install --- .../engine/discourse_local_onebox_spec.rb | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/spec/components/onebox/engine/discourse_local_onebox_spec.rb b/spec/components/onebox/engine/discourse_local_onebox_spec.rb index 2121100cf..627eaba4b 100644 --- a/spec/components/onebox/engine/discourse_local_onebox_spec.rb +++ b/spec/components/onebox/engine/discourse_local_onebox_spec.rb @@ -94,4 +94,61 @@ describe Onebox::Engine::DiscourseLocalOnebox do expect(html).to eq("") end end + + context "When deployed to a subfolder" do + let(:base_url) { "http://test.localhost/subfolder" } + let(:base_uri) { "/subfolder" } + + before do + Discourse.stubs(:base_url).returns(base_url) + Discourse.stubs(:base_uri).returns(base_uri) + end + + it "matches for a topic url" do + url = "#{Discourse.base_url}/t/hot-topic" + expect(Onebox.has_matcher?(url)).to eq(true) + expect(Onebox::Matcher.new(url).oneboxed).to eq(described_class) + end + + it "matches for a post url" do + url = "#{Discourse.base_url}/t/hot-topic/23/2" + expect(Onebox.has_matcher?(url)).to eq(true) + expect(Onebox::Matcher.new(url).oneboxed).to eq(described_class) + end + + context "for a link to a post" do + let(:post) { Fabricate(:post) } + let(:post2) { Fabricate(:post, topic: post.topic, post_number: 2) } + + it "returns a link if post isn't found" do + url = "#{Discourse.base_url}/t/not-exist/3/2" + expect(Onebox.preview(url).to_s).to eq("#{url}") + end + + it "returns a link if not allowed to see the post" do + url = "#{Discourse.base_url}#{post2.url}" + Guardian.any_instance.stubs(:can_see?).returns(false) + expect(Onebox.preview(url).to_s).to eq("#{url}") + end + + it "returns a link if post is hidden" do + hidden_post = Fabricate(:post, topic: post.topic, post_number: 2, hidden: true, hidden_reason_id: Post.hidden_reasons[:flag_threshold_reached]) + url = "#{Discourse.base_url}#{hidden_post.url}" + expect(Onebox.preview(url).to_s).to eq("#{url}") + end + + it "returns some onebox goodness if post exists and can be seen" do + url = "#{Discourse.base_url}#{post2.url}?source_topic_id=#{post2.topic_id+1}" + Guardian.any_instance.stubs(:can_see?).returns(true) + html = Onebox.preview(url).to_s + expect(html).to include(post2.excerpt) + expect(html).to include(post2.topic.title) + + url = "#{Discourse.base_url}#{post2.url}" + html = Onebox.preview(url).to_s + expect(html).to include(post2.user.username) + expect(html).to include(post2.excerpt) + end + end + end end