diff --git a/app/services/bulk_upload/lettings/year2023/row_parser.rb b/app/services/bulk_upload/lettings/year2023/row_parser.rb index e77c61405..6564f34e5 100644 --- a/app/services/bulk_upload/lettings/year2023/row_parser.rb +++ b/app/services/bulk_upload/lettings/year2023/row_parser.rb @@ -463,10 +463,11 @@ class BulkUpload::Lettings::Year2023::RowParser "field_7", # startdate "field_8", # startdate "field_9", # startdate + "field_13", # tenancycode "field_14", # propcode - "field_17", # location - "field_23", # postcode - "field_24", # postcode + field_4 != 1 ? "field_17" : nil, # location + field_4 != 2 ? "field_23" : nil, # postcode + field_4 != 2 ? "field_24" : nil, # postcode "field_46", # age1 "field_47", # sex1 "field_50", # ecstat1 @@ -553,17 +554,18 @@ private end def duplicate_check_fields - %w[ - startdate - age1 - sex1 - ecstat1 - owning_organisation - tcharge - propcode - postcode_full - location - ] + [ + "startdate", + "age1", + "sex1", + "ecstat1", + "owning_organisation", + "tcharge", + "propcode", + field_4 != 2 ? "postcode_full" : nil, + field_4 != 1 ? "location" : nil, + "tenancycode", + ].compact end def validate_needs_type_present @@ -853,11 +855,12 @@ private errors.add(:field_7, error_message) # startdate errors.add(:field_8, error_message) # startdate errors.add(:field_9, error_message) # startdate + errors.add(:field_13, error_message) # tenancycode errors.add(:field_14, error_message) # propcode - errors.add(:field_17, error_message) # location - errors.add(:field_23, error_message) # postcode_full - errors.add(:field_24, error_message) # postcode_full - errors.add(:field_25, error_message) # la + errors.add(:field_17, error_message) unless field_4 == 1 # location + errors.add(:field_23, error_message) unless field_4 == 2 # postcode_full + errors.add(:field_24, error_message) unless field_4 == 2 # postcode_full + errors.add(:field_25, error_message) unless field_4 == 2 # la errors.add(:field_46, error_message) # age1 errors.add(:field_47, error_message) # sex1 errors.add(:field_50, error_message) # ecstat1 diff --git a/spec/services/bulk_upload/lettings/year2023/row_parser_spec.rb b/spec/services/bulk_upload/lettings/year2023/row_parser_spec.rb index 97daab448..ef54d5e56 100644 --- a/spec/services/bulk_upload/lettings/year2023/row_parser_spec.rb +++ b/spec/services/bulk_upload/lettings/year2023/row_parser_spec.rb @@ -263,7 +263,9 @@ RSpec.describe BulkUpload::Lettings::Year2023::RowParser do expect(questions.map(&:id)).to eql([]) end - context "when the log already exists in the db" do + context "when a general needs log already exists in the db" do + let(:attributes) { { bulk_upload:, field_4: "1" } } + before do parser.log.save! parser.instance_variable_set(:@valid, nil) @@ -283,8 +285,8 @@ RSpec.describe BulkUpload::Lettings::Year2023::RowParser do :field_7, # startdate :field_8, # startdate :field_9, # startdate + :field_13, # tenancycode :field_14, # propcode - :field_17, # location :field_23, # postcode_full :field_24, # postcode_full :field_25, # postcode_full @@ -295,6 +297,47 @@ RSpec.describe BulkUpload::Lettings::Year2023::RowParser do ].each do |field| expect(parser.errors[field]).to include(error_message) end + + expect(parser.errors[:field_17]).not_to include(error_message) + end + end + + context "when a supported housing log already exists in the db" do + let(:attributes) { { bulk_upload:, field_4: "2" } } + + before do + parser.log.save! + parser.instance_variable_set(:@valid, nil) + end + + it "is not a valid row" do + expect(parser).not_to be_valid + end + + it "adds an error to all the fields used to determine duplicates" do + parser.valid? + + error_message = "This is a duplicate log" + + [ + :field_1, # owning_organisation + :field_7, # startdate + :field_8, # startdate + :field_9, # startdate + :field_13, # tenancycode + :field_14, # propcode + :field_17, # location + :field_46, # age1 + :field_47, # sex1 + :field_50, # ecstat1 + :field_132, # tcharge + ].each do |field| + expect(parser.errors[field]).to include(error_message) + end + + expect(parser.errors[:field_23]).not_to include(error_message) + expect(parser.errors[:field_24]).not_to include(error_message) + expect(parser.errors[:field_25]).not_to include(error_message) end end