Browse Source

Allow correcting addresses from both templates

pull/1957/head
Kat 3 years ago
parent
commit
f50d7d4562
  1. 30
      lib/tasks/import_address_from_csv.rake
  2. 7
      spec/fixtures/files/addresses_reimport_all_logs.csv
  3. 7
      spec/fixtures/files/sales_addresses_reimport_all_logs.csv
  4. 172
      spec/lib/tasks/correct_address_from_csv_spec.rb

30
lib/tasks/import_address_from_csv.rake

@ -7,15 +7,16 @@ namespace :data_import do
s3_service = Storage::S3Service.new(PlatformHelper.is_paas? ? Configuration::PaasConfigurationService.new : Configuration::EnvConfigurationService.new, ENV["IMPORT_PAAS_INSTANCE"]) s3_service = Storage::S3Service.new(PlatformHelper.is_paas? ? Configuration::PaasConfigurationService.new : Configuration::EnvConfigurationService.new, ENV["IMPORT_PAAS_INSTANCE"])
addresses_csv = CSV.parse(s3_service.get_file_io(file_name), headers: true) addresses_csv = CSV.parse(s3_service.get_file_io(file_name), headers: true)
contains_issue_type = addresses_csv.headers.include?("Issue type")
addresses_csv.each do |row| addresses_csv.each do |row|
lettings_log_id = row[1] lettings_log_id = contains_issue_type ? row[1] : row[0]
uprn = row[8] uprn = contains_issue_type ? row[8] : row[7]
address_line1 = row[9] address_line1 = contains_issue_type ? row[9] : row[8]
address_line2 = row[10] address_line2 = contains_issue_type ? row[10] : row[9]
town_or_city = row[11] town_or_city = contains_issue_type ? row[11] : row[10]
county = row[12] county = contains_issue_type ? row[12] : row[11]
postcode_full = row[13] postcode_full = contains_issue_type ? row[13] : row[12]
if lettings_log_id.blank? if lettings_log_id.blank?
Rails.logger.info("Lettings log ID not provided for address: #{[address_line1, address_line2, town_or_city, county, postcode_full].join(', ')}") Rails.logger.info("Lettings log ID not provided for address: #{[address_line1, address_line2, town_or_city, county, postcode_full].join(', ')}")
@ -64,15 +65,16 @@ namespace :data_import do
s3_service = Storage::S3Service.new(PlatformHelper.is_paas? ? Configuration::PaasConfigurationService.new : Configuration::EnvConfigurationService.new, ENV["IMPORT_PAAS_INSTANCE"]) s3_service = Storage::S3Service.new(PlatformHelper.is_paas? ? Configuration::PaasConfigurationService.new : Configuration::EnvConfigurationService.new, ENV["IMPORT_PAAS_INSTANCE"])
addresses_csv = CSV.parse(s3_service.get_file_io(file_name), headers: true) addresses_csv = CSV.parse(s3_service.get_file_io(file_name), headers: true)
contains_issue_type = addresses_csv.headers.include?("Issue type")
addresses_csv.each do |row| addresses_csv.each do |row|
sales_log_id = row[1] sales_log_id = contains_issue_type ? row[1] : row[0]
uprn = row[6] uprn = contains_issue_type ? row[6] : row[5]
address_line1 = row[7] address_line1 = contains_issue_type ? row[7] : row[6]
address_line2 = row[8] address_line2 = contains_issue_type ? row[8] : row[7]
town_or_city = row[9] town_or_city = contains_issue_type ? row[9] : row[8]
county = row[10] county = contains_issue_type ? row[10] : row[9]
postcode_full = row[11] postcode_full = contains_issue_type ? row[11] : row[10]
if sales_log_id.blank? if sales_log_id.blank?
Rails.logger.info("Sales log ID not provided for address: #{[address_line1, address_line2, town_or_city, county, postcode_full].join(', ')}") Rails.logger.info("Sales log ID not provided for address: #{[address_line1, address_line2, town_or_city, county, postcode_full].join(', ')}")

7
spec/fixtures/files/addresses_reimport_all_logs.csv vendored

@ -0,0 +1,7 @@
Log ID,Tenancy start date,Tenant code,Property reference,Log owner,Owning organisation,Managing organisation,UPRN,Address Line 1,Address Line 2 (optional),Town or City,County (optional),Property’s postcode
{id},2023-04-05,tenancycode,propcode,testy@example.com,Address org,Address org,,address 1,address 2,town,county,B1 1BB
{id2},2023-04-05,tenancycode,propcode,testy@example.com,Address org,Address org,,address 3,,city,,B1 1BB
{id3},2023-04-05,tenancycode,propcode,testy@example.com,Address org,Address org,123,Some Place,,Bristol,,BS1 1AD
{id4},2023-04-05,tenancycode,propcode,testy@example.com,Address org,Address org,,Some Place,,,,BS1 1AD
,2023-04-05,tenancycode,propcode,testy@example.com,Address org,Address org,,Some Place,,Bristol,,BS1 1AD
fake_id,2023-04-05,tenancycode,propcode,testy@example.com,Address org,Address org,,Some Place,,Bristol,,BS1 1AD
1 Log ID Tenancy start date Tenant code Property reference Log owner Owning organisation Managing organisation UPRN Address Line 1 Address Line 2 (optional) Town or City County (optional) Property’s postcode
2 {id} 2023-04-05 tenancycode propcode testy@example.com Address org Address org address 1 address 2 town county B1 1BB
3 {id2} 2023-04-05 tenancycode propcode testy@example.com Address org Address org address 3 city B1 1BB
4 {id3} 2023-04-05 tenancycode propcode testy@example.com Address org Address org 123 Some Place Bristol BS1 1AD
5 {id4} 2023-04-05 tenancycode propcode testy@example.com Address org Address org Some Place BS1 1AD
6 2023-04-05 tenancycode propcode testy@example.com Address org Address org Some Place Bristol BS1 1AD
7 fake_id 2023-04-05 tenancycode propcode testy@example.com Address org Address org Some Place Bristol BS1 1AD

7
spec/fixtures/files/sales_addresses_reimport_all_logs.csv vendored

@ -0,0 +1,7 @@
Log ID,Sale completion date,Purchaser code,Log owner,Owning organisation,UPRN,Address Line 1,Address Line 2 (optional),Town or City,County (optional),Property’s postcode
{id},2023-04-05,purchid,testy@example.com,Address org,,address 1,address 2,town,county,B1 1BB
{id2},2023-04-05,purchid,testy@example.com,Address org,,address 3,,city,,B1 1BB
{id3},2023-04-05,purchid,testy@example.com,Address org,123,Some Place,,Bristol,,BS1 1AD
{id4},2023-04-05,purchid,testy@example.com,Address org,,Some Place,,,,BS1 1AD
,2023-04-05,purchid,testy@example.com,Address org,,Some Place,,Bristol,,BS1 1AD
fake_id,2023-04-05,purchid,testy@example.com,Address org,,Some Place,,Bristol,,BS1 1AD
1 Log ID Sale completion date Purchaser code Log owner Owning organisation UPRN Address Line 1 Address Line 2 (optional) Town or City County (optional) Property’s postcode
2 {id} 2023-04-05 purchid testy@example.com Address org address 1 address 2 town county B1 1BB
3 {id2} 2023-04-05 purchid testy@example.com Address org address 3 city B1 1BB
4 {id3} 2023-04-05 purchid testy@example.com Address org 123 Some Place Bristol BS1 1AD
5 {id4} 2023-04-05 purchid testy@example.com Address org Some Place BS1 1AD
6 2023-04-05 purchid testy@example.com Address org Some Place Bristol BS1 1AD
7 fake_id 2023-04-05 purchid testy@example.com Address org Some Place Bristol BS1 1AD

172
spec/lib/tasks/correct_address_from_csv_spec.rb

@ -55,6 +55,7 @@ RSpec.describe "data_import" do
context "when the rake task is run" do context "when the rake task is run" do
let(:addresses_csv_path) { "addresses_reimport_123.csv" } let(:addresses_csv_path) { "addresses_reimport_123.csv" }
let(:all_addresses_csv_path) { "all_addresses_reimport_123.csv" }
let(:wrong_file_path) { "/test/no_csv_here.csv" } let(:wrong_file_path) { "/test/no_csv_here.csv" }
let!(:lettings_log) do let!(:lettings_log) do
create(:lettings_log, create(:lettings_log,
@ -91,8 +92,13 @@ RSpec.describe "data_import" do
allow(storage_service).to receive(:get_file_io) allow(storage_service).to receive(:get_file_io)
.with("addresses_reimport_123.csv") .with("addresses_reimport_123.csv")
.and_return(replace_entity_ids(lettings_log, lettings_logs[0], lettings_logs[1], lettings_logs[2], File.open("./spec/fixtures/files/addresses_reimport.csv").read)) .and_return(replace_entity_ids(lettings_log, lettings_logs[0], lettings_logs[1], lettings_logs[2], File.open("./spec/fixtures/files/addresses_reimport.csv").read))
allow(storage_service).to receive(:get_file_io)
.with("all_addresses_reimport_123.csv")
.and_return(replace_entity_ids(lettings_log, lettings_logs[0], lettings_logs[1], lettings_logs[2], File.open("./spec/fixtures/files/addresses_reimport_all_logs.csv").read))
end end
context "when the file contains issue type column" do
it "updates the log address when old address was not given" do it "updates the log address when old address was not given" do
task.invoke(addresses_csv_path) task.invoke(addresses_csv_path)
lettings_log.reload lettings_log.reload
@ -170,6 +176,86 @@ RSpec.describe "data_import" do
expect { task.invoke(nil) }.to raise_error(RuntimeError, "Usage: rake data_import:import_lettings_addresses_from_csv['csv_file_name']") expect { task.invoke(nil) }.to raise_error(RuntimeError, "Usage: rake data_import:import_lettings_addresses_from_csv['csv_file_name']")
end end
end end
context "when the file does not contain issue type column" do
it "updates the log address when old address was not given" do
task.invoke(all_addresses_csv_path)
lettings_log.reload
expect(lettings_log.uprn_known).to eq(0)
expect(lettings_log.uprn).to eq(nil)
expect(lettings_log.uprn_confirmed).to eq(nil)
expect(lettings_log.address_line1).to eq("address 1")
expect(lettings_log.address_line2).to eq("address 2")
expect(lettings_log.town_or_city).to eq("town")
expect(lettings_log.county).to eq("county")
expect(lettings_log.postcode_known).to eq(1)
expect(lettings_log.postcode_full).to eq("B1 1BB")
expect(lettings_log.la).to eq("E08000035")
expect(lettings_log.is_la_inferred).to eq(true)
end
it "updates the log address when old address was given" do
task.invoke(all_addresses_csv_path)
lettings_logs[0].reload
expect(lettings_logs[0].uprn_known).to eq(0)
expect(lettings_logs[0].uprn).to eq(nil)
expect(lettings_logs[0].uprn_confirmed).to eq(nil)
expect(lettings_logs[0].address_line1).to eq("address 3")
expect(lettings_logs[0].address_line2).to eq(nil)
expect(lettings_logs[0].town_or_city).to eq("city")
expect(lettings_logs[0].county).to eq(nil)
expect(lettings_logs[0].postcode_known).to eq(1)
expect(lettings_logs[0].postcode_full).to eq("B1 1BB")
expect(lettings_logs[0].la).to eq("E08000035")
expect(lettings_logs[0].is_la_inferred).to eq(true)
end
it "does not update log address when uprn is given" do
task.invoke(all_addresses_csv_path)
lettings_logs[1].reload
expect(lettings_logs[1].uprn_known).to eq(1)
expect(lettings_logs[1].uprn).to eq("1")
expect(lettings_logs[1].uprn_confirmed).to eq(nil)
expect(lettings_logs[1].address_line1).to eq("wrong address line1")
expect(lettings_logs[1].address_line2).to eq("wrong address 2")
expect(lettings_logs[1].town_or_city).to eq("wrong town")
expect(lettings_logs[1].county).to eq("wrong city")
expect(lettings_logs[1].postcode_known).to eq(1)
expect(lettings_logs[1].postcode_full).to eq("A1 1AA")
expect(lettings_logs[1].la).to eq("E06000064")
end
it "does not update log address when all required address fields are not present" do
task.invoke(all_addresses_csv_path)
lettings_logs[2].reload
expect(lettings_logs[2].uprn_known).to eq(1)
expect(lettings_logs[2].uprn).to eq("1")
expect(lettings_logs[2].uprn_confirmed).to eq(nil)
expect(lettings_logs[2].address_line1).to eq("wrong address line1")
expect(lettings_logs[2].address_line2).to eq("wrong address 2")
expect(lettings_logs[2].town_or_city).to eq("wrong town")
expect(lettings_logs[2].county).to eq("wrong city")
expect(lettings_logs[2].postcode_known).to eq(1)
expect(lettings_logs[2].postcode_full).to eq("A1 1AA")
expect(lettings_logs[2].la).to eq("E06000064")
end
it "logs the progress of the update" do
expect(Rails.logger).to receive(:info).with("Updated lettings log #{lettings_log.id}, with address: address 1, address 2, town, county, B1 1BB")
expect(Rails.logger).to receive(:info).with("Updated lettings log #{lettings_logs[0].id}, with address: address 3, , city, , B1 1BB")
expect(Rails.logger).to receive(:info).with("Lettings log with ID #{lettings_logs[1].id} contains uprn, skipping log")
expect(Rails.logger).to receive(:info).with("Lettings log with ID #{lettings_logs[2].id} is missing required address data, skipping log")
expect(Rails.logger).to receive(:info).with("Lettings log ID not provided for address: Some Place, , Bristol, , BS1 1AD")
expect(Rails.logger).to receive(:info).with("Could not find a lettings log with id fake_id")
task.invoke(all_addresses_csv_path)
end
it "raises an error when no path is given" do
expect { task.invoke(nil) }.to raise_error(RuntimeError, "Usage: rake data_import:import_lettings_addresses_from_csv['csv_file_name']")
end
end
end
end end
describe ":import_sales_addresses_from_csv", type: :task do describe ":import_sales_addresses_from_csv", type: :task do
@ -188,6 +274,7 @@ RSpec.describe "data_import" do
context "when the rake task is run" do context "when the rake task is run" do
let(:addresses_csv_path) { "addresses_reimport_123.csv" } let(:addresses_csv_path) { "addresses_reimport_123.csv" }
let(:all_addresses_csv_path) { "all_addresses_reimport_123.csv" }
let(:wrong_file_path) { "/test/no_csv_here.csv" } let(:wrong_file_path) { "/test/no_csv_here.csv" }
let!(:sales_log) do let!(:sales_log) do
create(:sales_log, create(:sales_log,
@ -208,8 +295,13 @@ RSpec.describe "data_import" do
allow(storage_service).to receive(:get_file_io) allow(storage_service).to receive(:get_file_io)
.with("addresses_reimport_123.csv") .with("addresses_reimport_123.csv")
.and_return(replace_entity_ids(sales_log, sales_logs[0], sales_logs[1], sales_logs[2], File.open("./spec/fixtures/files/sales_addresses_reimport.csv").read)) .and_return(replace_entity_ids(sales_log, sales_logs[0], sales_logs[1], sales_logs[2], File.open("./spec/fixtures/files/sales_addresses_reimport.csv").read))
allow(storage_service).to receive(:get_file_io)
.with("all_addresses_reimport_123.csv")
.and_return(replace_entity_ids(sales_log, sales_logs[0], sales_logs[1], sales_logs[2], File.open("./spec/fixtures/files/sales_addresses_reimport_all_logs.csv").read))
end end
context "when the file contains issue type column" do
it "updates the log address when old address was not given" do it "updates the log address when old address was not given" do
task.invoke(addresses_csv_path) task.invoke(addresses_csv_path)
sales_log.reload sales_log.reload
@ -287,5 +379,85 @@ RSpec.describe "data_import" do
expect { task.invoke(nil) }.to raise_error(RuntimeError, "Usage: rake data_import:import_sales_addresses_from_csv['csv_file_name']") expect { task.invoke(nil) }.to raise_error(RuntimeError, "Usage: rake data_import:import_sales_addresses_from_csv['csv_file_name']")
end end
end end
context "when the file does not contain issue type column" do
it "updates the log address when old address was not given" do
task.invoke(all_addresses_csv_path)
sales_log.reload
expect(sales_log.uprn_known).to eq(0)
expect(sales_log.uprn).to eq(nil)
expect(sales_log.uprn_confirmed).to eq(nil)
expect(sales_log.address_line1).to eq("address 1")
expect(sales_log.address_line2).to eq("address 2")
expect(sales_log.town_or_city).to eq("town")
expect(sales_log.county).to eq("county")
expect(sales_log.pcodenk).to eq(0)
expect(sales_log.postcode_full).to eq("B1 1BB")
expect(sales_log.la).to eq("E08000035")
expect(sales_log.is_la_inferred).to eq(true)
end
it "updates the log address when old address was given" do
task.invoke(all_addresses_csv_path)
sales_logs[0].reload
expect(sales_logs[0].uprn_known).to eq(0)
expect(sales_logs[0].uprn).to eq(nil)
expect(sales_logs[0].uprn_confirmed).to eq(nil)
expect(sales_logs[0].address_line1).to eq("address 3")
expect(sales_logs[0].address_line2).to eq(nil)
expect(sales_logs[0].town_or_city).to eq("city")
expect(sales_logs[0].county).to eq(nil)
expect(sales_logs[0].pcodenk).to eq(0)
expect(sales_logs[0].postcode_full).to eq("B1 1BB")
expect(sales_logs[0].la).to eq("E08000035")
expect(sales_logs[0].is_la_inferred).to eq(true)
end
it "does not update log address when uprn is given" do
task.invoke(all_addresses_csv_path)
sales_logs[1].reload
expect(sales_logs[1].uprn_known).to eq(1)
expect(sales_logs[1].uprn).to eq("1")
expect(sales_logs[1].uprn_confirmed).to eq(nil)
expect(sales_logs[1].address_line1).to eq("Wrong Address Line1")
expect(sales_logs[1].address_line2).to eq("Double Dependent Locality")
expect(sales_logs[1].town_or_city).to eq("Westminster")
expect(sales_logs[1].county).to eq(nil)
expect(sales_logs[1].pcodenk).to eq(0)
expect(sales_logs[1].postcode_full).to eq("LS16 6FT")
expect(sales_logs[1].la).to eq("E06000064")
end
it "does not update log address when all required address fields are not present" do
task.invoke(all_addresses_csv_path)
sales_logs[2].reload
expect(sales_logs[2].uprn_known).to eq(1)
expect(sales_logs[2].uprn).to eq("1")
expect(sales_logs[2].uprn_confirmed).to eq(nil)
expect(sales_logs[2].address_line1).to eq("Wrong Address Line1")
expect(sales_logs[2].address_line2).to eq("Double Dependent Locality")
expect(sales_logs[2].town_or_city).to eq("Westminster")
expect(sales_logs[2].county).to eq(nil)
expect(sales_logs[2].pcodenk).to eq(0)
expect(sales_logs[2].postcode_full).to eq("LS16 6FT")
expect(sales_logs[2].la).to eq("E06000064")
end
it "logs the progress of the update" do
expect(Rails.logger).to receive(:info).with("Updated sales log #{sales_log.id}, with address: address 1, address 2, town, county, B1 1BB")
expect(Rails.logger).to receive(:info).with("Updated sales log #{sales_logs[0].id}, with address: address 3, , city, , B1 1BB")
expect(Rails.logger).to receive(:info).with("Sales log with ID #{sales_logs[1].id} contains uprn, skipping log")
expect(Rails.logger).to receive(:info).with("Sales log with ID #{sales_logs[2].id} is missing required address data, skipping log")
expect(Rails.logger).to receive(:info).with("Sales log ID not provided for address: Some Place, , Bristol, , BS1 1AD")
expect(Rails.logger).to receive(:info).with("Could not find a sales log with id fake_id")
task.invoke(all_addresses_csv_path)
end
it "raises an error when no path is given" do
expect { task.invoke(nil) }.to raise_error(RuntimeError, "Usage: rake data_import:import_sales_addresses_from_csv['csv_file_name']")
end
end
end
end end
end end

Loading…
Cancel
Save