Why: Both Newsletters and Email Downloads need the same logic: To extract the emails from all the users in the segment that have newsletter flag active, removing all empty email values. How: 1- UserSegments#user_segment_emails holds that repeated logic and is used on both Newsletter & EmailDownload. 2- Rename Newsletter#list_of_recipients to list_of_recipient_emails as it is more descriptive. There is no need to pass entire Users around, only the emails are needed at Mailer#newsletter method. 3- Cleanup Newsletter#list_of_recipient_emails model spec scenario
67 lines
2.0 KiB
Ruby
67 lines
2.0 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_recipient_emails' do
|
|
|
|
before do
|
|
create(:user, newsletter: true, email: 'newsletter_user@consul.dev')
|
|
create(:user, newsletter: false, email: 'no_news_user@consul.dev')
|
|
create(:user, email: 'erased_user@consul.dev').erase
|
|
newsletter.update(segment_recipient: 'all_users')
|
|
end
|
|
|
|
it 'returns list of recipients excluding users with disabled newsletter' do
|
|
expect(newsletter.list_of_recipient_emails.count).to eq(1)
|
|
expect(newsletter.list_of_recipient_emails).to include('newsletter_user@consul.dev')
|
|
expect(newsletter.list_of_recipient_emails).not_to include('no_news_user@consul.dev')
|
|
expect(newsletter.list_of_recipient_emails).not_to include('erased_user@consul.dev')
|
|
end
|
|
end
|
|
end
|