|
|
|
require "rails_helper"
|
|
|
|
|
|
|
|
RSpec.describe Validations::FinancialValidations do
|
|
|
|
subject(:financial_validator) { validator_class.new }
|
|
|
|
|
|
|
|
let(:validator_class) { Class.new { include Validations::FinancialValidations } }
|
|
|
|
let(:record) { FactoryBot.create(:lettings_log) }
|
|
|
|
let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json") }
|
|
|
|
|
|
|
|
before do
|
|
|
|
allow(FormHandler.instance).to receive(:current_lettings_form).and_return(fake_2021_2022_form)
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "earnings and income frequency" do
|
|
|
|
it "when earnings are provided it validates that income frequency must be provided" do
|
|
|
|
record.earnings = 500
|
|
|
|
record.incfreq = nil
|
|
|
|
financial_validator.validate_net_income(record)
|
|
|
|
expect(record.errors["incfreq"])
|
|
|
|
.to include(match I18n.t("validations.financial.earnings.freq_missing"))
|
|
|
|
expect(record.errors["earnings"])
|
|
|
|
.to include(match I18n.t("validations.financial.earnings.freq_missing"))
|
|
|
|
end
|
|
|
|
|
|
|
|
it "when income frequency is provided it validates that earnings must be provided" do
|
|
|
|
record.earnings = nil
|
|
|
|
record.incfreq = 1
|
|
|
|
financial_validator.validate_net_income(record)
|
|
|
|
expect(record.errors["earnings"])
|
|
|
|
.to include(match I18n.t("validations.financial.earnings.earnings_missing"))
|
|
|
|
expect(record.errors["incfreq"])
|
|
|
|
.to include(match I18n.t("validations.financial.earnings.earnings_missing"))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "benefits proportion validations" do
|
|
|
|
context "when the proportion is all" do
|
|
|
|
it "validates that the lead tenant is not in full time employment" do
|
|
|
|
record.benefits = 0
|
|
|
|
record.ecstat1 = 1
|
|
|
|
financial_validator.validate_net_income_uc_proportion(record)
|
|
|
|
expect(record.errors["benefits"]).to include(match I18n.t("validations.financial.benefits.part_or_full_time"))
|
|
|
|
end
|
|
|
|
|
|
|
|
it "validates that the lead tenant is not in part time employment" do
|
|
|
|
record.benefits = 0
|
|
|
|
record.ecstat1 = 0
|
|
|
|
financial_validator.validate_net_income_uc_proportion(record)
|
|
|
|
expect(record.errors["benefits"]).to include(match I18n.t("validations.financial.benefits.part_or_full_time"))
|
|
|
|
end
|
|
|
|
|
|
|
|
it "expects that the lead tenant is not in full-time or part-time employment" do
|
|
|
|
record.benefits = 0
|
|
|
|
record.ecstat1 = 4
|
|
|
|
financial_validator.validate_net_income_uc_proportion(record)
|
|
|
|
expect(record.errors["benefits"]).to be_empty
|
|
|
|
end
|
|
|
|
|
|
|
|
it "validates that the tenant’s partner is not in full time employment" do
|
|
|
|
record.benefits = 0
|
|
|
|
record.ecstat2 = 0
|
|
|
|
record.relat2 = "P"
|
|
|
|
financial_validator.validate_net_income_uc_proportion(record)
|
|
|
|
expect(record.errors["benefits"]).to include(match I18n.t("validations.financial.benefits.part_or_full_time"))
|
|
|
|
end
|
|
|
|
|
|
|
|
it "expects that the tenant’s partner is not in full-time or part-time employment" do
|
|
|
|
record.benefits = 0
|
|
|
|
record.ecstat2 = 4
|
|
|
|
record.relat2 = "P"
|
|
|
|
financial_validator.validate_net_income_uc_proportion(record)
|
|
|
|
expect(record.errors["benefits"]).to be_empty
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "outstanding rent amount validations" do
|
|
|
|
context "when outstanding rent or charges is no" do
|
|
|
|
it "validates that no shortfall is provided" do
|
|
|
|
record.hbrentshortfall = 2
|
|
|
|
record.tshortfall = 99
|
|
|
|
financial_validator.validate_outstanding_rent_amount(record)
|
|
|
|
expect(record.errors["tshortfall"])
|
|
|
|
.to include(match I18n.t("validations.financial.tshortfall.outstanding_amount_not_required"))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when outstanding rent or charges is yes" do
|
|
|
|
let(:record) { FactoryBot.create(:lettings_log, :about_completed, startdate: Time.zone.now) }
|
|
|
|
|
|
|
|
it "expects that a shortfall is provided" do
|
|
|
|
record.hbrentshortfall = 1
|
|
|
|
record.tshortfall = 99
|
|
|
|
financial_validator.validate_outstanding_rent_amount(record)
|
|
|
|
expect(record.errors["tshortfall"]).to be_empty
|
|
|
|
end
|
|
|
|
|
|
|
|
it "validates that the shortfall is a positive £ amount" do
|
|
|
|
record.hb = 6
|
|
|
|
record.hbrentshortfall = 1
|
|
|
|
record.tshortfall_known = 0
|
|
|
|
record.tshortfall = 0
|
|
|
|
record.period = 2
|
|
|
|
record.set_derived_fields!
|
|
|
|
financial_validator.validate_rent_amount(record)
|
|
|
|
expect(record.errors["tshortfall"])
|
|
|
|
.to include(match I18n.t("validations.financial.tshortfall.must_be_positive"))
|
|
|
|
end
|
|
|
|
|
|
|
|
it "validates that basic rent is no less than the shortfall" do
|
|
|
|
record.hb = 6
|
|
|
|
record.hbrentshortfall = 1
|
|
|
|
record.tshortfall_known = 0
|
|
|
|
record.tshortfall = 299.50
|
|
|
|
record.brent = 198
|
|
|
|
record.period = 2
|
|
|
|
record.set_derived_fields!
|
|
|
|
financial_validator.validate_rent_amount(record)
|
|
|
|
expect(record.errors["brent"])
|
|
|
|
.to include(match I18n.t("validations.financial.rent.less_than_shortfall"))
|
|
|
|
expect(record.errors["tshortfall"])
|
|
|
|
.to include(match I18n.t("validations.financial.tshortfall.more_than_rent"))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "rent period validations" do
|
|
|
|
let(:organisation) { FactoryBot.create(:organisation) }
|
|
|
|
let(:user) { FactoryBot.create(:user) }
|
|
|
|
let(:record) { FactoryBot.create(:lettings_log, owning_organisation: user.organisation, managing_organisation: organisation, created_by: user) }
|
|
|
|
|
|
|
|
before do
|
|
|
|
FactoryBot.create(:organisation_relationship, parent_organisation: user.organisation, child_organisation: organisation)
|
|
|
|
FactoryBot.create(:organisation_rent_period, organisation:, rent_period: 2)
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when the organisation only uses specific rent periods" do
|
|
|
|
it "validates that the selected rent period is used by the managing organisation" do
|
|
|
|
record.period = 3
|
|
|
|
financial_validator.validate_rent_period(record)
|
|
|
|
expect(record.errors["period"])
|
|
|
|
.to include(match I18n.t(
|
|
|
|
"validations.financial.rent_period.invalid_for_org",
|
|
|
|
org_name: organisation.name,
|
|
|
|
rent_period: "every 4 weeks",
|
|
|
|
))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "housing benefit rent shortfall validations" do
|
|
|
|
before { record.startdate = Time.zone.local(2022, 5, 1) }
|
|
|
|
|
|
|
|
context "when shortfall is yes" do
|
|
|
|
it "validates that housing benefit is not none" do
|
|
|
|
record.hbrentshortfall = 1
|
|
|
|
record.hb = 9
|
|
|
|
financial_validator.validate_tshortfall(record)
|
|
|
|
expect(record.errors["tshortfall"])
|
|
|
|
.to include(match I18n.t("validations.financial.hbrentshortfall.outstanding_no_benefits"))
|
|
|
|
end
|
|
|
|
|
|
|
|
it "validates that housing benefit is not don't know" do
|
|
|
|
record.hbrentshortfall = 1
|
|
|
|
record.hb = 3
|
|
|
|
financial_validator.validate_tshortfall(record)
|
|
|
|
expect(record.errors["tshortfall"])
|
|
|
|
.to include(match I18n.t("validations.financial.hbrentshortfall.outstanding_no_benefits"))
|
|
|
|
end
|
|
|
|
|
|
|
|
it "validates that housing benefit is not Universal Credit without housing benefit (prior to 22/23)" do
|
|
|
|
record.startdate = Time.zone.local(2022, 3, 1)
|
|
|
|
record.hbrentshortfall = 1
|
|
|
|
record.hb = 7
|
|
|
|
financial_validator.validate_tshortfall(record)
|
|
|
|
expect(record.errors["tshortfall"])
|
|
|
|
.to include(match I18n.t("validations.financial.hbrentshortfall.outstanding_no_benefits"))
|
|
|
|
end
|
|
|
|
|
|
|
|
it "validates that housing benefit is provided" do
|
|
|
|
record.hbrentshortfall = 1
|
|
|
|
record.hb = 1
|
|
|
|
financial_validator.validate_tshortfall(record)
|
|
|
|
expect(record.errors["tshortfall"]).to be_empty
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "net income validations" do
|
|
|
|
it "validates that the net income is within the expected range for the tenant’s employment status" do
|
|
|
|
record.earnings = 200
|
|
|
|
record.incfreq = 1
|
|
|
|
record.ecstat1 = 1
|
|
|
|
financial_validator.validate_net_income(record)
|
|
|
|
expect(record.errors["earnings"]).to be_empty
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when the net income is higher than the hard max for their employment status" do
|
|
|
|
it "adds an error" do
|
|
|
|
record.earnings = 5000
|
|
|
|
record.incfreq = 1
|
|
|
|
record.ecstat1 = 1
|
|
|
|
financial_validator.validate_net_income(record)
|
|
|
|
expect(record.errors["earnings"])
|
|
|
|
.to include(match I18n.t("validations.financial.earnings.over_hard_max", hard_max: 1230))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when the net income is lower than the hard min for their employment status" do
|
|
|
|
it "adds an error" do
|
|
|
|
record.earnings = 50
|
|
|
|
record.incfreq = 1
|
|
|
|
record.ecstat1 = 1
|
|
|
|
financial_validator.validate_net_income(record)
|
|
|
|
expect(record.errors["earnings"])
|
|
|
|
.to include(match I18n.t("validations.financial.earnings.under_hard_min", hard_min: 90))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "financial validations" do
|
|
|
|
context "when currency is negative" do
|
|
|
|
it "returns error" do
|
|
|
|
record.earnings = -8
|
|
|
|
record.brent = -2
|
|
|
|
record.scharge = -134
|
|
|
|
record.pscharge = -10_024
|
|
|
|
record.supcharg = -1
|
|
|
|
|
|
|
|
financial_validator.validate_negative_currency(record)
|
|
|
|
expect(record.errors["earnings"])
|
|
|
|
.to include(match I18n.t("validations.financial.negative_currency"))
|
|
|
|
expect(record.errors["brent"])
|
|
|
|
.to include(match I18n.t("validations.financial.negative_currency"))
|
|
|
|
expect(record.errors["scharge"])
|
|
|
|
.to include(match I18n.t("validations.financial.negative_currency"))
|
|
|
|
expect(record.errors["pscharge"])
|
|
|
|
.to include(match I18n.t("validations.financial.negative_currency"))
|
|
|
|
expect(record.errors["supcharg"])
|
|
|
|
.to include(match I18n.t("validations.financial.negative_currency"))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when the field allows decimals" do
|
|
|
|
it "correctly co-erces values" do
|
|
|
|
record.brent = "20"
|
|
|
|
record.pscharge = "0.0"
|
|
|
|
record.period = "2"
|
|
|
|
financial_validator.validate_numeric_min_max(record)
|
|
|
|
expect(record.errors["pscharge"]).to be_empty
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "rent and charges validations" do
|
|
|
|
let!(:location) { FactoryBot.create(:location, location_code: "E07000223") }
|
|
|
|
|
|
|
|
context "when the owning organisation is a private registered provider" do
|
|
|
|
before { record.owning_organisation.provider_type = 2 }
|
|
|
|
|
|
|
|
context "when needstype is general needs" do
|
|
|
|
before { record.needstype = 1 }
|
|
|
|
|
|
|
|
[{
|
|
|
|
period: { label: "weekly", value: 1 },
|
|
|
|
charge: { field: "scharge", value: 156 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "monthly", value: 4 },
|
|
|
|
charge: { field: "scharge", value: 672 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "every 2 weeks", value: 2 },
|
|
|
|
charge: { field: "scharge", value: 311 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "weekly", value: 1 },
|
|
|
|
charge: { field: "pscharge", value: 31 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "monthly", value: 4 },
|
|
|
|
charge: { field: "pscharge", value: 150 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "every 2 weeks", value: 2 },
|
|
|
|
charge: { field: "pscharge", value: 61 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "weekly", value: 1 },
|
|
|
|
charge: { field: "supcharg", value: 41 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "monthly", value: 4 },
|
|
|
|
charge: { field: "supcharg", value: 200 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "every 2 weeks", value: 2 },
|
|
|
|
charge: { field: "supcharg", value: 81 },
|
|
|
|
}].each do |test_case|
|
|
|
|
it "does not allow charges outside the range when period is #{test_case[:period][:label]}" do
|
|
|
|
record.period = test_case[:period][:value]
|
|
|
|
record[test_case[:charge][:field]] = test_case[:charge][:value]
|
|
|
|
financial_validator.validate_rent_amount(record)
|
|
|
|
expect(record.errors[test_case[:charge][:field]])
|
|
|
|
.to include(match I18n.t("validations.financial.rent.#{test_case[:charge][:field]}.private_registered_provider.general_needs"))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
[{
|
|
|
|
period: { label: "weekly", value: 1 },
|
|
|
|
charge: { field: "scharge", value: 154 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "monthly", value: 4 },
|
|
|
|
charge: { field: "scharge", value: 670 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "every 2 weeks", value: 2 },
|
|
|
|
charge: { field: "scharge", value: 309 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "weekly", value: 1 },
|
|
|
|
charge: { field: "pscharge", value: 30 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "monthly", value: 4 },
|
|
|
|
charge: { field: "pscharge", value: 120 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "every 2 weeks", value: 2 },
|
|
|
|
charge: { field: "pscharge", value: 59 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "weekly", value: 1 },
|
|
|
|
charge: { field: "supcharg", value: 39 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "monthly", value: 4 },
|
|
|
|
charge: { field: "supcharg", value: 120 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "every 2 weeks", value: 2 },
|
|
|
|
charge: { field: "supcharg", value: 79 },
|
|
|
|
}].each do |test_case|
|
|
|
|
it "does allow charges inside the range when period is #{test_case[:period][:label]}" do
|
|
|
|
record.period = test_case[:period][:value]
|
|
|
|
record[test_case[:charge][:field]] = test_case[:charge][:value]
|
|
|
|
financial_validator.validate_rent_amount(record)
|
|
|
|
expect(record.errors[test_case[:charge][:field]])
|
|
|
|
.to be_empty
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when needstype is supported housing" do
|
|
|
|
before { record.needstype = 2 }
|
|
|
|
|
|
|
|
[{
|
|
|
|
period: { label: "weekly", value: 1 },
|
|
|
|
charge: { field: "scharge", value: 481 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "monthly", value: 4 },
|
|
|
|
charge: { field: "scharge", value: 2081 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "every 2 weeks", value: 2 },
|
|
|
|
charge: { field: "scharge", value: 961 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "weekly", value: 1 },
|
|
|
|
charge: { field: "pscharge", value: 201 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "monthly", value: 4 },
|
|
|
|
charge: { field: "pscharge", value: 1000 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "every 2 weeks", value: 2 },
|
|
|
|
charge: { field: "pscharge", value: 400.80 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "weekly", value: 1 },
|
|
|
|
charge: { field: "supcharg", value: 466 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "monthly", value: 4 },
|
|
|
|
charge: { field: "supcharg", value: 3100 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "every 2 weeks", value: 2 },
|
|
|
|
charge: { field: "supcharg", value: 990 },
|
|
|
|
}].each do |test_case|
|
|
|
|
it "does not allow charges outside the range when period is #{test_case[:period][:label]}" do
|
|
|
|
record.period = test_case[:period][:value]
|
|
|
|
record[test_case[:charge][:field]] = test_case[:charge][:value]
|
|
|
|
financial_validator.validate_rent_amount(record)
|
|
|
|
expect(record.errors[test_case[:charge][:field]])
|
|
|
|
.to include(match I18n.t("validations.financial.rent.#{test_case[:charge][:field]}.private_registered_provider.supported_housing"))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
[{
|
|
|
|
period: { label: "weekly", value: 1 },
|
|
|
|
charge: { field: "scharge", value: 366 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "monthly", value: 4 },
|
|
|
|
charge: { field: "scharge", value: 1582 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "every 2 weeks", value: 2 },
|
|
|
|
charge: { field: "scharge", value: 731 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "weekly", value: 1 },
|
|
|
|
charge: { field: "pscharge", value: 199.99 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "monthly", value: 4 },
|
|
|
|
charge: { field: "pscharge", value: 800 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "every 2 weeks", value: 2 },
|
|
|
|
charge: { field: "pscharge", value: 400 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "weekly", value: 1 },
|
|
|
|
charge: { field: "supcharg", value: 464 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "monthly", value: 4 },
|
|
|
|
charge: { field: "supcharg", value: 2000 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "every 2 weeks", value: 2 },
|
|
|
|
charge: { field: "supcharg", value: 880 },
|
|
|
|
}].each do |test_case|
|
|
|
|
it "does allow charges inside the range when period is #{test_case[:period][:label]}" do
|
|
|
|
record.period = test_case[:period][:value]
|
|
|
|
record[test_case[:charge][:field]] = test_case[:charge][:value]
|
|
|
|
financial_validator.validate_rent_amount(record)
|
|
|
|
expect(record.errors[test_case[:charge][:field]])
|
|
|
|
.to be_empty
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when the owning organisation is a local authority" do
|
|
|
|
before { record.owning_organisation.provider_type = 1 }
|
|
|
|
|
|
|
|
context "when needstype is general needs" do
|
|
|
|
before { record.needstype = 1 }
|
|
|
|
|
|
|
|
[{
|
|
|
|
period: { label: "weekly", value: 1 },
|
|
|
|
charge: { field: "scharge", value: 156 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "monthly", value: 4 },
|
|
|
|
charge: { field: "scharge", value: 672 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "every 2 weeks", value: 2 },
|
|
|
|
charge: { field: "scharge", value: 311 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "weekly", value: 1 },
|
|
|
|
charge: { field: "pscharge", value: 36 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "monthly", value: 4 },
|
|
|
|
charge: { field: "pscharge", value: 190 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "every 2 weeks", value: 2 },
|
|
|
|
charge: { field: "pscharge", value: 71 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "weekly", value: 1 },
|
|
|
|
charge: { field: "supcharg", value: 61 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "monthly", value: 4 },
|
|
|
|
charge: { field: "supcharg", value: 300 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "every 2 weeks", value: 2 },
|
|
|
|
charge: { field: "supcharg", value: 122 },
|
|
|
|
}].each do |test_case|
|
|
|
|
it "does not allow charges outside the range when period is #{test_case[:period][:label]}" do
|
|
|
|
record.period = test_case[:period][:value]
|
|
|
|
record[test_case[:charge][:field]] = test_case[:charge][:value]
|
|
|
|
financial_validator.validate_rent_amount(record)
|
|
|
|
expect(record.errors[test_case[:charge][:field]])
|
|
|
|
.to include(match I18n.t("validations.financial.rent.#{test_case[:charge][:field]}.local_authority.general_needs"))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
[{
|
|
|
|
period: { label: "weekly", value: 1 },
|
|
|
|
charge: { field: "scharge", value: 44 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "monthly", value: 4 },
|
|
|
|
charge: { field: "scharge", value: 160 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "every 2 weeks", value: 2 },
|
|
|
|
charge: { field: "scharge", value: 89 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "weekly", value: 1 },
|
|
|
|
charge: { field: "pscharge", value: 34 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "monthly", value: 4 },
|
|
|
|
charge: { field: "pscharge", value: 140 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "every 2 weeks", value: 2 },
|
|
|
|
charge: { field: "pscharge", value: 69 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "weekly", value: 1 },
|
|
|
|
charge: { field: "supcharg", value: 59.99 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "monthly", value: 4 },
|
|
|
|
charge: { field: "supcharg", value: 240 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "every 2 weeks", value: 2 },
|
|
|
|
charge: { field: "supcharg", value: 119 },
|
|
|
|
}].each do |test_case|
|
|
|
|
it "does allow charges inside the range when period is #{test_case[:period][:label]}" do
|
|
|
|
record.period = test_case[:period][:value]
|
|
|
|
record[test_case[:charge][:field]] = test_case[:charge][:value]
|
|
|
|
financial_validator.validate_rent_amount(record)
|
|
|
|
expect(record.errors[test_case[:charge][:field]])
|
|
|
|
.to be_empty
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when needstype is supported housing" do
|
|
|
|
before { record.needstype = 2 }
|
|
|
|
|
|
|
|
[{
|
|
|
|
period: { label: "weekly", value: 1 },
|
|
|
|
charge: { field: "scharge", value: 365.90 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "monthly", value: 4 },
|
|
|
|
charge: { field: "scharge", value: 2081 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "every 2 weeks", value: 2 },
|
|
|
|
charge: { field: "scharge", value: 961 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "weekly", value: 1 },
|
|
|
|
charge: { field: "pscharge", value: 76 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "monthly", value: 4 },
|
|
|
|
charge: { field: "pscharge", value: 400 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "every 2 weeks", value: 2 },
|
|
|
|
charge: { field: "pscharge", value: 151 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "weekly", value: 1 },
|
|
|
|
charge: { field: "supcharg", value: 121 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "monthly", value: 4 },
|
|
|
|
charge: { field: "supcharg", value: 620 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "every 2 weeks", value: 2 },
|
|
|
|
charge: { field: "supcharg", value: 241 },
|
|
|
|
}].each do |test_case|
|
|
|
|
it "does not allow charges outside the range when period is #{test_case[:period][:label]}" do
|
|
|
|
record.period = test_case[:period][:value]
|
|
|
|
record[test_case[:charge][:field]] = test_case[:charge][:value]
|
|
|
|
financial_validator.validate_rent_amount(record)
|
|
|
|
expect(record.errors[test_case[:charge][:field]])
|
|
|
|
.to include(match I18n.t("validations.financial.rent.#{test_case[:charge][:field]}.local_authority.supported_housing"))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when charges are not given" do
|
|
|
|
[{
|
|
|
|
period: { label: "weekly", value: 1 },
|
|
|
|
charge: { field: "scharge", value: nil },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "weekly", value: 1 },
|
|
|
|
charge: { field: "pscharge", value: nil },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "weekly", value: 1 },
|
|
|
|
charge: { field: "supcharg", value: nil },
|
|
|
|
}].each do |test_case|
|
|
|
|
it "does not error" do
|
|
|
|
record.period = test_case[:period][:value]
|
|
|
|
record[test_case[:charge][:field]] = test_case[:charge][:value]
|
|
|
|
financial_validator.validate_rent_amount(record)
|
|
|
|
expect(record.errors[test_case[:charge][:field]])
|
|
|
|
.to be_empty
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
[{
|
|
|
|
period: { label: "weekly", value: 1 },
|
|
|
|
charge: { field: "scharge", value: 364.88 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "monthly", value: 4 },
|
|
|
|
charge: { field: "scharge", value: 1200 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "every 2 weeks", value: 2 },
|
|
|
|
charge: { field: "scharge", value: 700.99 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "weekly", value: 1 },
|
|
|
|
charge: { field: "pscharge", value: 74 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "monthly", value: 4 },
|
|
|
|
charge: { field: "pscharge", value: 210 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "every 2 weeks", value: 2 },
|
|
|
|
charge: { field: "pscharge", value: 149 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "weekly", value: 1 },
|
|
|
|
charge: { field: "supcharg", value: 119 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "monthly", value: 4 },
|
|
|
|
charge: { field: "supcharg", value: 480 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
period: { label: "every 2 weeks", value: 2 },
|
|
|
|
charge: { field: "supcharg", value: 239 },
|
|
|
|
}].each do |test_case|
|
|
|
|
it "does allow charges inside the range when period is #{test_case[:period][:label]}" do
|
|
|
|
record.period = test_case[:period][:value]
|
|
|
|
record[test_case[:charge][:field]] = test_case[:charge][:value]
|
|
|
|
financial_validator.validate_rent_amount(record)
|
|
|
|
expect(record.errors[test_case[:charge][:field]])
|
|
|
|
.to be_empty
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when period is weekly" do
|
|
|
|
it "validates that total charge is at least 10 per week" do
|
|
|
|
record.period = 1
|
|
|
|
record.tcharge = 9
|
|
|
|
financial_validator.validate_rent_amount(record)
|
|
|
|
expect(record.errors["tcharge"])
|
|
|
|
.to include(match I18n.t("validations.financial.tcharge.under_10"))
|
|
|
|
end
|
|
|
|
|
|
|
|
it "allows the total charge to be over 10 per week" do
|
|
|
|
record.period = 1
|
|
|
|
record.tcharge = 10
|
|
|
|
financial_validator.validate_rent_amount(record)
|
|
|
|
expect(record.errors["tcharge"])
|
|
|
|
.to be_empty
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when period is every 2 weeks" do
|
|
|
|
it "validates that total charge is at least 10 per week" do
|
|
|
|
record.period = 2
|
|
|
|
record.tcharge = 19.99
|
|
|
|
financial_validator.validate_rent_amount(record)
|
|
|
|
expect(record.errors["tcharge"])
|
|
|
|
.to include(match I18n.t("validations.financial.tcharge.under_10"))
|
|
|
|
end
|
|
|
|
|
|
|
|
it "allows the total charge to be over 10 per week" do
|
|
|
|
record.period = 2
|
|
|
|
record.tcharge = 20
|
|
|
|
financial_validator.validate_rent_amount(record)
|
|
|
|
expect(record.errors["tcharge"])
|
|
|
|
.to be_empty
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when entering charges" do
|
|
|
|
it "returns an error for 3 charge types selected" do
|
|
|
|
record.tcharge = 19.99
|
|
|
|
record.chcharge = 20
|
|
|
|
record.household_charge = 1
|
|
|
|
financial_validator.validate_rent_amount(record)
|
|
|
|
expect(record.errors["tcharge"])
|
|
|
|
.to include(match I18n.t("validations.financial.charges.complete_1_of_3"))
|
|
|
|
expect(record.errors["chcharge"])
|
|
|
|
.to include(match I18n.t("validations.financial.charges.complete_1_of_3"))
|
|
|
|
expect(record.errors["household_charge"])
|
|
|
|
.to include(match I18n.t("validations.financial.charges.complete_1_of_3"))
|
|
|
|
end
|
|
|
|
|
|
|
|
it "returns an error for tcharge and chcharge types selected" do
|
|
|
|
record.tcharge = 19.99
|
|
|
|
record.chcharge = 20
|
|
|
|
financial_validator.validate_rent_amount(record)
|
|
|
|
expect(record.errors["household_charge"])
|
|
|
|
.to be_empty
|
|
|
|
expect(record.errors["tcharge"])
|
|
|
|
.to include(match I18n.t("validations.financial.charges.complete_1_of_3"))
|
|
|
|
expect(record.errors["chcharge"])
|
|
|
|
.to include(match I18n.t("validations.financial.charges.complete_1_of_3"))
|
|
|
|
end
|
|
|
|
|
|
|
|
it "returns an error for tcharge type and household_charge not paid selected" do
|
|
|
|
record.tcharge = 19.99
|
|
|
|
record.household_charge = 1
|
|
|
|
financial_validator.validate_rent_amount(record)
|
|
|
|
expect(record.errors["chcharge"])
|
|
|
|
.to be_empty
|
|
|
|
expect(record.errors["tcharge"])
|
|
|
|
.to include(match I18n.t("validations.financial.charges.complete_1_of_3"))
|
|
|
|
expect(record.errors["household_charge"])
|
|
|
|
.to include(match I18n.t("validations.financial.charges.complete_1_of_3"))
|
|
|
|
end
|
|
|
|
|
|
|
|
it "returns an error for chcharge type and household_charge not paid selected" do
|
|
|
|
record.chcharge = 20
|
|
|
|
record.household_charge = 1
|
|
|
|
financial_validator.validate_rent_amount(record)
|
|
|
|
expect(record.errors["tcharge"])
|
|
|
|
.to be_empty
|
|
|
|
expect(record.errors["chcharge"])
|
|
|
|
.to include(match I18n.t("validations.financial.charges.complete_1_of_3"))
|
|
|
|
expect(record.errors["household_charge"])
|
|
|
|
.to include(match I18n.t("validations.financial.charges.complete_1_of_3"))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
it "does not return an error for household_charge being no" do
|
|
|
|
record.household_charge = 1
|
|
|
|
financial_validator.validate_rent_amount(record)
|
|
|
|
expect(record.errors["tcharge"])
|
|
|
|
.to be_empty
|
|
|
|
expect(record.errors["chcharge"])
|
|
|
|
.to be_empty
|
|
|
|
expect(record.errors["household_charge"])
|
|
|
|
.to be_empty
|
|
|
|
end
|
|
|
|
|
|
|
|
it "does not return an error for chcharge being selected" do
|
|
|
|
record.household_charge = 0
|
|
|
|
record.chcharge = 20
|
|
|
|
financial_validator.validate_rent_amount(record)
|
|
|
|
expect(record.errors["tcharge"])
|
|
|
|
.to be_empty
|
|
|
|
expect(record.errors["chcharge"])
|
|
|
|
.to be_empty
|
|
|
|
expect(record.errors["household_charge"])
|
|
|
|
.to be_empty
|
|
|
|
end
|
|
|
|
|
|
|
|
it "does not return an error for tcharge being selected" do
|
|
|
|
record.household_charge = 0
|
|
|
|
record.tcharge = 19.99
|
|
|
|
financial_validator.validate_rent_amount(record)
|
|
|
|
expect(record.errors["tcharge"])
|
|
|
|
.to be_empty
|
|
|
|
expect(record.errors["chcharge"])
|
|
|
|
.to be_empty
|
|
|
|
expect(record.errors["household_charge"])
|
|
|
|
.to be_empty
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when validating ranges based on LA and needstype" do
|
|
|
|
before do
|
|
|
|
LaRentRange.create!(
|
|
|
|
ranges_rent_id: "1",
|
|
|
|
la: "E07000223",
|
|
|
|
beds: 4,
|
|
|
|
lettype: 1,
|
|
|
|
soft_min: 12.41,
|
|
|
|
soft_max: 89.54,
|
|
|
|
hard_min: 9.87,
|
|
|
|
hard_max: 100.99,
|
|
|
|
start_year: 2021,
|
|
|
|
)
|
|
|
|
LaRentRange.create!(
|
|
|
|
ranges_rent_id: "2",
|
|
|
|
la: "E07000223",
|
|
|
|
beds: 0,
|
|
|
|
lettype: 2,
|
|
|
|
soft_min: 12.41,
|
|
|
|
soft_max: 89.54,
|
|
|
|
hard_min: 9.87,
|
|
|
|
hard_max: 100.99,
|
|
|
|
start_year: 2021,
|
|
|
|
)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "validates hard minimum for general needs" do
|
|
|
|
record.needstype = 1
|
|
|
|
record.lettype = 1
|
|
|
|
record.period = 1
|
|
|
|
record.la = "E07000223"
|
|
|
|
record.beds = 4
|
|
|
|
record.startdate = Time.zone.local(2021, 9, 17)
|
|
|
|
record.brent = 9.17
|
|
|
|
|
|
|
|
financial_validator.validate_rent_amount(record)
|
|
|
|
expect(record.errors["brent"])
|
|
|
|
.to include(match I18n.t("validations.financial.brent.below_hard_min"))
|
|
|
|
end
|
|
|
|
|
|
|
|
it "validates hard minimum for supported housing" do
|
|
|
|
record.needstype = 2
|
|
|
|
record.lettype = 2
|
|
|
|
record.period = 1
|
|
|
|
record.location = location
|
|
|
|
record.startdate = Time.zone.local(2021, 9, 17)
|
|
|
|
record.brent = 9.17
|
|
|
|
|
|
|
|
financial_validator.validate_rent_amount(record)
|
|
|
|
expect(record.errors["brent"])
|
|
|
|
.to include(match I18n.t("validations.financial.brent.below_hard_min"))
|
|
|
|
|
|
|
|
%w[beds la postcode_known scheme_id location_id rent_type needstype period].each do |field|
|
|
|
|
expect(record.errors[field])
|
|
|
|
.to include(match I18n.t("validations.financial.brent.#{field}.below_hard_min"))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
it "validates hard max for general needs" do
|
|
|
|
record.needstype = 1
|
|
|
|
record.lettype = 1
|
|
|
|
record.period = 1
|
|
|
|
record.la = "E07000223"
|
|
|
|
record.beds = 4
|
|
|
|
record.startdate = Time.zone.local(2021, 9, 17)
|
|
|
|
record.brent = 200
|
|
|
|
|
|
|
|
financial_validator.validate_rent_amount(record)
|
|
|
|
expect(record.errors["brent"])
|
|
|
|
.to include(match I18n.t("validations.financial.brent.above_hard_max"))
|
|
|
|
|
|
|
|
%w[beds la postcode_known scheme_id location_id rent_type needstype period].each do |field|
|
|
|
|
expect(record.errors[field])
|
|
|
|
.to include(match I18n.t("validations.financial.brent.#{field}.above_hard_max"))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
it "validates hard max for supported housing" do
|
|
|
|
record.needstype = 2
|
|
|
|
record.lettype = 2
|
|
|
|
record.period = 1
|
|
|
|
record.location = location
|
|
|
|
record.startdate = Time.zone.local(2021, 9, 17)
|
|
|
|
record.brent = 200
|
|
|
|
|
|
|
|
financial_validator.validate_rent_amount(record)
|
|
|
|
expect(record.errors["brent"])
|
|
|
|
.to include(match I18n.t("validations.financial.brent.above_hard_max"))
|
|
|
|
|
|
|
|
%w[beds la postcode_known scheme_id location_id rent_type needstype period].each do |field|
|
|
|
|
expect(record.errors[field])
|
|
|
|
.to include(match I18n.t("validations.financial.brent.#{field}.above_hard_max"))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
it "validates hard max for correct collection year" do
|
|
|
|
record.lettype = 1
|
|
|
|
record.period = 1
|
|
|
|
record.la = "E07000223"
|
|
|
|
record.startdate = Time.zone.local(2022, 2, 5)
|
|
|
|
record.beds = 4
|
|
|
|
record.brent = 200
|
|
|
|
|
|
|
|
financial_validator.validate_rent_amount(record)
|
|
|
|
expect(record.errors["brent"])
|
|
|
|
.to include(match I18n.t("validations.financial.brent.above_hard_max"))
|
|
|
|
|
|
|
|
%w[beds la postcode_known scheme_id location_id rent_type needstype period].each do |field|
|
|
|
|
expect(record.errors[field])
|
|
|
|
.to include(match I18n.t("validations.financial.brent.#{field}.above_hard_max"))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
it "does not error if some of the fields are missing" do
|
|
|
|
record.managing_organisation.provider_type = 2
|
|
|
|
record.startdate = Time.zone.local(2021, 9, 17)
|
|
|
|
record.brent = 200
|
|
|
|
|
|
|
|
financial_validator.validate_rent_amount(record)
|
|
|
|
expect(record.errors["brent"])
|
|
|
|
.to be_empty
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when the accommodation is care home" do
|
|
|
|
before do
|
|
|
|
record.is_carehome = 1
|
|
|
|
end
|
|
|
|
|
|
|
|
context "and charges are over the valid limit (£1000 per week)" do
|
|
|
|
it "validates charge when period is weekly for 52 weeks" do
|
|
|
|
record.period = 1
|
|
|
|
record.chcharge = 1001
|
|
|
|
financial_validator.validate_care_home_charges(record)
|
|
|
|
expect(record.errors["chcharge"])
|
|
|
|
.to include(match I18n.t("validations.financial.carehome.out_of_range", min_chcharge: 10, period: "weekly for 52 weeks", max_chcharge: 1000))
|
|
|
|
expect(record.errors["period"])
|
|
|
|
.to include(match I18n.t("validations.financial.carehome.out_of_range", min_chcharge: 10, period: "weekly for 52 weeks", max_chcharge: 1000))
|
|
|
|
end
|
|
|
|
|
|
|
|
it "validates charge when period is monthly" do
|
|
|
|
record.period = 4
|
|
|
|
record.chcharge = 4334
|
|
|
|
financial_validator.validate_care_home_charges(record)
|
|
|
|
expect(record.errors["chcharge"])
|
|
|
|
.to include(match I18n.t("validations.financial.carehome.out_of_range", min_chcharge: 43, period: "every calendar month", max_chcharge: 4333))
|
|
|
|
expect(record.errors["period"])
|
|
|
|
.to include(match I18n.t("validations.financial.carehome.out_of_range", min_chcharge: 43, period: "every calendar month", max_chcharge: 4333))
|
|
|
|
end
|
|
|
|
|
|
|
|
it "validates charge when period is every 2 weeks" do
|
|
|
|
record.period = 2
|
|
|
|
record.chcharge = 2001
|
|
|
|
financial_validator.validate_care_home_charges(record)
|
|
|
|
expect(record.errors["chcharge"])
|
|
|
|
.to include(match I18n.t("validations.financial.carehome.out_of_range", min_chcharge: 20, period: "every 2 weeks", max_chcharge: 2000))
|
|
|
|
expect(record.errors["period"])
|
|
|
|
.to include(match I18n.t("validations.financial.carehome.out_of_range", min_chcharge: 20, period: "every 2 weeks", max_chcharge: 2000))
|
|
|
|
end
|
|
|
|
|
|
|
|
it "validates charge when period is every 4 weeks" do
|
|
|
|
record.period = 3
|
|
|
|
record.chcharge = 4001
|
|
|
|
financial_validator.validate_care_home_charges(record)
|
|
|
|
expect(record.errors["chcharge"])
|
|
|
|
.to include(match I18n.t("validations.financial.carehome.out_of_range", min_chcharge: 40, period: "every 4 weeks", max_chcharge: 4000))
|
|
|
|
expect(record.errors["period"])
|
|
|
|
.to include(match I18n.t("validations.financial.carehome.out_of_range", min_chcharge: 40, period: "every 4 weeks", max_chcharge: 4000))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "and charges are within the valid limit (£1000 per week)" do
|
|
|
|
it "does not throw error when period is weekly for 52 weeks" do
|
|
|
|
record.period = 1
|
|
|
|
record.chcharge = 999
|
|
|
|
financial_validator.validate_care_home_charges(record)
|
|
|
|
expect(record.errors["chcharge"]).to be_empty
|
|
|
|
expect(record.errors["period"]).to be_empty
|
|
|
|
end
|
|
|
|
|
|
|
|
it "does not throw error when period is monthly" do
|
|
|
|
record.period = 4
|
|
|
|
record.chcharge = 4333
|
|
|
|
financial_validator.validate_care_home_charges(record)
|
|
|
|
expect(record.errors["chcharge"]).to be_empty
|
|
|
|
expect(record.errors["period"]).to be_empty
|
|
|
|
end
|
|
|
|
|
|
|
|
it "does not throw error when period is every 2 weeks" do
|
|
|
|
record.period = 2
|
|
|
|
record.chcharge = 1999.99
|
|
|
|
financial_validator.validate_care_home_charges(record)
|
|
|
|
expect(record.errors["chcharge"]).to be_empty
|
|
|
|
expect(record.errors["period"]).to be_empty
|
|
|
|
end
|
|
|
|
|
|
|
|
it "does not throw error when period is every 4 weeks" do
|
|
|
|
record.period = 3
|
|
|
|
record.chcharge = 3999
|
|
|
|
financial_validator.validate_care_home_charges(record)
|
|
|
|
expect(record.errors["chcharge"]).to be_empty
|
|
|
|
expect(record.errors["period"]).to be_empty
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "and charges are not provided" do
|
|
|
|
xit "throws and error" do
|
|
|
|
record.period = 3
|
|
|
|
record.chcharge = nil
|
|
|
|
financial_validator.validate_care_home_charges(record)
|
|
|
|
expect(record.errors["chcharge"])
|
|
|
|
.to include(match I18n.t("validations.financial.carehome.not_provided", period: "every 4 weeks"))
|
|
|
|
expect(record.errors["is_carehome"])
|
|
|
|
.to include(match I18n.t("validations.financial.carehome.not_provided", period: "every 4 weeks"))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "and charges under valid limit (£10pw)" do
|
|
|
|
it "validates charge when period is weekly for 52 weeks" do
|
|
|
|
record.period = 1
|
|
|
|
record.chcharge = 9
|
|
|
|
financial_validator.validate_care_home_charges(record)
|
|
|
|
expect(record.errors["chcharge"])
|
|
|
|
.to include(match I18n.t("validations.financial.carehome.out_of_range", min_chcharge: 10, period: "weekly for 52 weeks", max_chcharge: 1000))
|
|
|
|
expect(record.errors["period"])
|
|
|
|
.to include(match I18n.t("validations.financial.carehome.out_of_range", min_chcharge: 10, period: "weekly for 52 weeks", max_chcharge: 1000))
|
|
|
|
end
|
|
|
|
|
|
|
|
it "validates charge when period is monthly" do
|
|
|
|
record.period = 4
|
|
|
|
record.chcharge = 42
|
|
|
|
financial_validator.validate_care_home_charges(record)
|
|
|
|
expect(record.errors["chcharge"])
|
|
|
|
.to include(match I18n.t("validations.financial.carehome.out_of_range", min_chcharge: 43, period: "every calendar month", max_chcharge: 4333))
|
|
|
|
expect(record.errors["period"])
|
|
|
|
.to include(match I18n.t("validations.financial.carehome.out_of_range", min_chcharge: 43, period: "every calendar month", max_chcharge: 4333))
|
|
|
|
end
|
|
|
|
|
|
|
|
it "validates charge when period is every 2 weeks" do
|
|
|
|
record.period = 2
|
|
|
|
record.chcharge = 19
|
|
|
|
financial_validator.validate_care_home_charges(record)
|
|
|
|
expect(record.errors["chcharge"])
|
|
|
|
.to include(match I18n.t("validations.financial.carehome.out_of_range", min_chcharge: 20, period: "every 2 weeks", max_chcharge: 2000))
|
|
|
|
expect(record.errors["period"])
|
|
|
|
.to include(match I18n.t("validations.financial.carehome.out_of_range", min_chcharge: 20, period: "every 2 weeks", max_chcharge: 2000))
|
|
|
|
end
|
|
|
|
|
|
|
|
it "validates charge when period is every 4 weeks" do
|
|
|
|
record.period = 3
|
|
|
|
record.chcharge = 39
|
|
|
|
financial_validator.validate_care_home_charges(record)
|
|
|
|
expect(record.errors["chcharge"])
|
|
|
|
.to include(match I18n.t("validations.financial.carehome.out_of_range", min_chcharge: 40, period: "every 4 weeks", max_chcharge: 4000))
|
|
|
|
expect(record.errors["period"])
|
|
|
|
.to include(match I18n.t("validations.financial.carehome.out_of_range", min_chcharge: 40, period: "every 4 weeks", max_chcharge: 4000))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|