From 3cb5267df26093f3e61d0e5f0a2f0814634c66e0 Mon Sep 17 00:00:00 2001 From: Kat Date: Wed, 5 Jul 2023 08:53:19 +0100 Subject: [PATCH] Update duplicate logs check for 2022 lettings --- .../lettings/year2022/row_parser.rb | 37 ++++++++-------- .../lettings/year2022/row_parser_spec.rb | 44 ++++++++++++++++++- 2 files changed, 61 insertions(+), 20 deletions(-) diff --git a/app/services/bulk_upload/lettings/year2022/row_parser.rb b/app/services/bulk_upload/lettings/year2022/row_parser.rb index 5e3211f9e..c15565841 100644 --- a/app/services/bulk_upload/lettings/year2022/row_parser.rb +++ b/app/services/bulk_upload/lettings/year2022/row_parser.rb @@ -442,7 +442,7 @@ class BulkUpload::Lettings::Year2022::RowParser def spreadsheet_duplicate_hash attributes.slice( - "field_5", # location + bulk_upload.needstype != 1 ? "field_5" : nil, # location "field_12", # age1 "field_20", # sex1 "field_35", # ecstat1 @@ -450,9 +450,9 @@ class BulkUpload::Lettings::Year2022::RowParser "field_96", # startdate "field_97", # startdate "field_98", # startdate - "field_100", # propcode - "field_108", # postcode - "field_109", # postcode + bulk_upload.needstype != 2 ? "field_100" : nil, # propcode + bulk_upload.needstype != 2 ? "field_108" : nil, # postcode + bulk_upload.needstype != 2 ? "field_109" : nil, # postcode "field_111", # owning org ) end @@ -518,17 +518,17 @@ 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", + bulk_upload.needstype != 2 ? "postcode_full" : nil, + bulk_upload.needstype != 1 ? "location" : nil, + ].compact end def validate_location_related @@ -853,7 +853,8 @@ private if log_already_exists? error_message = "This is a duplicate log" - errors.add(:field_5, error_message) # location + errors.add(:field_5, error_message) unless bulk_upload.needstype == 1 # location + errors.add(:field_7, error_message) # tenancycode errors.add(:field_12, error_message) # age1 errors.add(:field_20, error_message) # sex1 errors.add(:field_35, error_message) # ecstat1 @@ -862,8 +863,8 @@ private errors.add(:field_97, error_message) # startdate errors.add(:field_98, error_message) # startdate errors.add(:field_100, error_message) # propcode - errors.add(:field_108, error_message) # postcode_full - errors.add(:field_109, error_message) # postcode_full + errors.add(:field_108, error_message) unless bulk_upload.needstype == 2 # postcode_full + errors.add(:field_109, error_message) unless bulk_upload.needstype == 2 # postcode_full errors.add(:field_111, error_message) # owning_organisation end end diff --git a/spec/services/bulk_upload/lettings/year2022/row_parser_spec.rb b/spec/services/bulk_upload/lettings/year2022/row_parser_spec.rb index 151b080b8..4a35bcf86 100644 --- a/spec/services/bulk_upload/lettings/year2022/row_parser_spec.rb +++ b/spec/services/bulk_upload/lettings/year2022/row_parser_spec.rb @@ -233,8 +233,9 @@ RSpec.describe BulkUpload::Lettings::Year2022::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 before do + parser.log.needstype = 1 parser.log.save! parser.instance_variable_set(:@valid, nil) end @@ -249,7 +250,7 @@ RSpec.describe BulkUpload::Lettings::Year2022::RowParser do error_message = "This is a duplicate log" expected_errors = { - field_5: [error_message], # location + field_7: [error_message], # tenancycode field_12: [error_message], # age1 field_20: [error_message], # sex1 field_35: [error_message], # ecstat1 @@ -266,6 +267,45 @@ RSpec.describe BulkUpload::Lettings::Year2022::RowParser do end end + context "when a supported housing log already exists in the db" do + let(:scheme) { create(:scheme, :with_old_visible_id, owning_organisation: owning_org) } + let(:location) { create(:location, :with_old_visible_id, scheme:) } + let(:attributes) { valid_attributes.merge({ field_4: scheme.old_visible_id, field_5: location.old_visible_id, field_111: owning_org.old_visible_id }) } + + before do + parser.bulk_upload.needstype = "2" + 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? + + [ + :field_5, # location + :field_7, # tenancycode + :field_12, # age1 + :field_20, # sex1 + :field_35, # ecstat1 + :field_84, # tcharge + :field_96, # startdate + :field_97, # startdate + :field_98, # startdate + :field_100, # propcode + :field_111, # owning_organisation + ].each do |field| + expect(parser.errors[field]).to include("This is a duplicate log") + end + + expect(parser.errors[:field_109]).not_to include("This is a duplicate log") + expect(parser.errors[:field_108]).not_to include("This is a duplicate log") + end + end + context "when a hidden log already exists in db" do before do parser.log.status = "pending"