FIX: Improve Onebox detection (#8019)

FIX: Improve Onebox detection (#8019)

Follow-up to 7c83d2eeb261ac676a8320e6a704752c56fd242e.

diff --git a/app/models/post_analyzer.rb b/app/models/post_analyzer.rb
index a954032..cfc64e5 100644
--- a/app/models/post_analyzer.rb
+++ b/app/models/post_analyzer.rb
@@ -9,10 +9,11 @@ class PostAnalyzer
     @raw = raw
     @topic_id = topic_id
     @onebox_urls = []
+    @found_oneboxes = false
   end
 
   def found_oneboxes?
-    @onebox_urls.present?
+    @found_oneboxes
   end
 
   def has_oneboxes?
@@ -36,7 +37,9 @@ class PostAnalyzer
     result = Oneboxer.apply(cooked) do |url|
       @onebox_urls << url
       Oneboxer.invalidate(url) if opts[:invalidate_oneboxes]
-      Oneboxer.cached_onebox(url)
+      onebox = Oneboxer.cached_onebox(url)
+      @found_oneboxes = true if onebox.present?
+      onebox
     end
 
     cooked = result.to_html if result.changed?
@@ -126,7 +129,7 @@ class PostAnalyzer
 
   # How many links are present in the post
   def link_count
-    raw_links.size
+    raw_links.size + @onebox_urls.size
   end
 
   def cooked_stripped
diff --git a/lib/cooked_post_processor.rb b/lib/cooked_post_processor.rb
index 46050a6..f709b3d 100644
--- a/lib/cooked_post_processor.rb
+++ b/lib/cooked_post_processor.rb
@@ -28,7 +28,7 @@ class CookedPostProcessor
     @cooking_options = @cooking_options.symbolize_keys
 
     @doc = Nokogiri::HTML::fragment(post.cook(post.raw, @cooking_options))
-    @has_oneboxes = @doc.css("aside.onebox").count > 0
+    @has_oneboxes = post.post_analyzer.found_oneboxes?
     @size_cache = {}
 
     @disable_loading_image = !!opts[:disable_loading_image]
diff --git a/plugins/discourse-narrative-bot/spec/discourse_narrative_bot/new_user_narrative_spec.rb b/plugins/discourse-narrative-bot/spec/discourse_narrative_bot/new_user_narrative_spec.rb
index 8919905..1b35acd 100644
--- a/plugins/discourse-narrative-bot/spec/discourse_narrative_bot/new_user_narrative_spec.rb
+++ b/plugins/discourse-narrative-bot/spec/discourse_narrative_bot/new_user_narrative_spec.rb
@@ -268,6 +268,7 @@ describe DiscourseNarrativeBot::NewUserNarrative do
 
     describe 'onebox tutorial' do
       before do
+        Oneboxer.stubs(:cached_onebox).with('https://en.wikipedia.org/wiki/ROT13').returns('oneboxed Wikipedia')
         narrative.set_data(user, state: :tutorial_onebox, topic_id: topic.id)
       end
 
diff --git a/spec/models/post_analyzer_spec.rb b/spec/models/post_analyzer_spec.rb
index ed3000b..14afb3f 100644
--- a/spec/models/post_analyzer_spec.rb
+++ b/spec/models/post_analyzer_spec.rb
@@ -16,7 +16,7 @@ describe PostAnalyzer do
     before { Oneboxer.stubs(:onebox) }
 
     it 'fetches the cached onebox for any urls in the post' do
-      Oneboxer.expects(:cached_onebox).with url
+      Oneboxer.expects(:cached_onebox).with(url).returns('something')
       post_analyzer.cook(raw, options)
       expect(post_analyzer.found_oneboxes?).to be(true)
     end

GitHub sha: 0d22beb8

1 Like