Browse Source

Update the job to send missing town or city templates

pull/1953/head
Kat 3 years ago
parent
commit
94683e1b5c
  1. 13
      app/jobs/email_missing_addresses_csv_job.rb
  2. 4
      app/mailers/csv_download_mailer.rb
  3. 4
      app/services/csv/missing_addresses_csv_service.rb
  4. 60
      spec/jobs/email_missing_addresses_csv_job_spec.rb

13
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

4
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

4
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

60
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

Loading…
Cancel
Save