From 7058c9838aa33b10672f8d0560a31a7ee9ebc1e0 Mon Sep 17 00:00:00 2001 From: carolynbarker <8038496+carolynbarker@users.noreply.github.com> Date: Mon, 31 Mar 2025 18:47:31 +0100 Subject: [PATCH] CLDC-3938 set ppostcode on postcode change to fix bu bug (#2994) * set renewal ppostcode on postcode change * update test * don't validate ppostcode format if nil * reset ppcodenk if ppcode errors --------- Co-authored-by: Carolyn --- app/models/lettings_log.rb | 9 +++++++++ app/models/validations/local_authority_validations.rb | 2 ++ spec/models/lettings_log_derived_fields_spec.rb | 10 ++++++---- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/app/models/lettings_log.rb b/app/models/lettings_log.rb index 4554b99d2..2d29fb6db 100644 --- a/app/models/lettings_log.rb +++ b/app/models/lettings_log.rb @@ -649,6 +649,7 @@ class LettingsLog < Log super self.postcode_known = nil if errors.attribute_names.include? :postcode_full + self.ppcodenk = nil if errors.attribute_names.include? :ppostcode_full if errors.of_kind?(:earnings, :under_hard_min) self.incfreq = nil @@ -714,9 +715,17 @@ class LettingsLog < Log def process_postcode_changes! self.postcode_full = upcase_and_remove_whitespace(postcode_full) + + if is_renewal? + self.ppostcode_full = upcase_and_remove_whitespace(postcode_full) + end + return if postcode_full.blank? self.postcode_known = 1 + if is_renewal? + self.ppcodenk = 0 + end inferred_la = get_inferred_la(postcode_full) self.is_la_inferred = inferred_la.present? self.la = inferred_la if inferred_la.present? diff --git a/app/models/validations/local_authority_validations.rb b/app/models/validations/local_authority_validations.rb index 3bdd79166..9f2678c55 100644 --- a/app/models/validations/local_authority_validations.rb +++ b/app/models/validations/local_authority_validations.rb @@ -1,6 +1,8 @@ module Validations::LocalAuthorityValidations def validate_previous_accommodation_postcode(record) postcode = record.ppostcode_full + return unless postcode + if record.previous_postcode_known? && (postcode.blank? || !postcode.match(POSTCODE_REGEXP)) error_message = I18n.t("validations.postcode") record.errors.add :ppostcode_full, :wrong_format, message: error_message diff --git a/spec/models/lettings_log_derived_fields_spec.rb b/spec/models/lettings_log_derived_fields_spec.rb index 46a09d7eb..6c082b1c3 100644 --- a/spec/models/lettings_log_derived_fields_spec.rb +++ b/spec/models/lettings_log_derived_fields_spec.rb @@ -1016,11 +1016,13 @@ RSpec.describe LettingsLog, type: :model do postcode = "SW1A 1AA" log.assign_attributes(postcode_known: 1, postcode_full: postcode, renewal: 1) - expect { log.send :process_postcode_changes! }.to change(log, :la).to(expected_la) - expect { log.set_derived_fields! } - .to change(log, :ppostcode_full).to(postcode) + expect { log.send :process_postcode_changes! } + .to change(log, :la).to(expected_la) + .and change(log, :ppostcode_full).to(postcode) .and change(log, :ppcodenk).to(0) - .and change(log, :prevloc).to(expected_la) + + expect { log.set_derived_fields! } + .to change(log, :prevloc).to(expected_la) end it "clears values for previous location and related fields when log is a renewal and current values are cleared" do