diff --git a/lib/tasks/import_address_from_csv.rake b/lib/tasks/import_address_from_csv.rake index 2182f7bd3..e30892e8b 100644 --- a/lib/tasks/import_address_from_csv.rake +++ b/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"]) 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| - lettings_log_id = row[1] - uprn = row[8] - address_line1 = row[9] - address_line2 = row[10] - town_or_city = row[11] - county = row[12] - postcode_full = row[13] + lettings_log_id = contains_issue_type ? row[1] : row[0] + uprn = contains_issue_type ? row[8] : row[7] + address_line1 = contains_issue_type ? row[9] : row[8] + address_line2 = contains_issue_type ? row[10] : row[9] + town_or_city = contains_issue_type ? row[11] : row[10] + county = contains_issue_type ? row[12] : row[11] + postcode_full = contains_issue_type ? row[13] : row[12] 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(', ')}") @@ -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"]) 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| - sales_log_id = row[1] - uprn = row[6] - address_line1 = row[7] - address_line2 = row[8] - town_or_city = row[9] - county = row[10] - postcode_full = row[11] + sales_log_id = contains_issue_type ? row[1] : row[0] + uprn = contains_issue_type ? row[6] : row[5] + address_line1 = contains_issue_type ? row[7] : row[6] + address_line2 = contains_issue_type ? row[8] : row[7] + town_or_city = contains_issue_type ? row[9] : row[8] + county = contains_issue_type ? row[10] : row[9] + postcode_full = contains_issue_type ? row[11] : row[10] 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(', ')}") diff --git a/spec/fixtures/files/addresses_reimport_all_logs.csv b/spec/fixtures/files/addresses_reimport_all_logs.csv new file mode 100644 index 000000000..9bf372231 --- /dev/null +++ b/spec/fixtures/files/addresses_reimport_all_logs.csv @@ -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 diff --git a/spec/fixtures/files/sales_addresses_reimport_all_logs.csv b/spec/fixtures/files/sales_addresses_reimport_all_logs.csv new file mode 100644 index 000000000..4ba69002b --- /dev/null +++ b/spec/fixtures/files/sales_addresses_reimport_all_logs.csv @@ -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 diff --git a/spec/lib/tasks/correct_address_from_csv_spec.rb b/spec/lib/tasks/correct_address_from_csv_spec.rb index bfb2a6c28..5367f5356 100644 --- a/spec/lib/tasks/correct_address_from_csv_spec.rb +++ b/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 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!(:lettings_log) do create(:lettings_log, @@ -91,83 +92,168 @@ RSpec.describe "data_import" do allow(storage_service).to receive(:get_file_io) .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)) - end - it "updates the log address when old address was not given" do - task.invoke(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) + 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 - it "updates the log address when old address was given" do - task.invoke(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 + context "when the file contains issue type column" do + it "updates the log address when old address was not given" do + task.invoke(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 "does not update log address when uprn is given" do - task.invoke(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 "updates the log address when old address was given" do + task.invoke(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 all required address fields are not present" do - task.invoke(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 "does not update log address when uprn is given" do + task.invoke(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(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") - 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(addresses_csv_path) + end - task.invoke(addresses_csv_path) + 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 - 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']") + 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 @@ -188,6 +274,7 @@ RSpec.describe "data_import" do context "when the rake task is run" do 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!(:sales_log) do create(:sales_log, @@ -208,83 +295,168 @@ RSpec.describe "data_import" do allow(storage_service).to receive(:get_file_io) .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)) - end - it "updates the log address when old address was not given" do - task.invoke(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) + 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 - it "updates the log address when old address was given" do - task.invoke(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 + context "when the file contains issue type column" do + it "updates the log address when old address was not given" do + task.invoke(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 "does not update log address when uprn is given" do - task.invoke(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 "updates the log address when old address was given" do + task.invoke(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 all required address fields are not present" do - task.invoke(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 "does not update log address when uprn is given" do + task.invoke(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(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") - 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(addresses_csv_path) + end - task.invoke(addresses_csv_path) + 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 - 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']") + 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