FIX: onebox local topic when using slug-less URL

FIX: onebox local topic when using slug-less URL

When linking to a topic in the same Discourse, we try to onebox the link to show the title and other various information depending on whether it’s a “standard” or “inline” onebox.

However, we were not properly detecting links to topics that had no slugs (eg. https://meta.discourse.org/t/1234).

diff --git a/lib/oneboxer.rb b/lib/oneboxer.rb
index d3625f1..eb5067c 100644
--- a/lib/oneboxer.rb
+++ b/lib/oneboxer.rb
@@ -219,9 +219,7 @@ module Oneboxer
       end
     end
 
-    topic = Topic.find_by(id: route[:topic_id])
-
-    return unless topic
+    return unless topic = Topic.find_by(id: route[:id] || route[:topic_id])
     return if topic.private_message?
 
     if current_category.blank? || current_category.id != topic.category_id
diff --git a/spec/components/oneboxer_spec.rb b/spec/components/oneboxer_spec.rb
index c5bc2dc..f1681e5 100644
--- a/spec/components/oneboxer_spec.rb
+++ b/spec/components/oneboxer_spec.rb
@@ -69,6 +69,9 @@ describe Oneboxer do
       expect(onebox).to include(%{data-post="2"})
       expect(onebox).to include(PrettyText.avatar_img(replier.avatar_template, "tiny"))
 
+      short_url = "#{Discourse.base_uri}/t/#{public_topic.id}"
+      expect(preview(short_url, user, public_category)).to include(public_topic.title)
+
       onebox = preview(public_moderator_action.url, user, public_category)
       expect(onebox).to include(public_moderator_action.excerpt)
       expect(onebox).to include(%{data-post="4"})

GitHub sha: 91c89df6

1 Like