From 18567a5ef2f274fc29887a02540d55917a532f46 Mon Sep 17 00:00:00 2001 From: baarkerlounger Date: Tue, 10 May 2022 19:55:15 +0100 Subject: [PATCH] Rake task can be called outside the rails environment so need to pass host in --- app/models/user.rb | 8 ++---- lib/tasks/onboarding_emails.rake | 6 +++-- spec/lib/tasks/onboarding_emails_spec.rb | 31 ++++++++++++------------ 3 files changed, 21 insertions(+), 24 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index c177acf90..d48364017 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -83,12 +83,8 @@ class User < ApplicationRecord DeviseNotifyMailer.new.send_email(email, template_id, personalisation) end - def host - ENV["APP_HOST"] - end - - def send_beta_onboarding_email - return unless URI::MailTo::EMAIL_REGEXP.match?(email) + def send_beta_onboarding_email(host) + return unless URI::MailTo::EMAIL_REGEXP.match?(email) && host template_id = BETA_ONBOARDING_TEMPLATE_ID url = edit_user_password_url({ host: }) diff --git a/lib/tasks/onboarding_emails.rake b/lib/tasks/onboarding_emails.rake index 4624055ef..ec8538436 100644 --- a/lib/tasks/onboarding_emails.rake +++ b/lib/tasks/onboarding_emails.rake @@ -2,13 +2,15 @@ include Rails.application.routes.url_helpers namespace :onboarding_emails do desc "Send onboarding emails to private beta users" - task :send, %i[organisation_id] => :environment do |_task, args| + task :send, %i[organisation_id host] => :environment do |_task, args| organisation_id = args[:organisation_id] + host = args[:host] raise "Organisation id must be provided" unless organisation_id + raise "host must be provided" unless host organisation = Organisation.find(organisation_id) raise "Organisation #{organisation_id} does not exist" unless organisation - organisation.users.each(&:send_beta_onboarding_email) + organisation.users.each { |user| user.send_beta_onboarding_email(host) } end end diff --git a/spec/lib/tasks/onboarding_emails_spec.rb b/spec/lib/tasks/onboarding_emails_spec.rb index c3848e0e0..4c563f9b1 100644 --- a/spec/lib/tasks/onboarding_emails_spec.rb +++ b/spec/lib/tasks/onboarding_emails_spec.rb @@ -4,23 +4,22 @@ require "rake" describe "rake onboarding_emails:send", type: task do subject(:task) { Rake::Task["onboarding_emails:send"] } - let!(:user) { FactoryBot.create(:user) } - let(:notify_client) { instance_double(Notifications::Client) } - let(:devise_notify_mailer) { DeviseNotifyMailer.new } - let(:reset_password_token) { "MCDH5y6Km-U7CFPgAMVS" } + context "when onboarding a new organisation to private beta" do + let!(:user) { FactoryBot.create(:user) } + let(:notify_client) { instance_double(Notifications::Client) } + let(:devise_notify_mailer) { DeviseNotifyMailer.new } + let(:reset_password_token) { "MCDH5y6Km-U7CFPgAMVS" } - before do - Rake.application.rake_require("tasks/onboarding_emails") - Rake::Task.define_task(:environment) - task.reenable - allow(DeviseNotifyMailer).to receive(:new).and_return(devise_notify_mailer) - allow(devise_notify_mailer).to receive(:notify_client).and_return(notify_client) - allow(notify_client).to receive(:send_email).and_return(true) - allow(Devise.token_generator).to receive(:generate).and_return(reset_password_token) - allow(user).to receive(:host).and_return("http://localhost:3000") - end + before do + Rake.application.rake_require("tasks/onboarding_emails") + Rake::Task.define_task(:environment) + task.reenable + allow(DeviseNotifyMailer).to receive(:new).and_return(devise_notify_mailer) + allow(devise_notify_mailer).to receive(:notify_client).and_return(notify_client) + allow(notify_client).to receive(:send_email).and_return(true) + allow(Devise.token_generator).to receive(:generate).and_return(reset_password_token) + end - context "when onboarding a new organisation to private beta" do it "can send the onboarding emails" do expect(notify_client).to receive(:send_email).with( { @@ -33,7 +32,7 @@ describe "rake onboarding_emails:send", type: task do }, ) - task.invoke(user.organisation.id) + task.invoke(user.organisation.id, "http://localhost:3000") end end end