From d6818b7e0957c9d90fdb047fd69ba4d9f3a01142 Mon Sep 17 00:00:00 2001 From: Pablo Brasero Date: Wed, 29 Oct 2025 10:32:02 +0000 Subject: [PATCH] Test: users shouldn't receive notifications of own comments Introduce assertions to check if an email was received or not --- .../api/changeset_comments_controller_test.rb | 30 +++++++++++++++++-- test/test_helper.rb | 10 +++++++ 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/test/controllers/api/changeset_comments_controller_test.rb b/test/controllers/api/changeset_comments_controller_test.rb index 0507fec0c..ef51dcd28 100644 --- a/test/controllers/api/changeset_comments_controller_test.rb +++ b/test/controllers/api/changeset_comments_controller_test.rb @@ -228,10 +228,11 @@ module Api creator_user = create(:user) changeset = create(:changeset, :closed, :user => creator_user) changeset.subscribers << creator_user - other_user = create(:user) - changeset.subscribers << other_user + subscriber_user = create(:user) + changeset.subscribers << subscriber_user commenter_user = create(:user) auth_header = bearer_authorization_header commenter_user + unrelated_user = create(:user) assert_difference "ChangesetComment.count", 1 do assert_difference "ActionMailer::Base.deliveries.size", 2 do @@ -243,7 +244,30 @@ module Api end assert_email_received creator_user.email, "[OpenStreetMap] #{commenter_user.display_name} has commented on one of your changesets" - assert_email_received other_user.email, "[OpenStreetMap] #{commenter_user.display_name} has commented on a changeset you are interested in" + assert_email_received subscriber_user.email, "[OpenStreetMap] #{commenter_user.display_name} has commented on a changeset you are interested in" + assert_email_not_received commenter_user.email + assert_email_not_received unrelated_user.email + end + + def test_create_on_changeset_with_changeset_commenter_does_not_receive_email + creator_user = create(:user) + changeset = create(:changeset, :closed, :user => creator_user) + changeset.subscribers << creator_user + commenter_user = create(:user) + changeset.subscribers << commenter_user + auth_header = bearer_authorization_header commenter_user + + assert_difference "ChangesetComment.count", 1 do + assert_difference "ActionMailer::Base.deliveries.size", 1 do + perform_enqueued_jobs do + post api_changeset_changeset_comments_path(changeset, :text => "This is a comment"), :headers => auth_header + assert_response :success + end + end + end + + assert_email_received creator_user.email, "[OpenStreetMap] #{commenter_user.display_name} has commented on one of your changesets" + assert_email_not_received commenter_user.email end ## diff --git a/test/test_helper.rb b/test/test_helper.rb index d564606ab..ef159b0d4 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -195,6 +195,16 @@ module ActiveSupport assert_equal expected_subject, email.subject end + ## + # Check that no email was received on the given email address. + # Note that this assumes that any emails have only one recipient, + # and may give incorrect results otherwise. If you need a different + # behaviour, please extend. + def assert_email_not_received(expected_address) + email = ActionMailer::Base.deliveries.find { |e| e.to.first == expected_address } + assert_nil email + end + ## # execute a block with a given set of HTTP responses stubbed def with_http_stubs(stubs_file) -- 2.39.5