diff --git a/app/models/topic_embed.rb b/app/models/topic_embed.rb index e12f285f59d..cb38ce73fc6 100644 --- a/app/models/topic_embed.rb +++ b/app/models/topic_embed.rb @@ -88,11 +88,20 @@ class TopicEmbed < ActiveRecord::Base post.reload end - revision[:raw] = absolutize_urls(url, contents) if content_sha1 != embed.content_sha1 + if content_sha1 != embed.content_sha1 + revision[:raw] = absolutize_urls(url, contents) + end + revision[:title] = title if title != post.topic.title - post.revise(user, revision, skip_validations: true, bypass_rate_limiter: true) unless revision.empty? - embed.update_column(:content_sha1, content_sha1) if revision[:raw] + unless revision.empty? + post.revise(user, revision, + skip_validations: true, + bypass_rate_limiter: true + ) + end + + embed.update!(content_sha1: content_sha1) if revision[:raw] end end diff --git a/spec/models/topic_embed_spec.rb b/spec/models/topic_embed_spec.rb index 92d6cfd83b0..813da3ece93 100644 --- a/spec/models/topic_embed_spec.rb +++ b/spec/models/topic_embed_spec.rb @@ -22,6 +22,7 @@ describe TopicEmbed do context 'creation of a post' do let!(:post) { TopicEmbed.import(user, url, title, contents) } + let(:topic_embed) { TopicEmbed.find_by(post: post) } it "works as expected with a new URL" do expect(post).to be_present @@ -41,23 +42,27 @@ describe TopicEmbed do end it "Supports updating the post title" do - post = TopicEmbed.import(user, url, "I am a new title", contents) + TopicEmbed.import(user, url, "I am a new title", contents) - expect(post.topic.title).to eq("I am a new title") + topic_embed.reload + expect(topic_embed.post.topic.title).to eq("I am a new title") end it "Supports updating the post content" do - post = TopicEmbed.import(user, url, title, "muhahaha new contents!") + expect do + TopicEmbed.import(user, url, title, "muhahaha new contents!") + end.to change { topic_embed.reload.content_sha1 } - expect(post.cooked).to match(/new contents/) + expect(topic_embed.post.cooked).to match(/new contents/) end it "Supports updating the post author" do new_user = Fabricate(:user) - post = TopicEmbed.import(new_user, url, title, contents) + TopicEmbed.import(new_user, url, title, contents) - expect(post.user).to eq(new_user) - expect(post.topic.user).to eq(new_user) + topic_embed.reload + expect(topic_embed.post.user).to eq(new_user) + expect(topic_embed.post.topic.user).to eq(new_user) end it "Should leave uppercase Feed Entry URL untouched in content" do