From 35c5b0e106a80631e09fd39254b3483e852d6312 Mon Sep 17 00:00:00 2001 From: Kat Date: Wed, 13 Sep 2023 11:13:10 +0100 Subject: [PATCH] add scharge_over_soft_max method --- app/models/validations/soft_validations.rb | 10 ++ .../validations/soft_validations_spec.rb | 108 ++++++++++++++++++ 2 files changed, 118 insertions(+) diff --git a/app/models/validations/soft_validations.rb b/app/models/validations/soft_validations.rb index 303f525cd..f408b0ee8 100644 --- a/app/models/validations/soft_validations.rb +++ b/app/models/validations/soft_validations.rb @@ -97,6 +97,16 @@ module Validations::SoftValidations net_income_in_soft_max_range? ? "higher" : "lower" end + def scharge_over_soft_max? + return unless scharge && period && needstype + + if needstype == 1 + weekly_value(scharge).present? && weekly_value(scharge) > 35 + else + weekly_value(scharge).present? && weekly_value(scharge) > 200 + end + end + private def details_known_or_lead_tenant?(tenant_number) diff --git a/spec/models/validations/soft_validations_spec.rb b/spec/models/validations/soft_validations_spec.rb index 0a267b9e9..472ed72cd 100644 --- a/spec/models/validations/soft_validations_spec.rb +++ b/spec/models/validations/soft_validations_spec.rb @@ -375,4 +375,112 @@ RSpec.describe Validations::SoftValidations do expect(record).to be_la_referral_for_general_needs end end + + describe "scharge_over_soft_max?" do + context "and organisation is PRP" do + before do + record.owning_organisation.update(provider_type: "PRP") + end + + it "returns false if scharge is not given" do + record.scharge = nil + record.needstype = 1 + record.period = 1 + + expect(record).not_to be_scharge_over_soft_max + end + + it "returns false if period is not given" do + record.scharge = 201 + record.needstype = 1 + record.period = nil + + expect(record).not_to be_scharge_over_soft_max + end + + [{ + period: { label: "weekly", value: 1 }, + scharge: 34, + }, + { + period: { label: "monthly", value: 4 }, + scharge: 100, + }, + { + period: { label: "every 2 weeks", value: 2 }, + scharge: 69, + }].each do |test_case| + it "returns false if scharge is under soft max for general needs #{test_case[:period][:label]}(35)" do + record.scharge = test_case[:scharge] + record.needstype = 1 + record.period = test_case[:period][:value] + + expect(record).not_to be_scharge_over_soft_max + end + end + + [{ + period: { label: "weekly", value: 1 }, + scharge: 199, + }, + { + period: { label: "monthly", value: 4 }, + scharge: 400, + }, + { + period: { label: "every 2 weeks", value: 2 }, + scharge: 399, + }].each do |test_case| + it "returns false if scharge is under soft max for supported housing #{test_case[:period][:label]} (200)" do + record.scharge = test_case[:scharge] + record.needstype = 2 + record.period = test_case[:period][:value] + + expect(record).not_to be_scharge_over_soft_max + end + end + + [{ + period: { label: "weekly", value: 1 }, + scharge: 36, + }, + { + period: { label: "monthly", value: 4 }, + scharge: 180, + }, + { + period: { label: "every 2 weeks", value: 2 }, + scharge: 71, + }].each do |test_case| + it "returns true if scharge is over soft max for general needs #{test_case[:period][:label]} (35)" do + record.scharge = test_case[:scharge] + record.needstype = 1 + record.period = test_case[:period][:value] + + expect(record).to be_scharge_over_soft_max + end + end + + [{ + period: { label: "weekly", value: 1 }, + scharge: 201, + }, + { + period: { label: "monthly", value: 4 }, + scharge: 1000, + }, + { + period: { label: "every 2 weeks", value: 2 }, + scharge: 401, + }].each do |test_case| + it "returns true if scharge is over soft max for supported housing #{test_case[:period][:label]} (200)" do + record.scharge = test_case[:scharge] + record.needstype = 2 + record.period = test_case[:period][:value] + + expect(record).to be_scharge_over_soft_max + end + end + end + end end