From 269678efd37ec39f0869d80fa009d2f4e03eb98e Mon Sep 17 00:00:00 2001 From: Pablo Brasero Date: Wed, 29 Oct 2025 10:32:02 +0000 Subject: [PATCH] DRY tests with assertions to check whether an email was received --- .../api/changeset_comments_controller_test.rb | 11 ++--------- test/controllers/api/notes_controller_test.rb | 12 ++---------- test/test_helper.rb | 13 +++++++++++++ 3 files changed, 17 insertions(+), 19 deletions(-) diff --git a/test/controllers/api/changeset_comments_controller_test.rb b/test/controllers/api/changeset_comments_controller_test.rb index f13bf36e7..0507fec0c 100644 --- a/test/controllers/api/changeset_comments_controller_test.rb +++ b/test/controllers/api/changeset_comments_controller_test.rb @@ -242,15 +242,8 @@ module Api end end - email = ActionMailer::Base.deliveries.find { |e| e.to.first == creator_user.email } - assert_not_nil email - assert_equal 1, email.to.length - assert_equal "[OpenStreetMap] #{commenter_user.display_name} has commented on one of your changesets", email.subject - - email = ActionMailer::Base.deliveries.find { |e| e.to.first == other_user.email } - assert_not_nil email - assert_equal 1, email.to.length - assert_equal "[OpenStreetMap] #{commenter_user.display_name} has commented on a changeset you are interested in", email.subject + 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" end ## diff --git a/test/controllers/api/notes_controller_test.rb b/test/controllers/api/notes_controller_test.rb index 3e51d9ba3..d04f3888c 100644 --- a/test/controllers/api/notes_controller_test.rb +++ b/test/controllers/api/notes_controller_test.rb @@ -373,16 +373,8 @@ module Api assert_equal third_user, subscription.user assert_equal note_with_comments_by_users, subscription.note - email = ActionMailer::Base.deliveries.find { |e| e.to.first == first_user.email } - assert_not_nil email - assert_equal 1, email.to.length - assert_equal "[OpenStreetMap] #{third_user.display_name} has commented on one of your notes", email.subject - assert_equal first_user.email, email.to.first - - email = ActionMailer::Base.deliveries.find { |e| e.to.first == second_user.email } - assert_not_nil email - assert_equal 1, email.to.length - assert_equal "[OpenStreetMap] #{third_user.display_name} has commented on a note you are interested in", email.subject + assert_email_received first_user.email, "[OpenStreetMap] #{third_user.display_name} has commented on one of your notes" + assert_email_received second_user.email, "[OpenStreetMap] #{third_user.display_name} has commented on a note you are interested in" get api_note_path(note_with_comments_by_users, :format => "json") assert_response :success diff --git a/test/test_helper.rb b/test/test_helper.rb index d9a03fec1..d564606ab 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -182,6 +182,19 @@ module ActiveSupport assert_select "span[class=translation_missing]", false, "Missing translation #{msg}" end + ## + # Check that an email was received on the given email address, + # with the given subject. Note that it assumes that there's only + # one recipient and will fail otherwise. If you need a different + # behaviour, please extend. + def assert_email_received(expected_address, expected_subject) + email = ActionMailer::Base.deliveries.find { |e| e.to.first == expected_address } + assert_not_nil email + assert_equal 1, email.to.length + assert_equal expected_address, email.to.first + assert_equal expected_subject, email.subject + end + ## # execute a block with a given set of HTTP responses stubbed def with_http_stubs(stubs_file) -- 2.39.5