From d59187a9ddda13db6dd1ea2f2e9292cf15ef9f88 Mon Sep 17 00:00:00 2001 From: Kat Date: Wed, 13 Sep 2023 11:30:38 +0100 Subject: [PATCH] Add pscharge_over_soft_max method --- app/models/validations/soft_validations.rb | 12 + .../validations/soft_validations_spec.rb | 214 ++++++++++++++++++ 2 files changed, 226 insertions(+) diff --git a/app/models/validations/soft_validations.rb b/app/models/validations/soft_validations.rb index eaef04381..32b8a1926 100644 --- a/app/models/validations/soft_validations.rb +++ b/app/models/validations/soft_validations.rb @@ -109,6 +109,18 @@ module Validations::SoftValidations weekly_value(scharge) > max end + def pscharge_over_soft_max? + return unless pscharge && period && needstype + return if weekly_value(pscharge).blank? + + max = if needstype == 1 + owning_organisation.provider_type == "LA" ? 25 : 35 + else + owning_organisation.provider_type == "LA" ? 75 : 100 + end + weekly_value(pscharge) > max + 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 ee4519f50..0a2b6a4dd 100644 --- a/spec/models/validations/soft_validations_spec.rb +++ b/spec/models/validations/soft_validations_spec.rb @@ -589,4 +589,218 @@ RSpec.describe Validations::SoftValidations do end end end + + describe "pscharge_over_soft_max?" do + context "and organisation is PRP" do + before do + record.owning_organisation.update(provider_type: "PRP") + end + + it "returns false if pscharge is not given" do + record.pscharge = nil + record.needstype = 1 + record.period = 1 + + expect(record).not_to be_pscharge_over_soft_max + end + + it "returns false if period is not given" do + record.pscharge = 201 + record.needstype = 1 + record.period = nil + + expect(record).not_to be_pscharge_over_soft_max + end + + [{ + period: { label: "weekly", value: 1 }, + pscharge: 34, + }, + { + period: { label: "monthly", value: 4 }, + pscharge: 100, + }, + { + period: { label: "every 2 weeks", value: 2 }, + pscharge: 69, + }].each do |test_case| + it "returns false if pscharge is under soft max for general needs #{test_case[:period][:label]}(35)" do + record.pscharge = test_case[:pscharge] + record.needstype = 1 + record.period = test_case[:period][:value] + + expect(record).not_to be_pscharge_over_soft_max + end + end + + [{ + period: { label: "weekly", value: 1 }, + pscharge: 99, + }, + { + period: { label: "monthly", value: 4 }, + pscharge: 400, + }, + { + period: { label: "every 2 weeks", value: 2 }, + pscharge: 199, + }].each do |test_case| + it "returns false if pscharge is under soft max for supported housing #{test_case[:period][:label]} (100)" do + record.pscharge = test_case[:pscharge] + record.needstype = 2 + record.period = test_case[:period][:value] + + expect(record).not_to be_pscharge_over_soft_max + end + end + + [{ + period: { label: "weekly", value: 1 }, + pscharge: 36, + }, + { + period: { label: "monthly", value: 4 }, + pscharge: 180, + }, + { + period: { label: "every 2 weeks", value: 2 }, + pscharge: 71, + }].each do |test_case| + it "returns true if pscharge is over soft max for general needs #{test_case[:period][:label]} (35)" do + record.pscharge = test_case[:pscharge] + record.needstype = 1 + record.period = test_case[:period][:value] + + expect(record).to be_pscharge_over_soft_max + end + end + + [{ + period: { label: "weekly", value: 1 }, + pscharge: 101, + }, + { + period: { label: "monthly", value: 4 }, + pscharge: 450, + }, + { + period: { label: "every 2 weeks", value: 2 }, + pscharge: 201, + }].each do |test_case| + it "returns true if pscharge is over soft max for supported housing #{test_case[:period][:label]} (100)" do + record.pscharge = test_case[:pscharge] + record.needstype = 2 + record.period = test_case[:period][:value] + + expect(record).to be_pscharge_over_soft_max + end + end + end + + context "and organisation is LA" do + before do + record.owning_organisation.update(provider_type: "LA") + end + + it "returns false if pscharge is not given" do + record.pscharge = nil + record.needstype = 1 + record.period = 1 + + expect(record).not_to be_pscharge_over_soft_max + end + + it "returns false if period is not given" do + record.pscharge = 201 + record.needstype = 1 + record.period = nil + + expect(record).not_to be_pscharge_over_soft_max + end + + [{ + period: { label: "weekly", value: 1 }, + pscharge: 24, + }, + { + period: { label: "monthly", value: 4 }, + pscharge: 88, + }, + { + period: { label: "every 2 weeks", value: 2 }, + pscharge: 49, + }].each do |test_case| + it "returns false if pscharge is under soft max for general needs #{test_case[:period][:label]}(25)" do + record.pscharge = test_case[:pscharge] + record.needstype = 1 + record.period = test_case[:period][:value] + + expect(record).not_to be_pscharge_over_soft_max + end + end + + [{ + period: { label: "weekly", value: 1 }, + pscharge: 74, + }, + { + period: { label: "monthly", value: 4 }, + pscharge: 250, + }, + { + period: { label: "every 2 weeks", value: 2 }, + pscharge: 149, + }].each do |test_case| + it "returns false if pscharge is under soft max for supported housing #{test_case[:period][:label]} (75)" do + record.pscharge = test_case[:pscharge] + record.needstype = 2 + record.period = test_case[:period][:value] + + expect(record).not_to be_pscharge_over_soft_max + end + end + + [{ + period: { label: "weekly", value: 1 }, + pscharge: 26, + }, + { + period: { label: "monthly", value: 4 }, + pscharge: 120, + }, + { + period: { label: "every 2 weeks", value: 2 }, + pscharge: 51, + }].each do |test_case| + it "returns true if pscharge is over soft max for general needs #{test_case[:period][:label]} (25)" do + record.pscharge = test_case[:pscharge] + record.needstype = 1 + record.period = test_case[:period][:value] + + expect(record).to be_pscharge_over_soft_max + end + end + + [{ + period: { label: "weekly", value: 1 }, + pscharge: 76, + }, + { + period: { label: "monthly", value: 4 }, + pscharge: 350, + }, + { + period: { label: "every 2 weeks", value: 2 }, + pscharge: 151, + }].each do |test_case| + it "returns true if pscharge is over soft max for supported housing #{test_case[:period][:label]} (75)" do + record.pscharge = test_case[:pscharge] + record.needstype = 2 + record.period = test_case[:period][:value] + + expect(record).to be_pscharge_over_soft_max + end + end + end + end end