diff --git a/lib/validators/post_validator.rb b/lib/validators/post_validator.rb index 750c3ac5899..9c43cf07d67 100644 --- a/lib/validators/post_validator.rb +++ b/lib/validators/post_validator.rb @@ -146,6 +146,7 @@ class Validators::PostValidator < ActiveModel::Validator return if SiteSetting.max_consecutive_replies == 0 || post.id || post.acting_user&.staff? || private_message?(post) topic = post.topic + return if topic.posts.first&.user == post.user last_posts_count = DB.query_single(<<~SQL, topic_id: post.topic_id, user_id: post.acting_user.id, max_replies: SiteSetting.max_consecutive_replies).first SELECT COUNT(*) diff --git a/spec/components/validators/post_validator_spec.rb b/spec/components/validators/post_validator_spec.rb index cb33aa81468..de1df04bd33 100644 --- a/spec/components/validators/post_validator_spec.rb +++ b/spec/components/validators/post_validator_spec.rb @@ -229,7 +229,19 @@ describe Validators::PostValidator do SiteSetting.max_consecutive_replies = 2 end + it "should always allow posting" do + [user, user, user, other_user, user, user, user].each_with_index do |u, i| + post = Post.new(user: user, topic: topic, raw: "post number #{i}") + validator.force_edit_last_validator(post) + expect(post.errors.count).to eq(0) + post.save + end + end + it "should not allow posting more than 2 consecutive replies" do + post = Post.new(user: other_user, topic: topic, raw: "post number 0") + post.save + 1.upto(3).each do |i| post = Post.new(user: user, topic: topic, raw: "post number #{i}") validator.force_edit_last_validator(post)