FIX: Set unique post key for a user outside of transaction.

Previously, the Redis key was set within the transaction and the key
isn't deleted if the transaction is not successful.

Note that this isn't tested because we don't have a repro of what can
raise an error within the transaction.

https://meta.discourse.org/t/body-is-too-similar-to-what-you-previously-posted-even-when-previous-post-didnt-go-through/105436
This commit is contained in:
Guo Xiang Tan 2019-01-08 15:02:51 +08:00
parent 05c015d252
commit ec27db78be
2 changed files with 4 additions and 3 deletions

View File

@ -167,7 +167,6 @@ class PostCreator
create_topic create_topic
save_post save_post
extract_links extract_links
store_unique_post_key
track_topic track_topic
update_topic_stats update_topic_stats
update_topic_auto_close update_topic_auto_close
@ -182,6 +181,7 @@ class PostCreator
end end
if @post && errors.blank? && !@opts[:import_mode] if @post && errors.blank? && !@opts[:import_mode]
store_unique_post_key
# update counters etc. # update counters etc.
@post.topic.reload @post.topic.reload

View File

@ -580,8 +580,9 @@ describe PostCreator do
it "returns blank for another post with the same content" do it "returns blank for another post with the same content" do
creator.create creator.create
new_post_creator.create post = new_post_creator.create
expect(new_post_creator.errors).to be_present
expect(post.errors[:raw]).to include(I18n.t(:just_posted_that))
end end
it "returns a post for admins" do it "returns a post for admins" do