7 changed files with 118 additions and 14 deletions
@ -0,0 +1,23 @@
|
||||
namespace :correct_addresses do |
||||
# rubocop:disable Lint/ConstantDefinitionInBlock |
||||
MISSING_ADDRESSES_THRESHOLD = 50 |
||||
# rubocop:enable Lint/ConstantDefinitionInBlock |
||||
|
||||
desc "Send missing addresses csv" |
||||
task :send_missing_addresses_csv, %i[] => :environment do |_task, _args| |
||||
Organisation.all.each do |organisation| |
||||
impacted_logs = organisation.managed_lettings_logs |
||||
.imported |
||||
.filter_by_year(2023) |
||||
.where(needstype: 1, address_line1: nil, town_or_city: nil, uprn_known: [0, nil]) |
||||
.where.not(old_form_id: nil) |
||||
|
||||
next unless impacted_logs.count >= MISSING_ADDRESSES_THRESHOLD |
||||
|
||||
data_coordinators = organisation.users.where(role: 2).filter_by_active |
||||
users_to_contact = data_coordinators.any? ? data_coordinators : organisation.users.filter_by_active |
||||
EmailMissingAddressesCsvJob.perform_later(users_to_contact.map(&:id), organisation, "lettings") |
||||
Rails.logger.info("Sending missing addresses CSV for #{organisation.name} to #{users_to_contact.map(&:email).join(', ')}") |
||||
end |
||||
end |
||||
end |
||||
@ -0,0 +1,73 @@
|
||||
require "rails_helper" |
||||
require "rake" |
||||
|
||||
RSpec.describe "emails" do |
||||
describe ":send_missing_addresses_csv", type: :task do |
||||
subject(:task) { Rake::Task["correct_addresses:send_missing_addresses_csv"] } |
||||
|
||||
before do |
||||
organisation.users.destroy_all |
||||
Rake.application.rake_require("tasks/send_missing_addresses_csv") |
||||
Rake::Task.define_task(:environment) |
||||
task.reenable |
||||
end |
||||
|
||||
context "when the rake task is run" do |
||||
let(:organisation) { create(:organisation, name: "test organisation") } |
||||
|
||||
before do |
||||
stub_const("MISSING_ADDRESSES_THRESHOLD", 5) |
||||
end |
||||
|
||||
context "when org has more than 5 missing addresses and data coordinators" do |
||||
let!(:data_coordinator) { create(:user, :data_coordinator, organisation:, email: "data_coordinator1@example.com") } |
||||
let!(:data_coordinator2) { create(:user, :data_coordinator, organisation:, email: "data_coordinator2@example.com") } |
||||
|
||||
before do |
||||
create(:user, :data_provider, organisation:, email: "data_provider1@example.com") |
||||
create_list(:lettings_log, 7, :imported, startdate: Time.zone.local(2023, 9, 9), address_line1: nil, town_or_city: nil, needstype: 1, old_form_id: "form_1", owning_organisation: organisation, managing_organisation: organisation, created_by: organisation.users.first) |
||||
end |
||||
|
||||
it "enqueues the job with correct organisations" do |
||||
expect { task.invoke }.to enqueue_job(EmailMissingAddressesCsvJob).with(include(data_coordinator.id, data_coordinator2.id), organisation, "lettings") |
||||
end |
||||
|
||||
it "prints out the jobs enqueued" do |
||||
expect(Rails.logger).to receive(:info).with(nil) |
||||
expect(Rails.logger).to receive(:info).with("Sending missing addresses CSV for test organisation to data_coordinator1@example.com, data_coordinator2@example.com") |
||||
task.invoke |
||||
end |
||||
end |
||||
|
||||
context "when org has 5 missing addresses and data providers only" do |
||||
let!(:data_provider) { create(:user, :data_provider, organisation:, email: "data_provider3@example.com") } |
||||
let!(:data_provider2) { create(:user, :data_provider, organisation:, email: "data_provider4@example.com") } |
||||
|
||||
before do |
||||
create_list(:lettings_log, 5, :imported, startdate: Time.zone.local(2023, 9, 9), address_line1: nil, town_or_city: nil, needstype: 1, old_form_id: "form_2", owning_organisation: organisation, managing_organisation: organisation, created_by: organisation.users.first) |
||||
end |
||||
|
||||
it "enqueues the job with correct organisations" do |
||||
expect { task.invoke }.to enqueue_job(EmailMissingAddressesCsvJob).with(include(data_provider.id, data_provider2.id), organisation, "lettings") |
||||
end |
||||
|
||||
it "prints out the jobs enqueued" do |
||||
expect(Rails.logger).to receive(:info).with(nil) |
||||
expect(Rails.logger).to receive(:info).with("Sending missing addresses CSV for test organisation to data_provider3@example.com, data_provider4@example.com") |
||||
task.invoke |
||||
end |
||||
end |
||||
|
||||
context "when org has less than 5 missing addresses" do |
||||
before do |
||||
create_list(:lettings_log, 3, :imported, startdate: Time.zone.local(2023, 9, 9), address_line1: nil, town_or_city: nil, needstype: 1, old_form_id: "form_2", owning_organisation: organisation, managing_organisation: organisation, created_by: organisation.users.first) |
||||
create_list(:lettings_log, 2, :imported, startdate: Time.zone.local(2023, 9, 9), address_line1: nil, needstype: 1, owning_organisation: organisation, managing_organisation: organisation, created_by: organisation.users.first) |
||||
end |
||||
|
||||
it "does not enqueue the job with organisations that is missing less addresses than threshold amount" do |
||||
expect { task.invoke }.not_to enqueue_job(EmailMissingAddressesCsvJob) |
||||
end |
||||
end |
||||
end |
||||
end |
||||
end |
||||
Loading…
Reference in new issue