From 04dfd3ffc9c5a5df392640ec10b7aae7b11117c1 Mon Sep 17 00:00:00 2001 From: Marcus Low Date: Sat, 30 May 2026 08:55:41 -0700 Subject: [PATCH 1/2] AO3-7488 Prevent deleted and spam comments from being resubmitted to Akismet --- app/models/comment.rb | 2 ++ spec/models/comment_spec.rb | 30 ++++++++++++++++++++++++++++-- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/app/models/comment.rb b/app/models/comment.rb index a46daf221cb..c54cb75decf 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -510,6 +510,8 @@ def spam? end def submit_spam + return unless approved && !is_deleted + AkismetClient.submit_spam(akismet_attributes) end diff --git a/spec/models/comment_spec.rb b/spec/models/comment_spec.rb index d45a34d175c..76b45089629 100644 --- a/spec/models/comment_spec.rb +++ b/spec/models/comment_spec.rb @@ -928,10 +928,18 @@ def queue_adapter_for_test expect(comment.approved).to be_falsey expect(comment.spam).to be_truthy end + + it "submits the comment to Akismet" do + expect(AkismetClient).to receive(:submit_spam) + + comment.mark_as_spam! + end end context "when the comment is already marked as spam" do - let(:comment) { create(:comment, approved: false, spam: false) } + let(:comment) { build(:comment, approved: false, spam: true) } + + before { comment.save!(validate: false) } it "flags the comment as spam" do comment.mark_as_spam! @@ -939,11 +947,29 @@ def queue_adapter_for_test expect(comment.approved).to be_falsey expect(comment.spam).to be_truthy end + + it "does not resubmit the comment to Akismet" do + expect(AkismetClient).not_to receive(:submit_spam) + + comment.mark_as_spam! + end + end + + context "when the comment is deleted" do + let(:comment) { create(:comment, approved: true, spam: false, is_deleted: true) } + + it "does not submit the comment to akismet" do + expect(AkismetClient).not_to receive(:submit_spam) + + comment.mark_as_spam! + end end end describe "#mark_as_ham!" do - let(:comment) { create(:comment, approved: false, spam: true) } + let(:comment) { build(:comment, approved: false, spam: true) } + + before { comment.save!(validate: false) } it "flags the comment as legitimate" do comment.mark_as_ham! From de7fdbd54df1483ccac81545c14b0ca0fdd7d111 Mon Sep 17 00:00:00 2001 From: Marcus Low Date: Sat, 30 May 2026 13:54:25 -0700 Subject: [PATCH 2/2] AO3-7488 Use create_invalid to create comments marked as spam might as well fix it --- spec/models/comment_spec.rb | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/spec/models/comment_spec.rb b/spec/models/comment_spec.rb index 76b45089629..0bdc937fd26 100644 --- a/spec/models/comment_spec.rb +++ b/spec/models/comment_spec.rb @@ -937,9 +937,7 @@ def queue_adapter_for_test end context "when the comment is already marked as spam" do - let(:comment) { build(:comment, approved: false, spam: true) } - - before { comment.save!(validate: false) } + let(:comment) { create_invalid(:comment, approved: false, spam: true) } it "flags the comment as spam" do comment.mark_as_spam! @@ -967,9 +965,7 @@ def queue_adapter_for_test end describe "#mark_as_ham!" do - let(:comment) { build(:comment, approved: false, spam: true) } - - before { comment.save!(validate: false) } + let(:comment) { create_invalid(:comment, approved: false, spam: true) } it "flags the comment as legitimate" do comment.mark_as_ham!