From b0be814300ff0ff236928c73c0bd2fba576600ff Mon Sep 17 00:00:00 2001 From: Ben Halpern Date: Mon, 19 Oct 2020 16:55:40 -0400 Subject: [PATCH] [deploy] Fix email sender and url issues (#10883) * Fix email sender and url issues * Add proper tests * Add tests * Change DeviseMailer approach * ZFix devise test --- app/mailers/application_mailer.rb | 6 ++++++ app/mailers/devise_mailer.rb | 8 ++++++++ config/initializers/devise.rb | 1 + spec/mailers/devise_mailer_spec.rb | 22 ++++++++++++++++++++++ spec/mailers/notify_mailer_spec.rb | 10 ++++++---- 5 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 app/mailers/devise_mailer.rb create mode 100644 spec/mailers/devise_mailer_spec.rb diff --git a/app/mailers/application_mailer.rb b/app/mailers/application_mailer.rb index 2547c8788..f84cb4139 100644 --- a/app/mailers/application_mailer.rb +++ b/app/mailers/application_mailer.rb @@ -7,6 +7,8 @@ class ApplicationMailer < ActionMailer::Base helper ApplicationHelper helper AuthenticationHelper + before_action :use_custom_host + default( from: -> { email_from("Community") }, template_path: ->(mailer) { "mailers/#{mailer.class.name.underscore}" }, @@ -23,4 +25,8 @@ class ApplicationMailer < ActionMailer::Base expires_at: 31.days.from_now, ) end + + def use_custom_host + ActionMailer::Base.default_url_options[:host] = SiteConfig.app_domain + end end diff --git a/app/mailers/devise_mailer.rb b/app/mailers/devise_mailer.rb new file mode 100644 index 000000000..3d9b655ff --- /dev/null +++ b/app/mailers/devise_mailer.rb @@ -0,0 +1,8 @@ +class DeviseMailer < Devise::Mailer + before_action :use_site_config_values + + def use_site_config_values + Devise.mailer_sender = "#{SiteConfig.community_name} Community <#{SiteConfig.email_addresses[:default]}>" + ActionMailer::Base.default_url_options[:host] = SiteConfig.app_domain + end +end diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb index 683312b5a..cec51090d 100644 --- a/config/initializers/devise.rb +++ b/config/initializers/devise.rb @@ -30,6 +30,7 @@ Devise.setup do |config| # Configure the class responsible to send e-mails. # config.mailer = 'Devise::Mailer' + config.mailer = "DeviseMailer" # ==> ORM configuration # Load and configure the ORM. Supports :active_record (default) and diff --git a/spec/mailers/devise_mailer_spec.rb b/spec/mailers/devise_mailer_spec.rb new file mode 100644 index 000000000..bc5e9685b --- /dev/null +++ b/spec/mailers/devise_mailer_spec.rb @@ -0,0 +1,22 @@ +require "rails_helper" + +RSpec.describe DeviseMailer, type: :mailer do + let(:user) { create(:user) } + + describe "#reset_password_instructions" do + let(:email) { described_class.reset_password_instructions(user, "test") } + + before do + allow(SiteConfig).to receive(:app_domain).and_return("funky-one-of-a-kind-domain-#{rand(100)}.com") + end + + it "renders sender" do + expected_from = "#{SiteConfig.community_name} Community <#{SiteConfig.email_addresses[:default]}>" + expect(email["from"].value).to eq(expected_from) + end + + it "renders proper URL" do + expect(email.to_s).to include(SiteConfig.app_domain) + end + end +end diff --git a/spec/mailers/notify_mailer_spec.rb b/spec/mailers/notify_mailer_spec.rb index c79aba41a..b90bbbd64 100644 --- a/spec/mailers/notify_mailer_spec.rb +++ b/spec/mailers/notify_mailer_spec.rb @@ -196,14 +196,14 @@ RSpec.describe NotifyMailer, type: :mailer do it "includes the listings URL" do expect(email.html_part.body).to include( CGI.escape( - Rails.application.routes.url_helpers.listings_url, + Rails.application.routes.url_helpers.listings_url(host: SiteConfig.app_domain), ), ) end it "includes the about listings URL" do expect(email.html_part.body).to include( - CGI.escape(Rails.application.routes.url_helpers.about_listings_url), + CGI.escape(Rails.application.routes.url_helpers.about_listings_url(host: SiteConfig.app_domain)), ) end @@ -234,12 +234,14 @@ RSpec.describe NotifyMailer, type: :mailer do it "includes the listings URL" do expect(email.text_part.body).to include( - Rails.application.routes.url_helpers.listings_url, + Rails.application.routes.url_helpers.listings_url(host: SiteConfig.app_domain), ) end it "includes the about listings URL" do - expect(email.text_part.body).to include(Rails.application.routes.url_helpers.about_listings_url) + expect(email.text_part.body).to include( + Rails.application.routes.url_helpers.about_listings_url(host: SiteConfig.app_domain), + ) end it "includes the rewarding_context_message in the email" do