From 8d2a10374432a80aa690c9ad5ff9e1ce20338b5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Checa?= Date: Tue, 27 Feb 2018 13:12:34 +0100 Subject: [PATCH 1/2] Changed how newsletters controller and mailer handle recipients Now newsletters controller calls the Mailer method to send a newsletter once per user. --- app/controllers/admin/newsletters_controller.rb | 5 ++++- app/mailers/mailer.rb | 8 +++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/app/controllers/admin/newsletters_controller.rb b/app/controllers/admin/newsletters_controller.rb index 3cc2853c1..12522927c 100644 --- a/app/controllers/admin/newsletters_controller.rb +++ b/app/controllers/admin/newsletters_controller.rb @@ -48,7 +48,10 @@ class Admin::NewslettersController < Admin::BaseController @newsletter = Newsletter.find(params[:id]) if @newsletter.valid? - Mailer.newsletter(@newsletter).deliver_later + @newsletter.list_of_recipients.each do |recipient| + Mailer.newsletter(@newsletter, recipient).deliver_later + end + @newsletter.update(sent_at: Time.current) flash[:notice] = t("admin.newsletters.send_success") else diff --git a/app/mailers/mailer.rb b/app/mailers/mailer.rb index 5b667d477..a46e2866a 100644 --- a/app/mailers/mailer.rb +++ b/app/mailers/mailer.rb @@ -126,13 +126,11 @@ class Mailer < ApplicationMailer end end - def newsletter(newsletter) + def newsletter(newsletter, recipient) @newsletter = newsletter - @email_to = newsletter.list_of_recipients + @email_to = recipient.email - @email_to.map(&:email).uniq.each do |recipient| - mail(to: recipient, from: @newsletter.from, subject: @newsletter.subject) - end + mail(to: @email_to, from: @newsletter.from, subject: @newsletter.subject) end private From 3867c6b716b54ef6fe411d956eb0c88f65c71f89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Checa?= Date: Tue, 27 Feb 2018 16:19:35 +0100 Subject: [PATCH 2/2] Fixed newsletter tests --- spec/features/emails_spec.rb | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/spec/features/emails_spec.rb b/spec/features/emails_spec.rb index 0bedff8b5..268c2251f 100644 --- a/spec/features/emails_spec.rb +++ b/spec/features/emails_spec.rb @@ -494,20 +494,30 @@ feature 'Emails' do context "Newsletter" do scenario "Send newsletter email to selected users" do + user_with_newsletter_in_segment_1 = create(:user, newsletter: true) + user_with_newsletter_in_segment_2 = create(:user, newsletter: true) + user_with_newsletter_not_in_segment = create(:user, newsletter: true) + user_without_newsletter_in_segment = create(:user, newsletter: false) + + create(:proposal, author: user_with_newsletter_in_segment_1) + create(:proposal, author: user_with_newsletter_in_segment_2) + create(:proposal, author: user_without_newsletter_in_segment) + admin = create(:administrator) login_as(admin.user) visit new_admin_newsletter_path - fill_in_newsletter_form + fill_in_newsletter_form(segment_recipient: 'Proposal authors') click_button "Create Newsletter" expect(page).to have_content "Newsletter created successfully" click_link "Send" - UserSegments.send(Newsletter.first.segment_recipient).each do |user| - expect(unread_emails_for(user.email).count).to eq 1 - end + expect(unread_emails_for(user_with_newsletter_in_segment_1.email).count).to eq 1 + expect(unread_emails_for(user_with_newsletter_in_segment_2.email).count).to eq 1 + expect(unread_emails_for(user_with_newsletter_not_in_segment.email).count).to eq 0 + expect(unread_emails_for(user_without_newsletter_in_segment.email).count).to eq 0 email = open_last_email expect(email).to have_subject('This is a different subject')