From f9d55b49416971023fce2b457d3d5384c2c52cac Mon Sep 17 00:00:00 2001 From: Martin Brennan Date: Fri, 22 May 2020 13:04:15 +1000 Subject: [PATCH] FEATURE: Update the topic excerpt when the OP is rebaked (#9852) * We now have a site setting "topic_excerpt_maxlength" that is used when the OP is created or revised to generate a topic excerpt. * However, posts created before this setting was introduced cannot benefit from this change unless they are revised, and if the topic excerpt length setting is changed that situation is also not covererd. * This PR makes a change to rebake! to update the topic excerpt IF the post is the OP. --- app/models/post.rb | 4 ++++ app/models/topic.rb | 7 +++++++ lib/post_revisor.rb | 6 +----- spec/models/post_spec.rb | 19 +++++++++++++++++++ 4 files changed, 31 insertions(+), 5 deletions(-) diff --git a/app/models/post.rb b/app/models/post.rb index 30ebaf01630..e1a3a1f391e 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -650,6 +650,10 @@ class Post < ActiveRecord::Base baked_version: BAKED_VERSION ) + if is_first_post? + topic.update_excerpt(excerpt_for_topic) + end + if invalidate_broken_images custom_fields.delete(BROKEN_IMAGES) save_custom_fields diff --git a/app/models/topic.rb b/app/models/topic.rb index f02b4fc030f..38affdb327b 100644 --- a/app/models/topic.rb +++ b/app/models/topic.rb @@ -1476,6 +1476,13 @@ class Topic < ActiveRecord::Base private_topic end + def update_excerpt(excerpt) + update_column(:excerpt, excerpt) + if archetype == "banner" + ApplicationController.banner_json_cache.clear + end + end + def pm_with_non_human_user? sql = <<~SQL SELECT 1 FROM topics diff --git a/lib/post_revisor.rb b/lib/post_revisor.rb index 3c9ec277cdb..d610fccf375 100644 --- a/lib/post_revisor.rb +++ b/lib/post_revisor.rb @@ -567,11 +567,7 @@ class PostRevisor end def update_topic_excerpt - excerpt = @post.excerpt_for_topic - @topic.update_column(:excerpt, excerpt) - if @topic.archetype == "banner" - ApplicationController.banner_json_cache.clear - end + @topic.update_excerpt(@post.excerpt_for_topic) end def update_category_description diff --git a/spec/models/post_spec.rb b/spec/models/post_spec.rb index d0e2aba6319..5bc5206bced 100644 --- a/spec/models/post_spec.rb +++ b/spec/models/post_spec.rb @@ -1195,6 +1195,25 @@ describe Post do expect(post.cooked).to eq(first_cooked) expect(result).to eq(true) end + + it "updates the topic excerpt at the same time if it is the OP" do + post = create_post + post.topic.update(excerpt: "test") + DB.exec("UPDATE posts SET cooked = 'frogs' WHERE id = ?", [ post.id ]) + post.reload + result = post.rebake! + post.topic.reload + expect(post.topic.excerpt).not_to eq("test") + end + + it "does not update the topic excerpt if the post is not the OP" do + post = create_post + post2 = create_post + post.topic.update(excerpt: "test") + result = post2.rebake! + post.topic.reload + expect(post.topic.excerpt).to eq("test") + end end describe "#set_owner" do