From fe9463cb5fda41dd418c04eb7494884ad3897c9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Sat, 8 Oct 2022 21:51:18 +0200 Subject: [PATCH] Allow specifying the tenant in budget tasks The `budgets:email:selected` and `budgets:email:unselected` tasks are supposed to be run manually because they only make sense at a specific point during the life of a budget. However, they would only run on the default tenant, and it was impossible to run them on a different tenant. So we're introducing an argument in the rake task accepting the name of the tenant whose users we want to send emails to. --- lib/tasks/budgets.rake | 8 ++++---- spec/lib/tasks/budgets_spec.rb | 28 ++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/lib/tasks/budgets.rake b/lib/tasks/budgets.rake index 008b29bef..7143e1e3e 100644 --- a/lib/tasks/budgets.rake +++ b/lib/tasks/budgets.rake @@ -1,13 +1,13 @@ namespace :budgets do namespace :email do desc "Sends emails to authors of selected investments" - task selected: :environment do - Budget.current.email_selected + task :selected, [:tenant] => :environment do |_, args| + Tenant.switch(args[:tenant]) { Budget.current.email_selected } end desc "Sends emails to authors of unselected investments" - task unselected: :environment do - Budget.current.email_unselected + task :unselected, [:tenant] => :environment do |_, args| + Tenant.switch(args[:tenant]) { Budget.current.email_unselected } end end end diff --git a/spec/lib/tasks/budgets_spec.rb b/spec/lib/tasks/budgets_spec.rb index c58c24ff9..ff4419440 100644 --- a/spec/lib/tasks/budgets_spec.rb +++ b/spec/lib/tasks/budgets_spec.rb @@ -13,6 +13,20 @@ describe "budget tasks" do expect(ActionMailer::Base.deliveries.count).to eq 1 expect(ActionMailer::Base.deliveries.last.to).to eq ["selectme@consul.dev"] end + + it "accepts specifying the tenant" do + create(:budget_investment, :selected, author: create(:user, email: "default@consul.dev")) + create(:tenant, schema: "different") + + Tenant.switch("different") do + create(:budget_investment, :selected, author: create(:user, email: "different@consul.dev")) + end + + Rake.application.invoke_task("budgets:email:selected[different]") + + expect(ActionMailer::Base.deliveries.count).to eq 1 + expect(ActionMailer::Base.deliveries.last.to).to eq ["different@consul.dev"] + end end describe "rake budgets:email:unselected" do @@ -27,5 +41,19 @@ describe "budget tasks" do expect(ActionMailer::Base.deliveries.count).to eq 1 expect(ActionMailer::Base.deliveries.last.to).to eq ["ignorme@consul.dev"] end + + it "accepts specifying the tenant" do + create(:budget_investment, author: create(:user, email: "default@consul.dev")) + create(:tenant, schema: "different") + + Tenant.switch("different") do + create(:budget_investment, author: create(:user, email: "different@consul.dev")) + end + + Rake.application.invoke_task("budgets:email:unselected[different]") + + expect(ActionMailer::Base.deliveries.count).to eq 1 + expect(ActionMailer::Base.deliveries.last.to).to eq ["different@consul.dev"] + end end end