[test] Simplify mailbot.rb; Add corresponding tests

This commit is contained in:
Jimmy 2021-03-10 23:09:52 -08:00
parent ac4fb8a757
commit 899d4c91f6
3 changed files with 98 additions and 85 deletions

View file

@ -7,21 +7,23 @@ DEFAULT_LOGO = 'snapcon_logo.png'
class Mailbot < ActionMailer::Base class Mailbot < ActionMailer::Base
default bcc: -> { SNAPCON_BCC_ADDRESS }, default bcc: -> { SNAPCON_BCC_ADDRESS },
template_name: -> { EMAIL_TEMPLATE } template_name: -> { EMAIL_TEMPLATE },
to: -> { @user.email },
from: -> { @conference.contact.email}
def registration_mail(conference, user) def registration_mail(conference, user)
@email_body = conference.email_settings.generate_email_on_conf_updates(conference, user, conference.email_settings.registration_body) @user = user
@logo_url = logo_url(conference) @conference = conference
@email_body = @conference.email_settings.generate_email_on_conf_updates(@conference, @user, @conference.email_settings.registration_body)
@logo_url = logo_url(@conference)
mail(to: user.email, mail(subject: @conference.email_settings.registration_subject)
from: conference.contact.email,
subject: conference.email_settings.registration_subject)
end end
def ticket_confirmation_mail(ticket_purchase) def ticket_confirmation_mail(ticket_purchase)
@ticket_purchase = ticket_purchase @ticket_purchase = ticket_purchase
@conference = ticket_purchase.conference
@user = ticket_purchase.user @user = ticket_purchase.user
@conference = ticket_purchase.conference
@logo_url = logo_url(@conference) @logo_url = logo_url(@conference)
PhysicalTicket.last(ticket_purchase.quantity).each do |physical_ticket| PhysicalTicket.last(ticket_purchase.quantity).each do |physical_ticket|
@ -34,123 +36,111 @@ class Mailbot < ActionMailer::Base
template_name = 'young_thinkers_ticket_confirmation_template' template_name = 'young_thinkers_ticket_confirmation_template'
end end
mail(to: @user.email, mail(subject: "#{@conference.title} | Ticket Confirmation and PDF!",
from: @conference.contact.email, template_name: template_name)
template_name: template_name,
subject: "#{@conference.title} | Ticket Confirmation and PDF!")
end end
def acceptance_mail(event) def acceptance_mail(event)
conference = event.program.conference @user = event.submitter
@conference = event.program.conference
@logo_url = logo_url(@conference)
@email_body = @conference.email_settings.generate_event_mail(event, @conference.email_settings.accepted_body)
@logo_url = logo_url(conference) mail(subject: @conference.email_settings.accepted_subject)
@email_body = conference.email_settings.generate_event_mail(event, conference.email_settings.accepted_body)
mail(to: event.submitter.email,
from: conference.contact.email,
subject: conference.email_settings.accepted_subject)
end end
def submitted_proposal_mail(event) def submitted_proposal_mail(event)
conference = event.program.conference @user = event.submitter
@conference = event.program.conference
@logo_url = logo_url(@conference)
@email_body = @conference.email_settings.generate_event_mail(event, @conference.email_settings.submitted_proposal_body)
@logo_url = logo_url(conference) mail(subject: @conference.email_settings.submitted_proposal_subject)
@email_body = conference.email_settings.generate_event_mail(event, conference.email_settings.submitted_proposal_body)
mail(to: event.submitter.email,
from: conference.contact.email,
subject: conference.email_settings.submitted_proposal_subject)
end end
def rejection_mail(event) def rejection_mail(event)
conference = event.program.conference @user = event.submitter
@conference = event.program.conference
@logo_url = logo_url(@conference)
@email_body = @conference.email_settings.generate_event_mail(event, @conference.email_settings.rejected_body)
@logo_url = logo_url(conference) mail(subject: @conference.email_settings.rejected_subject)
@email_body = conference.email_settings.generate_event_mail(event, conference.email_settings.rejected_body)
mail(to: event.submitter.email,
from: conference.contact.email,
subject: conference.email_settings.rejected_subject)
end end
def confirm_reminder_mail(event) def confirm_reminder_mail(event)
conference = event.program.conference @user = event.submitter
@conference = event.program.conference
@logo_url = logo_url(@conference)
@email_body = @conference.email_settings.generate_event_mail(event, @conference.email_settings.confirmed_without_registration_body)
@logo_url = logo_url(conference) mail(subject: @conference.email_settings.confirmed_without_registration_subject)
@email_body = conference.email_settings.generate_event_mail(event, conference.email_settings.confirmed_without_registration_body)
mail(to: event.submitter.email,
from: conference.contact.email,
subject: conference.email_settings.confirmed_without_registration_subject)
end end
def conference_date_update_mail(conference, user) def conference_date_update_mail(conference, user)
@logo_url = logo_url(conference) @user = user
@email_body = conference.email_settings.generate_email_on_conf_updates(conference, user, conference.email_settings.conference_dates_updated_body) @conference = @conference
@logo_url = logo_url(@conference)
@email_body = @conference.email_settings.generate_email_on_conf_updates(@conference, @user, @conference.email_settings.conference_dates_updated_body)
mail(to: user.email, mail(subject: @conference.email_settings.conference_dates_updated_subject)
from: conference.contact.email,
subject: conference.email_settings.conference_dates_updated_subject)
end end
def conference_registration_date_update_mail(conference, user) def conference_registration_date_update_mail(conference, user)
@logo_url = logo_url(conference) @user = user
@email_body = conference.email_settings.generate_email_on_conf_updates(conference, user, conference.email_settings.conference_registration_dates_updated_body) @conference = conference
@logo_url = logo_url(@conference)
@email_body = @conference.email_settings.generate_email_on_conf_updates(@conference, @user, @conference.email_settings.conference_registration_dates_updated_body)
mail(to: user.email, mail(subject: @conference.email_settings.conference_registration_dates_updated_subject)
from: conference.contact.email,
subject: conference.email_settings.conference_registration_dates_updated_subject)
end end
def conference_venue_update_mail(conference, user) def conference_venue_update_mail(conference, user)
@logo_url = logo_url(conference) @user = user
@email_body = conference.email_settings.generate_email_on_conf_updates(conference, user, conference.email_settings.venue_updated_body) @conference = conference
@logo_url = logo_url(@conference)
@email_body = @conference.email_settings.generate_email_on_conf_updates(@conference, @user, @conference.email_settings.venue_updated_body)
mail(to: user.email, mail(subject: @conference.email_settings.venue_updated_subject)
from: conference.contact.email,
subject: conference.email_settings.venue_updated_subject)
end end
def conference_schedule_update_mail(conference, user) def conference_schedule_update_mail(conference, user)
@logo_url = logo_url(conference) @user = user
@email_body = conference.email_settings.generate_email_on_conf_updates(conference, user, conference.email_settings.program_schedule_public_body) @conference = conference
@logo_url = logo_url(@conference)
@email_body = @conference.email_settings.generate_email_on_conf_updates(@conference, @user, @conference.email_settings.program_schedule_public_body)
mail(to: user.email, mail(bcc: nil,
bcc: nil, subject: @conference.email_settings.program_schedule_public_subject)
from: conference.contact.email,
subject: conference.email_settings.program_schedule_public_subject)
end end
def conference_cfp_update_mail(conference, user) def conference_cfp_update_mail(conference, user)
@logo_url = logo_url(conference) @user = user
@email_body = conference.email_settings.generate_email_on_conf_updates(conference, user, conference.email_settings.cfp_dates_updated_body) @conference = conference
@logo_url = logo_url(@conference)
@email_body = @conference.email_settings.generate_email_on_conf_updates(@conference, @user, @conference.email_settings.cfp_dates_updated_body)
mail(to: user.email, mail(bcc: nil,
bcc: nil, subject: @conference.email_settings.cfp_dates_updated_subject)
from: conference.contact.email,
subject: conference.email_settings.cfp_dates_updated_subject)
end end
def conference_booths_acceptance_mail(booth) def conference_booths_acceptance_mail(booth)
conference = booth.conference @user = booth.submitter
@logo_url = logo_url(conference) @conference = booth.conference
@email_body = conference.email_settings.generate_booth_mail(booth, conference.email_settings.booths_acceptance_body) @logo_url = logo_url(@conference)
@email_body = @conference.email_settings.generate_booth_mail(booth, @conference.email_settings.booths_acceptance_body)
mail(to: booth.submitter.email, mail(bcc: nil,
bcc: nil, subject: @conference.email_settings.booths_acceptance_subject)
from: conference.contact.email,
subject: conference.email_settings.booths_acceptance_subject)
end end
def conference_booths_rejection_mail(booth) def conference_booths_rejection_mail(booth)
conference = booth.conference @user = booth.submitter
@logo_url = logo_url(conference) @conference = booth.conference
@email_body = conference.email_settings.generate_booth_mail(booth, conference.email_settings.booths_rejection_body) @logo_url = logo_url(@conference)
@email_body = @conference.email_settings.generate_booth_mail(booth, @conference.email_settings.booths_rejection_body)
mail(to: booth.submitter.email, mail(bcc: nil,
bcc: nil, subject: @conference.email_settings.booths_rejection_subject)
from: conference.contact.email,
subject: conference.email_settings.booths_rejection_subject)
end end
def event_comment_mail(comment, user) def event_comment_mail(comment, user)
@ -160,9 +150,7 @@ class Mailbot < ActionMailer::Base
@user = user @user = user
@logo_url = logo_url(@conference) @logo_url = logo_url(@conference)
mail(to: @user.email, mail(bcc: nil,
bcc: nil,
from: @conference.contact.email,
template_name: 'comment_template', template_name: 'comment_template',
subject: "New comment has been posted for #{@event.title}") subject: "New comment has been posted for #{@event.title}")
end end

View file

@ -52,4 +52,5 @@ Osem::Application.configure do
ActiveSupport::Deprecation.silenced = true ActiveSupport::Deprecation.silenced = true
end end
config.assets.precompile += ['mailbot.css']
end end

View file

@ -22,8 +22,8 @@ describe Mailbot do
expect(mail.from).to eq ['conf@domain.com'] expect(mail.from).to eq ['conf@domain.com']
end end
it 'assigns the email body' do it 'assigns the email body with the correct logo' do
expect(mail.body).to include 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit' expect(mail.body).to include 'snapcon_logo'
end end
it 'delivers the email' do it 'delivers the email' do
@ -77,4 +77,28 @@ describe Mailbot do
context 'update notifications' do context 'update notifications' do
it 'is a pending test' it 'is a pending test'
end end
context 'helper methods' do
let(:organization) { create(:organization) }
let(:conference2) { create(:conference, organization: organization) }
describe '#logo_url' do
it 'gives the correct logo url' do
mailbot = Mailbot.new
expect(mailbot.send(:logo_url, conference2)).to eq('snapcon_logo.png')
File.open('spec/support/logos/1.png') do |file|
organization.picture = file
end
expect(mailbot.send(:logo_url, conference2)).to include('1.png')
File.open('spec/support/logos/2.png') do |file|
conference2.picture = file
end
expect(mailbot.send(:logo_url, conference2)).to include('2.png')
end
end
end
end end