From 899d4c91f6d87f34ea6889c51cec96e60a1e2bd2 Mon Sep 17 00:00:00 2001 From: Jimmy Date: Wed, 10 Mar 2021 23:09:52 -0800 Subject: [PATCH] [test] Simplify mailbot.rb; Add corresponding tests --- app/mailers/mailbot.rb | 154 ++++++++++++++++------------------- config/environments/test.rb | 1 + spec/mailers/mailbot_spec.rb | 28 ++++++- 3 files changed, 98 insertions(+), 85 deletions(-) diff --git a/app/mailers/mailbot.rb b/app/mailers/mailbot.rb index 216bb9f9..22dfb866 100644 --- a/app/mailers/mailbot.rb +++ b/app/mailers/mailbot.rb @@ -7,21 +7,23 @@ DEFAULT_LOGO = 'snapcon_logo.png' class Mailbot < ActionMailer::Base 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) - @email_body = conference.email_settings.generate_email_on_conf_updates(conference, user, conference.email_settings.registration_body) - @logo_url = logo_url(conference) + @user = user + @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, - from: conference.contact.email, - subject: conference.email_settings.registration_subject) + mail(subject: @conference.email_settings.registration_subject) end def ticket_confirmation_mail(ticket_purchase) @ticket_purchase = ticket_purchase - @conference = ticket_purchase.conference @user = ticket_purchase.user + @conference = ticket_purchase.conference @logo_url = logo_url(@conference) PhysicalTicket.last(ticket_purchase.quantity).each do |physical_ticket| @@ -34,123 +36,111 @@ class Mailbot < ActionMailer::Base template_name = 'young_thinkers_ticket_confirmation_template' end - mail(to: @user.email, - from: @conference.contact.email, - template_name: template_name, - subject: "#{@conference.title} | Ticket Confirmation and PDF!") + mail(subject: "#{@conference.title} | Ticket Confirmation and PDF!", + template_name: template_name) end 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) - @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) + mail(subject: @conference.email_settings.accepted_subject) end 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) - @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) + mail(subject: @conference.email_settings.submitted_proposal_subject) end 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) - @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) + mail(subject: @conference.email_settings.rejected_subject) end 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) - @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) + mail(subject: @conference.email_settings.confirmed_without_registration_subject) end def conference_date_update_mail(conference, user) - @logo_url = logo_url(conference) - @email_body = conference.email_settings.generate_email_on_conf_updates(conference, user, conference.email_settings.conference_dates_updated_body) + @user = user + @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, - from: conference.contact.email, - subject: conference.email_settings.conference_dates_updated_subject) + mail(subject: @conference.email_settings.conference_dates_updated_subject) end def conference_registration_date_update_mail(conference, user) - @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) + @user = user + @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, - from: conference.contact.email, - subject: conference.email_settings.conference_registration_dates_updated_subject) + mail(subject: @conference.email_settings.conference_registration_dates_updated_subject) end def conference_venue_update_mail(conference, user) - @logo_url = logo_url(conference) - @email_body = conference.email_settings.generate_email_on_conf_updates(conference, user, conference.email_settings.venue_updated_body) + @user = user + @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, - from: conference.contact.email, - subject: conference.email_settings.venue_updated_subject) + mail(subject: @conference.email_settings.venue_updated_subject) end def conference_schedule_update_mail(conference, user) - @logo_url = logo_url(conference) - @email_body = conference.email_settings.generate_email_on_conf_updates(conference, user, conference.email_settings.program_schedule_public_body) + @user = user + @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, - bcc: nil, - from: conference.contact.email, - subject: conference.email_settings.program_schedule_public_subject) + mail(bcc: nil, + subject: @conference.email_settings.program_schedule_public_subject) end def conference_cfp_update_mail(conference, user) - @logo_url = logo_url(conference) - @email_body = conference.email_settings.generate_email_on_conf_updates(conference, user, conference.email_settings.cfp_dates_updated_body) + @user = user + @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, - bcc: nil, - from: conference.contact.email, - subject: conference.email_settings.cfp_dates_updated_subject) + mail(bcc: nil, + subject: @conference.email_settings.cfp_dates_updated_subject) end def conference_booths_acceptance_mail(booth) - conference = booth.conference - @logo_url = logo_url(conference) - @email_body = conference.email_settings.generate_booth_mail(booth, conference.email_settings.booths_acceptance_body) + @user = booth.submitter + @conference = booth.conference + @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, - bcc: nil, - from: conference.contact.email, - subject: conference.email_settings.booths_acceptance_subject) + mail(bcc: nil, + subject: @conference.email_settings.booths_acceptance_subject) end def conference_booths_rejection_mail(booth) - conference = booth.conference - @logo_url = logo_url(conference) - @email_body = conference.email_settings.generate_booth_mail(booth, conference.email_settings.booths_rejection_body) + @user = booth.submitter + @conference = booth.conference + @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, - bcc: nil, - from: conference.contact.email, - subject: conference.email_settings.booths_rejection_subject) + mail(bcc: nil, + subject: @conference.email_settings.booths_rejection_subject) end def event_comment_mail(comment, user) @@ -160,9 +150,7 @@ class Mailbot < ActionMailer::Base @user = user @logo_url = logo_url(@conference) - mail(to: @user.email, - bcc: nil, - from: @conference.contact.email, + mail(bcc: nil, template_name: 'comment_template', subject: "New comment has been posted for #{@event.title}") end diff --git a/config/environments/test.rb b/config/environments/test.rb index 225ae26f..1a9d4d7b 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -52,4 +52,5 @@ Osem::Application.configure do ActiveSupport::Deprecation.silenced = true end + config.assets.precompile += ['mailbot.css'] end diff --git a/spec/mailers/mailbot_spec.rb b/spec/mailers/mailbot_spec.rb index 1f739997..22aade61 100644 --- a/spec/mailers/mailbot_spec.rb +++ b/spec/mailers/mailbot_spec.rb @@ -22,8 +22,8 @@ describe Mailbot do expect(mail.from).to eq ['conf@domain.com'] end - it 'assigns the email body' do - expect(mail.body).to include 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit' + it 'assigns the email body with the correct logo' do + expect(mail.body).to include 'snapcon_logo' end it 'delivers the email' do @@ -77,4 +77,28 @@ describe Mailbot do context 'update notifications' do it 'is a pending test' 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