Files
nairobi/spec/features/admin/emails/emails_download_spec.rb
Bertocq 99851e9588 Remove empty emails from users segments recipients
Why:

User with an empty email value (nil) should not appear in the recipient
list for a given UserSegment at Newsletters or Email Downloads.

How:

Using Enumerable#compact and Enumerable#select to filter out empty emails

Increasing Email Download feature spec and Newsletter model spec to cover
all possible scenarios including the nil email one.
2018-03-01 20:09:32 +01:00

50 lines
1.8 KiB
Ruby

require 'rails_helper'
feature "Admin download user emails" do
let(:admin_user) { create(:user, newsletter: false, email: 'admin@consul.dev') }
background do
create(:administrator, user: admin_user)
login_as(admin_user)
end
context "Download only emails from segment users with newsletter flag & present email " do
before do
create(:user, email: 'user@consul.dev')
create(:administrator, user: create(:user, newsletter: true, email: 'admin_news1@consul.dev'))
create(:administrator, user: create(:user, newsletter: true, email: 'admin_news2@consul.dev'))
create(:administrator, user: create(:user, newsletter: false, email: 'no_news@consul.dev'))
admin_without_email = create(:user, newsletter: true, email: 'no_email@consul.dev')
create(:administrator, user: admin_without_email)
admin_without_email.update_attribute(:email, nil)
end
scenario "returns the selected users segment csv file" do
visit admin_emails_download_index_path
within('#admin_download_emails') do
select 'Administrators', from: 'users_segment'
click_button 'Download emails list'
end
header = page.response_headers['Content-Disposition']
expect(header).to match /^attachment/
expect(header).to match /filename="Administrators.csv"$/
file_contents = page.body.split(',')
expect(file_contents.count).to eq(2)
expect(file_contents).to include('admin_news1@consul.dev')
expect(file_contents).to include('admin_news2@consul.dev')
expect(file_contents).not_to include('admin@consul.dev')
expect(file_contents).not_to include('user@consul.dev')
expect(file_contents).not_to include('no_news@consul.dev')
expect(file_contents).not_to include('no_email@consul.dev')
end
end
end