From 07043f59b8874ed934ceb9214d466ec15f8b7867 Mon Sep 17 00:00:00 2001 From: Jack <113976590+bibblobcode@users.noreply.github.com> Date: Tue, 4 Apr 2023 09:21:26 +0100 Subject: [PATCH] LaSaleRange validations bug (#1481) --- app/models/la_sale_range.rb | 1 + app/models/sales_log.rb | 4 +++ .../validations/sales/soft_validations.rb | 6 ++++- app/models/validations/soft_validations.rb | 7 ++++- spec/models/lettings_log_spec.rb | 26 +++++++++++++++++++ spec/models/sales_log_spec.rb | 26 +++++++++++++++++++ 6 files changed, 68 insertions(+), 2 deletions(-) diff --git a/app/models/la_sale_range.rb b/app/models/la_sale_range.rb index 55cdc1bf6..fbe7fbf2d 100644 --- a/app/models/la_sale_range.rb +++ b/app/models/la_sale_range.rb @@ -1,2 +1,3 @@ class LaSaleRange < ApplicationRecord + MAX_BEDS = 4 end diff --git a/app/models/sales_log.rb b/app/models/sales_log.rb index 721209ee9..1cfa91acb 100644 --- a/app/models/sales_log.rb +++ b/app/models/sales_log.rb @@ -353,4 +353,8 @@ class SalesLog < Log mortgage_amount = mortgage || 0 mortgage_amount + deposit + grant_amount end + + def beds_for_la_sale_range + beds.nil? ? nil : [beds, LaSaleRange::MAX_BEDS].min + end end diff --git a/app/models/validations/sales/soft_validations.rb b/app/models/validations/sales/soft_validations.rb index 886716343..d72118d05 100644 --- a/app/models/validations/sales/soft_validations.rb +++ b/app/models/validations/sales/soft_validations.rb @@ -126,6 +126,10 @@ module Validations::Sales::SoftValidations private def sale_range - LaSaleRange.find_by(start_year: collection_start_year, la:, bedrooms: beds) + LaSaleRange.find_by( + start_year: collection_start_year, + la:, + bedrooms: beds_for_la_sale_range, + ) end end diff --git a/app/models/validations/soft_validations.rb b/app/models/validations/soft_validations.rb index fbc5ab3b9..cfcfb643b 100644 --- a/app/models/validations/soft_validations.rb +++ b/app/models/validations/soft_validations.rb @@ -28,7 +28,12 @@ module Validations::SoftValidations def rent_in_soft_min_range? return unless brent && weekly_value(brent) && startdate - rent_range = LaRentRange.find_by(start_year: collection_start_year, la:, beds: beds_for_la_rent_range, lettype: get_lettype) + rent_range = LaRentRange.find_by( + start_year: collection_start_year, + la:, + beds: beds_for_la_rent_range, + lettype: get_lettype, + ) rent_range.present? && weekly_value(brent).between?(rent_range.hard_min, rent_range.soft_min) end diff --git a/spec/models/lettings_log_spec.rb b/spec/models/lettings_log_spec.rb index ca4ff7e85..2358317af 100644 --- a/spec/models/lettings_log_spec.rb +++ b/spec/models/lettings_log_spec.rb @@ -3086,5 +3086,31 @@ RSpec.describe LettingsLog do end end end + + describe "#beds_for_la_rent_range" do + context "when beds nil" do + let(:lettings_log) { build(:lettings_log, beds: nil) } + + it "returns nil" do + expect(lettings_log.beds_for_la_rent_range).to be_nil + end + end + + context "when beds <= 4" do + let(:lettings_log) { build(:lettings_log, beds: 4) } + + it "returns number of beds" do + expect(lettings_log.beds_for_la_rent_range).to eq(4) + end + end + + context "when beds > 4" do + let(:lettings_log) { build(:lettings_log, beds: 40) } + + it "returns max number of beds" do + expect(lettings_log.beds_for_la_rent_range).to eq(4) + end + end + end end # rubocop:enable RSpec/AnyInstance diff --git a/spec/models/sales_log_spec.rb b/spec/models/sales_log_spec.rb index 5e1320a67..ca72794a5 100644 --- a/spec/models/sales_log_spec.rb +++ b/spec/models/sales_log_spec.rb @@ -579,5 +579,31 @@ RSpec.describe SalesLog, type: :model do end end end + + describe "#beds_for_la_sale_range" do + context "when beds nil" do + let(:sales_log) { build(:sales_log, beds: nil) } + + it "returns nil" do + expect(sales_log.beds_for_la_sale_range).to be_nil + end + end + + context "when beds <= 4" do + let(:sales_log) { build(:sales_log, beds: 4) } + + it "returns number of beds" do + expect(sales_log.beds_for_la_sale_range).to eq(4) + end + end + + context "when beds > 4" do + let(:sales_log) { build(:sales_log, beds: 40) } + + it "returns max number of beds" do + expect(sales_log.beds_for_la_sale_range).to eq(4) + end + end + end end # rubocop:enable RSpec/AnyInstance