From 94683e1b5c06fb931e39dfb6566940fc0aef1d71 Mon Sep 17 00:00:00 2001 From: Kat Date: Fri, 29 Sep 2023 09:08:54 +0100 Subject: [PATCH] Update the job to send missing town or city templates --- app/jobs/email_missing_addresses_csv_job.rb | 13 ++-- app/mailers/csv_download_mailer.rb | 4 +- .../csv/missing_addresses_csv_service.rb | 4 ++ .../email_missing_addresses_csv_job_spec.rb | 60 +++++++++++++++---- 4 files changed, 63 insertions(+), 18 deletions(-) diff --git a/app/jobs/email_missing_addresses_csv_job.rb b/app/jobs/email_missing_addresses_csv_job.rb index 83988d0b0..870054b8f 100644 --- a/app/jobs/email_missing_addresses_csv_job.rb +++ b/app/jobs/email_missing_addresses_csv_job.rb @@ -3,15 +3,16 @@ class EmailMissingAddressesCsvJob < ApplicationJob BYTE_ORDER_MARK = "\uFEFF".freeze # Required to ensure Excel always reads CSV as UTF-8 - def perform(user_ids, organisation, log_type) + def perform(user_ids, organisation, log_type, template_type) + csv_service = Csv::MissingAddressesCsvService.new(organisation:) case log_type when "lettings" - csv_string = Csv::MissingAddressesCsvService.new(organisation:).create_missing_lettings_addresses_csv - filename = "#{['missing-lettings-logs-addresses', organisation.name, Time.zone.now].compact.join('-')}.csv" + csv_string = template_type == "town-or-city" ? csv_service.create_missing_lettings_town_or_city_csv : csv_service.create_missing_lettings_addresses_csv + filename = "#{['missing-lettings-logs', template_type, organisation.name, Time.zone.now].compact.join('-')}.csv" email_method = :send_missing_lettings_addresses_csv_download_mail when "sales" - csv_string = Csv::MissingAddressesCsvService.new(organisation:).create_missing_sales_addresses_csv - filename = "#{['missing-sales-logs-addresses', organisation.name, Time.zone.now].compact.join('-')}.csv" + csv_string = template_type == "town-or-city" ? csv_service.create_missing_sales_town_or_city_csv : csv_service.create_missing_sales_addresses_csv + filename = "#{['missing-sales-logs', template_type, organisation.name, Time.zone.now].compact.join('-')}.csv" email_method = :send_missing_sales_addresses_csv_download_mail end @@ -24,7 +25,7 @@ class EmailMissingAddressesCsvJob < ApplicationJob user = User.find(id) next if user.blank? - CsvDownloadMailer.new.send(email_method, user, url) + CsvDownloadMailer.new.send(email_method, user, url, template_type) end end end diff --git a/app/mailers/csv_download_mailer.rb b/app/mailers/csv_download_mailer.rb index db5957d23..49aa95dbc 100644 --- a/app/mailers/csv_download_mailer.rb +++ b/app/mailers/csv_download_mailer.rb @@ -9,7 +9,7 @@ class CsvDownloadMailer < NotifyMailer ) end - def send_missing_lettings_addresses_csv_download_mail(user, link); end + def send_missing_lettings_addresses_csv_download_mail(user, link, template_type); end - def send_missing_sales_addresses_csv_download_mail(user, link); end + def send_missing_sales_addresses_csv_download_mail(user, link, template_type); end end diff --git a/app/services/csv/missing_addresses_csv_service.rb b/app/services/csv/missing_addresses_csv_service.rb index bac4dced9..7a111d620 100644 --- a/app/services/csv/missing_addresses_csv_service.rb +++ b/app/services/csv/missing_addresses_csv_service.rb @@ -29,5 +29,9 @@ module Csv end end end + + def create_missing_lettings_town_or_city_csv; end + + def create_missing_sales_town_or_city_csv; end end end diff --git a/spec/jobs/email_missing_addresses_csv_job_spec.rb b/spec/jobs/email_missing_addresses_csv_job_spec.rb index 6b22ce121..e6f3edb43 100644 --- a/spec/jobs/email_missing_addresses_csv_job_spec.rb +++ b/spec/jobs/email_missing_addresses_csv_job_spec.rb @@ -20,6 +20,8 @@ describe EmailMissingAddressesCsvJob do allow(Csv::MissingAddressesCsvService).to receive(:new).and_return(missing_addresses_csv_service) allow(missing_addresses_csv_service).to receive(:create_missing_lettings_addresses_csv).and_return("") allow(missing_addresses_csv_service).to receive(:create_missing_sales_addresses_csv).and_return("") + allow(missing_addresses_csv_service).to receive(:create_missing_lettings_town_or_city_csv).and_return("") + allow(missing_addresses_csv_service).to receive(:create_missing_sales_town_or_city_csv).and_return("") allow(CsvDownloadMailer).to receive(:new).and_return(mailer) allow(mailer).to receive(:send_missing_lettings_addresses_csv_download_mail) @@ -29,38 +31,76 @@ describe EmailMissingAddressesCsvJob do context "when sending missing lettings logs csv" do it "uses an appropriate filename in S3" do expect(storage_service).to receive(:write_file).with(/missing-lettings-logs-addresses-#{organisation.name}-.*\.csv/, anything) - job.perform(users.map(&:id), organisation, "lettings") + job.perform(users.map(&:id), organisation, "lettings", "addresses") end it "creates a MissingAddressesCsvService with the correct organisation and calls create missing lettings logs adresses csv" do expect(Csv::MissingAddressesCsvService).to receive(:new).with(organisation:) expect(missing_addresses_csv_service).to receive(:create_missing_lettings_addresses_csv) - job.perform(users.map(&:id), organisation, "lettings") + job.perform(users.map(&:id), organisation, "lettings", "addresses") end it "sends emails to all the provided users" do - expect(mailer).to receive(:send_missing_lettings_addresses_csv_download_mail).with(users[0], test_url) - expect(mailer).to receive(:send_missing_lettings_addresses_csv_download_mail).with(users[1], test_url) - job.perform(users.map(&:id), organisation, "lettings") + expect(mailer).to receive(:send_missing_lettings_addresses_csv_download_mail).with(users[0], test_url, "addresses") + expect(mailer).to receive(:send_missing_lettings_addresses_csv_download_mail).with(users[1], test_url, "addresses") + job.perform(users.map(&:id), organisation, "lettings", "addresses") end end context "when sending missing sales logs csv" do it "uses an appropriate filename in S3" do expect(storage_service).to receive(:write_file).with(/missing-sales-logs-addresses-#{organisation.name}-.*\.csv/, anything) - job.perform(users.map(&:id), organisation, "sales") + job.perform(users.map(&:id), organisation, "sales", "addresses") end it "creates a MissingAddressesCsvService with the correct organisation and calls create missing sales logs adresses csv" do expect(Csv::MissingAddressesCsvService).to receive(:new).with(organisation:) expect(missing_addresses_csv_service).to receive(:create_missing_sales_addresses_csv) - job.perform(users.map(&:id), organisation, "sales") + job.perform(users.map(&:id), organisation, "sales", "addresses") end it "sends emails to all the provided users" do - expect(mailer).to receive(:send_missing_sales_addresses_csv_download_mail).with(users[0], test_url) - expect(mailer).to receive(:send_missing_sales_addresses_csv_download_mail).with(users[1], test_url) - job.perform(users.map(&:id), organisation, "sales") + expect(mailer).to receive(:send_missing_sales_addresses_csv_download_mail).with(users[0], test_url, "addresses") + expect(mailer).to receive(:send_missing_sales_addresses_csv_download_mail).with(users[1], test_url, "addresses") + job.perform(users.map(&:id), organisation, "sales", "addresses") + end + end + + context "when sending missing lettings town or city logs csv" do + it "uses an appropriate filename in S3" do + expect(storage_service).to receive(:write_file).with(/missing-lettings-logs-town-or-city-#{organisation.name}-.*\.csv/, anything) + job.perform(users.map(&:id), organisation, "lettings", "town-or-city") + end + + it "creates a MissingAddressesCsvService with the correct organisation and calls create missing lettings logs adresses csv" do + expect(Csv::MissingAddressesCsvService).to receive(:new).with(organisation:) + expect(missing_addresses_csv_service).to receive(:create_missing_lettings_town_or_city_csv) + job.perform(users.map(&:id), organisation, "lettings", "town-or-city") + end + + it "sends emails to all the provided users" do + expect(mailer).to receive(:send_missing_lettings_addresses_csv_download_mail).with(users[0], test_url, "town-or-city") + expect(mailer).to receive(:send_missing_lettings_addresses_csv_download_mail).with(users[1], test_url, "town-or-city") + job.perform(users.map(&:id), organisation, "lettings", "town-or-city") + end + end + + context "when sending missing sales town or city logs csv" do + it "uses an appropriate filename in S3" do + expect(storage_service).to receive(:write_file).with(/missing-sales-logs-town-or-city-#{organisation.name}-.*\.csv/, anything) + job.perform(users.map(&:id), organisation, "sales", "town-or-city") + end + + it "creates a MissingAddressesCsvService with the correct organisation and calls create missing sales logs adresses csv" do + expect(Csv::MissingAddressesCsvService).to receive(:new).with(organisation:) + expect(missing_addresses_csv_service).to receive(:create_missing_sales_town_or_city_csv) + job.perform(users.map(&:id), organisation, "sales", "town-or-city") + end + + it "sends emails to all the provided users" do + expect(mailer).to receive(:send_missing_sales_addresses_csv_download_mail).with(users[0], test_url, "town-or-city") + expect(mailer).to receive(:send_missing_sales_addresses_csv_download_mail).with(users[1], test_url, "town-or-city") + job.perform(users.map(&:id), organisation, "sales", "town-or-city") end end end