From 49f3886a20aaabe182995f9fe81b48d85ed7858f Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Mon, 26 Feb 2024 16:30:29 +0000 Subject: [PATCH 1/2] CLDC-3248: Ensure previous_la_known gets cleared if prevloc is when blanking invalid fields (#2243) * CLDC-3248: Ensure previous_la_known gets cleared if prevloc is when blanking invalid fields * CLDC-3248: Update tests around blank_invalid_non_setup_fields --- app/models/log.rb | 1 + spec/models/lettings_log_spec.rb | 20 ------------- spec/models/log_spec.rb | 50 ++++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 20 deletions(-) diff --git a/app/models/log.rb b/app/models/log.rb index d99399da1..e15869634 100644 --- a/app/models/log.rb +++ b/app/models/log.rb @@ -179,6 +179,7 @@ class Log < ApplicationRecord def blank_compound_invalid_non_setup_fields! self.ppcodenk = nil if errors.attribute_names.include? :ppostcode_full + self.previous_la_known = nil if errors.attribute_names.include? :prevloc if errors.of_kind?(:uprn, :uprn_error) self.uprn_known = nil diff --git a/spec/models/lettings_log_spec.rb b/spec/models/lettings_log_spec.rb index 5c55d87cb..f27a7f7e5 100644 --- a/spec/models/lettings_log_spec.rb +++ b/spec/models/lettings_log_spec.rb @@ -3382,26 +3382,6 @@ RSpec.describe LettingsLog do end end - describe "#blank_invalid_non_setup_fields!" do - context "when a setup field is invalid" do - subject(:model) { described_class.new(needstype: 404) } - - it "does not blank it" do - model.valid? - expect { model.blank_invalid_non_setup_fields! }.not_to change(model, :needstype) - end - end - - context "when a non setup field is invalid" do - subject(:model) { build(:lettings_log, :completed, offered: 234) } - - it "blanks it" do - model.valid? - expect { model.blank_invalid_non_setup_fields! }.to change(model, :offered) - end - end - end - describe "#beds_for_la_rent_range" do context "when beds nil" do let(:lettings_log) { build(:lettings_log, beds: nil) } diff --git a/spec/models/log_spec.rb b/spec/models/log_spec.rb index fb686e744..3494f152f 100644 --- a/spec/models/log_spec.rb +++ b/spec/models/log_spec.rb @@ -27,4 +27,54 @@ RSpec.describe Log, type: :model do expect(in_progress_lettings_log.calculate_status).to eq "in_progress" end end + + describe "#blank_invalid_non_setup_fields!" do + context "when a setup field is invalid for a lettings log" do + subject(:model) { build(:lettings_log, needstype: 404) } + + it "does not blank it" do + model.valid? + expect { model.blank_invalid_non_setup_fields! }.not_to change(model, :needstype) + end + end + + context "when a setup field is invalid for a sales log" do + subject(:model) { build(:sales_log, companybuy: 404) } + + it "does not blank it" do + model.valid? + expect { model.blank_invalid_non_setup_fields! }.not_to change(model, :companybuy) + end + end + + context "when a non setup field is invalid for a lettings log" do + subject(:model) { build(:lettings_log, :completed, offered: 234) } + + it "blanks it" do + model.valid? + model.blank_invalid_non_setup_fields! + expect(model.offered).to be_nil + end + end + + context "when a non setup field is invalid for a sales log" do + subject(:model) { build(:sales_log, :completed, age1: 10) } + + it "blanks it" do + model.valid? + model.blank_invalid_non_setup_fields! + expect(model.age1).to be_nil + end + end + + context "when prevloc is invalid for a lettings log" do + subject(:model) { build(:lettings_log, :completed, previous_la_known: 1, prevloc: nil) } + + it "blanks previous_la_known" do + model.valid? + model.blank_invalid_non_setup_fields! + expect(model.previous_la_known).to be_nil + end + end + end end From 3856a175afd263bc684bf3776839c4d645010e24 Mon Sep 17 00:00:00 2001 From: kosiakkatrina <54268893+kosiakkatrina@users.noreply.github.com> Date: Mon, 26 Feb 2024 17:02:55 +0000 Subject: [PATCH 2/2] Add tolerance to soft validation (#2240) --- .../validations/sales/soft_validations.rb | 8 ++++--- .../sales/soft_validations_spec.rb | 23 +++++++++++++++++++ 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/app/models/validations/sales/soft_validations.rb b/app/models/validations/sales/soft_validations.rb index ae9ee66cc..14c0afae4 100644 --- a/app/models/validations/sales/soft_validations.rb +++ b/app/models/validations/sales/soft_validations.rb @@ -89,9 +89,11 @@ module Validations::Sales::SoftValidations return unless cashdis || !is_type_discount? return unless deposit && value && equity - cash_discount = cashdis || 0 - mortgage_value = mortgage || 0 - mortgage_value + deposit + cash_discount != value * equity / 100 + !within_tolerance?(mortgage_deposit_and_discount_total, value * equity / 100, 1) + end + + def within_tolerance?(expected, actual, tolerance) + (expected - actual).abs <= tolerance end def mortgage_plus_deposit_less_than_discounted_value? diff --git a/spec/models/validations/sales/soft_validations_spec.rb b/spec/models/validations/sales/soft_validations_spec.rb index e417fbd8e..299968436 100644 --- a/spec/models/validations/sales/soft_validations_spec.rb +++ b/spec/models/validations/sales/soft_validations_spec.rb @@ -415,6 +415,17 @@ RSpec.describe Validations::Sales::SoftValidations do .not_to be_shared_ownership_deposit_invalid end + it "returns false if MORTGAGE + DEPOSIT + CASHDIS are within 1£ of VALUE * EQUITY/100" do + record.mortgage = 500 + record.deposit = 500 + record.cashdis = 500 + record.value = 3001 + record.equity = 50 + + expect(record) + .not_to be_shared_ownership_deposit_invalid + end + it "returns false if mortgage is used and no mortgage is given" do record.mortgage = nil record.deposit = 1000 @@ -473,6 +484,18 @@ RSpec.describe Validations::Sales::SoftValidations do .to be_shared_ownership_deposit_invalid end + it "returns false if no cashdis not routed to and MORTGAGE + DEPOSIT are within 1£ of VALUE * EQUITY/100" do + record.mortgage = 500 + record.deposit = 500 + record.type = 2 + record.cashdis = nil + record.value = 1999 + record.equity = 50 + + expect(record) + .not_to be_shared_ownership_deposit_invalid + end + it "returns false if no value is given" do record.mortgage = 1000 record.deposit = 1000