FIX: don't error Topic#similar_to when prepared raw is blank (#10711)

FIX: don’t error Topic#similar_to when prepared raw is blank (#10711)

If raw contains incorrect URL, prepare_data returns empty string:

https://github.com/discourse/discourse/blob/master/lib/search.rb#L91

Therefore we should not only check if the cooked post is not blank but also if prepared data is not blank.

diff --git a/app/models/topic.rb b/app/models/topic.rb
index 3e8c333..67a4ab2 100644
--- a/app/models/topic.rb
+++ b/app/models/topic.rb
@@ -597,9 +597,11 @@ class Topic < ActiveRecord::Base
         PrettyText.cook(raw[0...MAX_SIMILAR_BODY_LENGTH].strip)
       )
 
-      if cooked.present?
+      prepared_data = cooked.present? && Search.prepare_data(cooked)
+
+      if prepared_data.present?
         raw_tsquery = Search.set_tsquery_weight_filter(
-          Search.prepare_data(cooked),
+          prepared_data,
           'B'
         )
 
diff --git a/spec/models/topic_spec.rb b/spec/models/topic_spec.rb
index 72d1583..7ad3647 100644
--- a/spec/models/topic_spec.rb
+++ b/spec/models/topic_spec.rb
@@ -519,6 +519,10 @@ describe Topic do
       expect(Topic.similar_to('some title', '#')).to eq([])
     end
 
+    it 'does not result in invalid statement when prepared data is blank' do
+      expect(Topic.similar_to('some title', 'https://discourse.org/#INCORRECT#URI')).to be_empty
+    end
+
     context 'with a similar topic' do
       fab!(:post) {
         SearchIndexer.enable

GitHub sha: c934a0f7

This commit appears in #10711 which was approved by eviltrout. It was merged by lis2.