[refactor] Move Mailbot#logo_url and #conference_color to ConferenceHelper

This commit is contained in:
Jimmy 2021-03-12 00:14:29 -08:00
parent 33ce7a61c6
commit fdb08b0c9a
6 changed files with 52 additions and 66 deletions

View file

@ -1,5 +1,8 @@
# frozen_string_literal: true # frozen_string_literal: true
DEFAULT_LOGO = 'snapcon_logo.png'
DEFAULT_COLOR = '#0B3559'
module ConferenceHelper module ConferenceHelper
# Return true if only call_for_papers or call_for_tracks or call_for_booths is open # Return true if only call_for_papers or call_for_tracks or call_for_booths is open
def one_call_open(*calls) def one_call_open(*calls)
@ -28,6 +31,24 @@ module ConferenceHelper
markdown(ticket.description.split("\n").first&.strip) markdown(ticket.description.split("\n").first&.strip)
end end
def conference_logo_url(conference)
if conference.picture.present?
conference.picture.thumb.url
elsif conference.organization.picture.present?
conference.organization.picture.thumb.url
else
DEFAULT_LOGO
end
end
def conference_color(conference)
if conference.color.present?
conference.color
else
DEFAULT_COLOR
end
end
# adds events to icalendar for proposals in a conference # adds events to icalendar for proposals in a conference
def icalendar_proposals(calendar, proposals, conference) def icalendar_proposals(calendar, proposals, conference)
proposals.each do |proposal| proposals.each do |proposal|

View file

@ -3,9 +3,10 @@
SNAPCON_BCC_ADDRESS = 'messages@snap.berkeley.edu' SNAPCON_BCC_ADDRESS = 'messages@snap.berkeley.edu'
EMAIL_TEMPLATE = 'email_template' EMAIL_TEMPLATE = 'email_template'
YTLF_TICKET_ID = 50 YTLF_TICKET_ID = 50
DEFAULT_LOGO = 'snapcon_logo.png'
class Mailbot < ActionMailer::Base class Mailbot < ActionMailer::Base
helper ConferenceHelper
default bcc: -> { SNAPCON_BCC_ADDRESS }, default bcc: -> { SNAPCON_BCC_ADDRESS },
template_name: -> { EMAIL_TEMPLATE }, template_name: -> { EMAIL_TEMPLATE },
to: -> { @user.email }, to: -> { @user.email },
@ -15,7 +16,6 @@ class Mailbot < ActionMailer::Base
@user = user @user = user
@conference = conference @conference = conference
@email_body = @conference.email_settings.generate_email_on_conf_updates(@conference, @user, @conference.email_settings.registration_body) @email_body = @conference.email_settings.generate_email_on_conf_updates(@conference, @user, @conference.email_settings.registration_body)
@logo_url = logo_url(@conference)
mail(subject: @conference.email_settings.registration_subject) mail(subject: @conference.email_settings.registration_subject)
end end
@ -24,7 +24,6 @@ class Mailbot < ActionMailer::Base
@ticket_purchase = ticket_purchase @ticket_purchase = ticket_purchase
@user = ticket_purchase.user @user = ticket_purchase.user
@conference = ticket_purchase.conference @conference = ticket_purchase.conference
@logo_url = logo_url(@conference)
PhysicalTicket.last(ticket_purchase.quantity).each do |physical_ticket| PhysicalTicket.last(ticket_purchase.quantity).each do |physical_ticket|
pdf = TicketPdf.new(@conference, @user, physical_ticket, @conference.ticket_layout.to_sym, "ticket_for_#{@conference.short_title}_#{physical_ticket.id}") pdf = TicketPdf.new(@conference, @user, physical_ticket, @conference.ticket_layout.to_sym, "ticket_for_#{@conference.short_title}_#{physical_ticket.id}")
@ -43,7 +42,6 @@ class Mailbot < ActionMailer::Base
def acceptance_mail(event) def acceptance_mail(event)
@user = event.submitter @user = event.submitter
@conference = event.program.conference @conference = event.program.conference
@logo_url = logo_url(@conference)
@email_body = @conference.email_settings.generate_event_mail(event, @conference.email_settings.accepted_body) @email_body = @conference.email_settings.generate_event_mail(event, @conference.email_settings.accepted_body)
mail(subject: @conference.email_settings.accepted_subject) mail(subject: @conference.email_settings.accepted_subject)
@ -52,7 +50,6 @@ class Mailbot < ActionMailer::Base
def submitted_proposal_mail(event) def submitted_proposal_mail(event)
@user = event.submitter @user = event.submitter
@conference = event.program.conference @conference = event.program.conference
@logo_url = logo_url(@conference)
@email_body = @conference.email_settings.generate_event_mail(event, @conference.email_settings.submitted_proposal_body) @email_body = @conference.email_settings.generate_event_mail(event, @conference.email_settings.submitted_proposal_body)
mail(subject: @conference.email_settings.submitted_proposal_subject) mail(subject: @conference.email_settings.submitted_proposal_subject)
@ -61,7 +58,6 @@ class Mailbot < ActionMailer::Base
def rejection_mail(event) def rejection_mail(event)
@user = event.submitter @user = event.submitter
@conference = event.program.conference @conference = event.program.conference
@logo_url = logo_url(@conference)
@email_body = @conference.email_settings.generate_event_mail(event, @conference.email_settings.rejected_body) @email_body = @conference.email_settings.generate_event_mail(event, @conference.email_settings.rejected_body)
mail(subject: @conference.email_settings.rejected_subject) mail(subject: @conference.email_settings.rejected_subject)
@ -70,16 +66,14 @@ class Mailbot < ActionMailer::Base
def confirm_reminder_mail(event) def confirm_reminder_mail(event)
@user = event.submitter @user = event.submitter
@conference = event.program.conference @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) @email_body = @conference.email_settings.generate_event_mail(event, @conference.email_settings.confirmed_without_registration_body)
mail(subject: @conference.email_settings.confirmed_without_registration_subject) mail(subject: @conference.email_settings.confirmed_without_registration_subject)
end end
def conference_date_update_mail(_conference, user) def conference_date_update_mail(conference, user)
@user = user @user = user
@conference = @conference @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) @email_body = @conference.email_settings.generate_email_on_conf_updates(@conference, @user, @conference.email_settings.conference_dates_updated_body)
mail(subject: @conference.email_settings.conference_dates_updated_subject) mail(subject: @conference.email_settings.conference_dates_updated_subject)
@ -88,7 +82,6 @@ class Mailbot < ActionMailer::Base
def conference_registration_date_update_mail(conference, user) def conference_registration_date_update_mail(conference, user)
@user = user @user = user
@conference = conference @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) @email_body = @conference.email_settings.generate_email_on_conf_updates(@conference, @user, @conference.email_settings.conference_registration_dates_updated_body)
mail(subject: @conference.email_settings.conference_registration_dates_updated_subject) mail(subject: @conference.email_settings.conference_registration_dates_updated_subject)
@ -97,7 +90,6 @@ class Mailbot < ActionMailer::Base
def conference_venue_update_mail(conference, user) def conference_venue_update_mail(conference, user)
@user = user @user = user
@conference = conference @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) @email_body = @conference.email_settings.generate_email_on_conf_updates(@conference, @user, @conference.email_settings.venue_updated_body)
mail(subject: @conference.email_settings.venue_updated_subject) mail(subject: @conference.email_settings.venue_updated_subject)
@ -106,7 +98,6 @@ class Mailbot < ActionMailer::Base
def conference_schedule_update_mail(conference, user) def conference_schedule_update_mail(conference, user)
@user = user @user = user
@conference = conference @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) @email_body = @conference.email_settings.generate_email_on_conf_updates(@conference, @user, @conference.email_settings.program_schedule_public_body)
mail(bcc: nil, mail(bcc: nil,
@ -116,7 +107,6 @@ class Mailbot < ActionMailer::Base
def conference_cfp_update_mail(conference, user) def conference_cfp_update_mail(conference, user)
@user = user @user = user
@conference = conference @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) @email_body = @conference.email_settings.generate_email_on_conf_updates(@conference, @user, @conference.email_settings.cfp_dates_updated_body)
mail(bcc: nil, mail(bcc: nil,
@ -126,7 +116,6 @@ class Mailbot < ActionMailer::Base
def conference_booths_acceptance_mail(booth) def conference_booths_acceptance_mail(booth)
@user = booth.submitter @user = booth.submitter
@conference = booth.conference @conference = booth.conference
@logo_url = logo_url(@conference)
@email_body = @conference.email_settings.generate_booth_mail(booth, @conference.email_settings.booths_acceptance_body) @email_body = @conference.email_settings.generate_booth_mail(booth, @conference.email_settings.booths_acceptance_body)
mail(bcc: nil, mail(bcc: nil,
@ -136,7 +125,6 @@ class Mailbot < ActionMailer::Base
def conference_booths_rejection_mail(booth) def conference_booths_rejection_mail(booth)
@user = booth.submitter @user = booth.submitter
@conference = booth.conference @conference = booth.conference
@logo_url = logo_url(@conference)
@email_body = @conference.email_settings.generate_booth_mail(booth, @conference.email_settings.booths_rejection_body) @email_body = @conference.email_settings.generate_booth_mail(booth, @conference.email_settings.booths_rejection_body)
mail(bcc: nil, mail(bcc: nil,
@ -148,22 +136,9 @@ class Mailbot < ActionMailer::Base
@event = @comment.commentable @event = @comment.commentable
@conference = @event.program.conference @conference = @event.program.conference
@user = user @user = user
@logo_url = logo_url(@conference)
mail(bcc: nil, mail(bcc: nil,
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
private
def logo_url(conference)
if conference.picture.present?
conference.picture.thumb.url
elsif conference.organization.picture.present?
conference.organization.picture.thumb.url
else
DEFAULT_LOGO
end
end
end end

View file

@ -7,11 +7,6 @@
<%= stylesheet_link_tag "mailbot" %> <%= stylesheet_link_tag "mailbot" %>
</head> </head>
<body> <body>
<% if @conference.present? && @conference.color.present? %> <div id="border" style="background-color: <%= conference_color(@conference) %>"></div>
<div id="border" style="background-color: <%= @conference.color %>">
<% else %>
<div id="border">
<% end %>
</div>
</body> </body>
</html> </html>

View file

@ -10,15 +10,11 @@
<%= stylesheet_link_tag "mailbot" %> <%= stylesheet_link_tag "mailbot" %>
</head> </head>
<body> <body>
<% if @conference.present? && @conference.color.present? %> <div id="border" style="background-color: <%= conference_color(@conference) %>">
<div id="border" style="background-color: <%= @conference.color %>">
<% else %>
<div id="border">
<% end %>
<div class="row"> <div class="row">
<div class="col-md-2"> <div class="col-md-2">
<% if @logo_url.present? %> <% if @conference.present? %>
<%= image_tag(@logo_url, style: "display:block;height:70px;width:auto;", alt: @conference.title + ' logo') %> <%= image_tag(conference_logo_url(@conference), style: "display:block;height:70px;width:auto;", alt: @conference.title + ' logo') %>
<% end %> <% end %>
</div> </div>
</div> </div>

View file

@ -67,4 +67,26 @@ describe ConferenceHelper, type: :helper do
expect(sponsorship_mailto(conference)).to match conference.short_title expect(sponsorship_mailto(conference)).to match conference.short_title
end end
end end
describe '#conference_logo_url' do
let(:organization) { create(:organization) }
let(:conference2) { create(:conference, organization: organization) }
it 'gives the correct logo url' do
mailbot = Mailbot.new
expect(conference_logo_url(conference2)).to eq('snapcon_logo.png')
File.open('spec/support/logos/1.png') do |file|
organization.picture = file
end
expect(conference_logo_url(conference2)).to include('1.png')
File.open('spec/support/logos/2.png') do |file|
conference2.picture = file
end
expect(conference_logo_url(conference2)).to include('2.png')
end
end
end end

View file

@ -38,6 +38,7 @@ describe Mailbot do
expect(mail.body).to include('background-color: ' + conference.color) expect(mail.body).to include('background-color: ' + conference.color)
end end
# TODO: test on non-default logo
it 'assigns the email body with the correct logo' do it 'assigns the email body with the correct logo' do
expect(mail.body).to include 'snapcon_logo' expect(mail.body).to include 'snapcon_logo'
end end
@ -93,28 +94,4 @@ 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