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.
50 lines
1.8 KiB
Ruby
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
|