Files
nairobi/spec/models/newsletter_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

68 lines
2.1 KiB
Ruby

require 'rails_helper'
describe Newsletter do
let(:newsletter) { build(:newsletter) }
it "is valid" do
expect(newsletter).to be_valid
end
it 'is not valid without a subject' do
newsletter.subject = nil
expect(newsletter).not_to be_valid
end
it 'is not valid without a segment_recipient' do
newsletter.segment_recipient = nil
expect(newsletter).not_to be_valid
end
it 'is not valid with an inexistent user segment for segment_recipient' do
newsletter.segment_recipient = 'invalid_user_segment_name'
expect(newsletter).not_to be_valid
end
it 'is not valid without a from' do
newsletter.from = nil
expect(newsletter).not_to be_valid
end
it 'is not valid without a body' do
newsletter.body = nil
expect(newsletter).not_to be_valid
end
it 'validates from attribute email format' do
newsletter.from = "this_is_not_an_email"
expect(newsletter).not_to be_valid
end
describe '#valid_segment_recipient?' do
it 'is false when segment_recipient value is invalid' do
newsletter.update(segment_recipient: 'invalid_segment_name')
error = 'The user recipients segment is invalid'
expect(newsletter).not_to be_valid
expect(newsletter.errors.messages[:segment_recipient]).to include(error)
end
end
describe '#list_of_recipients' do
before do
create(:user, newsletter: true, email: 'newsletter_user@consul.dev')
no_news_user = create(:user, newsletter: false, email: 'no_news_user@consul.dev')
erased_user = create(:user, email: 'erased_user@consul.dev')
erased_user.erase
newsletter.update(segment_recipient: 'all_users')
end
it 'returns list of recipients excluding users with disabled newsletter' do
expect(newsletter.list_of_recipients.count).to eq(1)
expect(newsletter.list_of_recipients.map(&:email)).to include('newsletter_user@consul.dev')
expect(newsletter.list_of_recipients.map(&:email)).not_to include('no_news_user@consul.dev')
expect(newsletter.list_of_recipients.map(&:email)).not_to include('erased_user@consul.dev')
end
end
end