diff --git a/app/services/mail_configuration.rb b/app/services/mail_configuration.rb index 32111aa205..c90b3b1321 100644 --- a/app/services/mail_configuration.rb +++ b/app/services/mail_configuration.rb @@ -2,9 +2,8 @@ # by setting entries on the Spree Config # and initializing Spree:MailSettings that uses the Spree::Config. class MailConfiguration - # @param entries [Hash] Spree Config entries - def self.entries=(entries) - entries.each do |name, value| + def self.apply! + configuration.each do |name, value| Spree::Config[name] = value end apply_mail_settings @@ -12,6 +11,21 @@ class MailConfiguration private + def self.configuration + { + mail_host: ENV.fetch('MAIL_HOST'), + mail_domain: ENV.fetch('MAIL_DOMAIN'), + mail_port: ENV.fetch('MAIL_PORT'), + mail_auth_type: ENV.fetch('MAIL_AUTH_TYPE', 'login'), + smtp_username: ENV.fetch('SMTP_USERNAME'), + smtp_password: ENV.fetch('SMTP_PASSWORD'), + secure_connection_type: ENV.fetch('MAIL_SECURE_CONNECTION', 'None'), + mails_from: ENV.fetch('MAILS_FROM', "no-reply@#{ENV.fetch('MAIL_DOMAIN')}"), + mail_bcc: ENV.fetch('MAIL_BCC', ''), + intercept_email: '' + } + end + def self.apply_mail_settings Spree::Core::MailSettings.init end diff --git a/config/initializers/delayed_job.rb b/config/initializers/delayed_job.rb index 80dc11d3aa..53d7540c39 100644 --- a/config/initializers/delayed_job.rb +++ b/config/initializers/delayed_job.rb @@ -1,4 +1,3 @@ -Delayed::Worker.logger = Logger.new(Rails.root.join('log', 'delayed_job.log')) Delayed::Worker.destroy_failed_jobs = false Delayed::Worker.max_run_time = 15.minutes diff --git a/config/initializers/spree.rb b/config/initializers/spree.rb index 2d8a5bbe6a..53c10cc979 100644 --- a/config/initializers/spree.rb +++ b/config/initializers/spree.rb @@ -18,6 +18,7 @@ Spree::Gateway.class_eval do end Spree.config do |config| + config.site_url = ENV['SITE_URL'] if ENV['SITE_URL'] config.shipping_instructions = true config.address_requires_state = true config.admin_interface_logo = '/default_images/ofn-logo.png' @@ -31,6 +32,10 @@ Spree.config do |config| config.s3_protocol = ENV.fetch('S3_PROTOCOL', 'https') end +# Read mail configuration from ENV vars at boot time and ensure the values are +# applied correctly in Spree::Config. +MailConfiguration.apply! + # Attachments settings Spree::Image.set_attachment_attribute(:path, ENV['ATTACHMENT_PATH']) if ENV['ATTACHMENT_PATH'] Spree::Image.set_attachment_attribute(:url, ENV['ATTACHMENT_URL']) if ENV['ATTACHMENT_URL'] diff --git a/db/seeds.rb b/db/seeds.rb index 95629e77ef..88d3e96270 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -2,22 +2,8 @@ # The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). require 'yaml' -def set_mail_configuration - MailConfiguration.entries= { - mail_host: ENV.fetch('MAIL_HOST'), - mail_domain: ENV.fetch('MAIL_DOMAIN'), - mail_port: ENV.fetch('MAIL_PORT'), - mail_auth_type: ENV.fetch('MAIL_AUTH_TYPE', 'login'), - smtp_username: ENV.fetch('SMTP_USERNAME'), - smtp_password: ENV.fetch('SMTP_PASSWORD'), - secure_connection_type: ENV.fetch('MAIL_SECURE_CONNECTION', 'None'), - mails_from: ENV.fetch('MAILS_FROM', "no-reply@#{ENV.fetch('MAIL_DOMAIN')}"), - mail_bcc: ENV.fetch('MAIL_BCC', ''), - intercept_email: '' - } -end # We need mail_configuration to create a user account, because it sends a confirmation email. -set_mail_configuration +MailConfiguration.apply! puts "[db:seed] Seeding Roles" Spree::Role.where(:name => "admin").first_or_create diff --git a/lib/spree/core/mail_settings.rb b/lib/spree/core/mail_settings.rb index dde88bbb22..2c8261b246 100644 --- a/lib/spree/core/mail_settings.rb +++ b/lib/spree/core/mail_settings.rb @@ -12,7 +12,7 @@ module Spree end def override! - ActionMailer::Base.default_url_options[:host] ||= Config.site_url + ActionMailer::Base.default_url_options[:host] ||= ENV.fetch("SITE_URL", Config.site_url) ActionMailer::Base.smtp_settings = mail_server_settings ActionMailer::Base.perform_deliveries = true end diff --git a/spec/services/mail_configuration_spec.rb b/spec/services/mail_configuration_spec.rb index a1751ad2fe..74873b90c4 100644 --- a/spec/services/mail_configuration_spec.rb +++ b/spec/services/mail_configuration_spec.rb @@ -3,33 +3,29 @@ require 'spec_helper' describe MailConfiguration do - describe 'entries=' do - let(:mail_settings) { instance_double(Spree::Core::MailSettings) } - let(:entries) do - { smtp_username: "smtp_username", mail_auth_type: "login" } - end - + describe 'apply!' do before do - allow(Spree::Core::MailSettings).to receive(:init) { mail_settings } - end - - # keeps spree_config unchanged - around do |example| - original_smtp_username = Spree::Config[:smtp_username] - original_mail_auth_type = Spree::Config[:mail_auth_type] - example.run - Spree::Config[:smtp_username] = original_smtp_username - Spree::Config[:mail_auth_type] = original_mail_auth_type + allow(Spree::Core::MailSettings).to receive(:init) { true } end it 'sets config entries in the Spree Config' do - described_class.entries = entries - expect(Spree::Config[:smtp_username]).to eq("smtp_username") - expect(Spree::Config[:mail_auth_type]).to eq("login") + allow(Spree::Config).to receive(:[]=) + + described_class.apply! + expect(Spree::Config).to have_received(:[]=).with(:mail_host, "example.com") + expect(Spree::Config).to have_received(:[]=).with(:mail_domain, "example.com") + expect(Spree::Config).to have_received(:[]=).with(:mail_port, "25") + expect(Spree::Config).to have_received(:[]=).with(:mail_auth_type, "login") + expect(Spree::Config).to have_received(:[]=).with(:smtp_username, "ofn") + expect(Spree::Config).to have_received(:[]=).with(:smtp_password, "f00d") + expect(Spree::Config).to have_received(:[]=).with(:secure_connection_type, "None") + expect(Spree::Config).to have_received(:[]=).with(:mails_from, "no-reply@example.com") + expect(Spree::Config).to have_received(:[]=).with(:mail_bcc, "") + expect(Spree::Config).to have_received(:[]=).with(:intercept_email, "") end it 'initializes the mail settings' do - described_class.entries = entries + described_class.apply! expect(Spree::Core::MailSettings).to have_received(:init) end end