Merge pull request #2492 from consul/fix_newsletter_send_performance
Fixed how newsletters controller and mailer handle recipients
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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')
|
||||
|
||||
Reference in New Issue
Block a user