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 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')