diff --git a/app/services/search_indexer.rb b/app/services/search_indexer.rb index 34b132c9ae9..2f496e12060 100644 --- a/app/services/search_indexer.rb +++ b/app/services/search_indexer.rb @@ -134,7 +134,13 @@ class SearchIndexer category_name = topic.category&.name if topic tag_names = topic.tags.pluck(:name).join(' ') if topic - if Post === obj && (obj.saved_change_to_cooked? || force) + if Post === obj && + ( + obj.saved_change_to_cooked? || + obj.saved_change_to_topic_id? || + force + ) + if topic SearchIndexer.update_posts_index(obj.id, topic.title, category_name, tag_names, obj.cooked) SearchIndexer.update_topics_index(topic.id, topic.title, obj.cooked) if obj.is_first_post? diff --git a/spec/services/search_indexer_spec.rb b/spec/services/search_indexer_spec.rb index 3886eb025a6..097f419c2cf 100644 --- a/spec/services/search_indexer_spec.rb +++ b/spec/services/search_indexer_spec.rb @@ -81,4 +81,26 @@ describe SearchIndexer do raw_data = PostSearchData.where(post_id: post_id).pluck(:raw_data)[0] expect(raw_data).to eq("tester") end + + describe '.index' do + let(:post) { Fabricate(:post) } + + before do + SearchIndexer.enable + end + + after do + SearchIndexer.disable + end + + it 'should index posts correctly' do + expect { post }.to change { PostSearchData.count }.by(1) + + expect { post.update!(raw: "this is new content") } + .to change { post.reload.post_search_data.raw_data } + + expect { post.update!(topic_id: Fabricate(:topic).id) } + .to change { post.reload.post_search_data.raw_data } + end + end end