diff --git a/app/services/bulk_upload/lettings/year2024/row_parser.rb b/app/services/bulk_upload/lettings/year2024/row_parser.rb index a620cdab7..776f8c711 100644 --- a/app/services/bulk_upload/lettings/year2024/row_parser.rb +++ b/app/services/bulk_upload/lettings/year2024/row_parser.rb @@ -829,6 +829,10 @@ private errors.add(:field_46, error_message) # ecstat1 errors.add(:field_124, error_message) if log.chcharge.present? # chcharge errors.add(:field_122, error_message) unless general_needs? # household_charge + errors.add(:field_125, error_message) # brent + errors.add(:field_126, error_message) # scharge + errors.add(:field_127, error_message) # pscharge + errors.add(:field_128, error_message) # chcharge end end diff --git a/spec/services/bulk_upload/lettings/year2024/row_parser_spec.rb b/spec/services/bulk_upload/lettings/year2024/row_parser_spec.rb index 0f4bfc055..5a8118d0b 100644 --- a/spec/services/bulk_upload/lettings/year2024/row_parser_spec.rb +++ b/spec/services/bulk_upload/lettings/year2024/row_parser_spec.rb @@ -251,7 +251,17 @@ RSpec.describe BulkUpload::Lettings::Year2024::RowParser do end context "when a general needs log already exists in the db" do - let(:attributes) { { bulk_upload:, field_4: "1" } } + let(:attributes) do + valid_attributes.merge({ field_4: "1", + field_11: "0", + field_1: owning_org.old_visible_id, + field_123: 1, + field_125: 250, + field_126: 50, + field_127: 50, + field_128: 50, + field_13: "tenant_code" }) + end before do parser.log.save! @@ -279,6 +289,10 @@ RSpec.describe BulkUpload::Lettings::Year2024::RowParser do :field_42, # age1 :field_43, # sex1 :field_46, # ecstat1 + :field_125, # brent + :field_126, # scharge + :field_127, # pscharge + :field_128, # supcharg ].each do |field| expect(parser.errors[field]).to include(error_message) end @@ -287,6 +301,57 @@ RSpec.describe BulkUpload::Lettings::Year2024::RowParser do end end + context "when a general needs log already exists in the db but has a different tcharge" do + let(:attributes) do + valid_attributes.merge({ field_4: "1", + field_11: "0", + field_1: owning_org.old_visible_id, + field_123: 1, + field_125: 250, + field_126: 50, + field_127: 50, + field_128: 50, + field_13: "tenant_code" }) + end + + before do + parser.log.save! + saved_log = LettingsLog.find_by(tenancycode: "tenant_code") + saved_log.update!(brent: saved_log.brent + 5) + 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 (and only) the fields used to determine duplicates" do + parser.valid? + + error_message = "This is a duplicate log" + + [ + :field_1, # owning_organisation + :field_8, # startdate + :field_9, # startdate + :field_10, # startdate + :field_13, # tenancycode + :field_21, # postcode_full + :field_22, # postcode_full + :field_23, # postcode_full + :field_42, # age1 + :field_43, # sex1 + :field_46, # ecstat1 + :field_125, # brent + :field_126, # scharge + :field_127, # pscharge + :field_128, # supcharg + ].each do |field| + expect(parser.errors[field]).not_to include(error_message) + end + end + end + context "when a supported housing log already exists in the db" do let(:attributes) { { bulk_upload:, field_4: "2" } } @@ -314,6 +379,10 @@ RSpec.describe BulkUpload::Lettings::Year2024::RowParser do :field_42, # age1 :field_43, # sex1 :field_46, # ecstat1 + :field_125, # brent + :field_126, # scharge + :field_127, # pscharge + :field_128, # supcharg ].each do |field| expect(parser.errors[field]).to include(error_message) end @@ -352,6 +421,10 @@ RSpec.describe BulkUpload::Lettings::Year2024::RowParser do :field_42, # age1 :field_43, # sex1 :field_46, # ecstat1 + :field_125, # brent + :field_126, # scharge + :field_127, # pscharge + :field_128, # supcharg ].each do |field| expect(parser.errors[field]).to include(error_message) end @@ -601,6 +674,10 @@ RSpec.describe BulkUpload::Lettings::Year2024::RowParser do :field_42, # age1 :field_43, # sex1 :field_46, # ecstat1 + :field_125, # brent + :field_126, # scharge + :field_127, # pscharge + :field_128, # supcharg ].each do |field| expect(parser_too.errors[field]).not_to include(error_message) end