diff --git a/spec/models/validations/sales/household_validations_spec.rb b/spec/models/validations/sales/household_validations_spec.rb index 0b9fb3e4c..fcb3689c6 100644 --- a/spec/models/validations/sales/household_validations_spec.rb +++ b/spec/models/validations/sales/household_validations_spec.rb @@ -3,13 +3,13 @@ require "rails_helper" RSpec.describe Validations::Sales::HouseholdValidations do subject(:household_validator) { validator_class.new } + let(:record) { FactoryBot.build(:sales_log) } let(:validator_class) { Class.new { include Validations::Sales::HouseholdValidations } } describe "#validate_number_of_other_people_living_in_the_property" do context "when within permitted bounds" do - let(:record) { FactoryBot.build(:sales_log, hholdcount: 2) } - it "does not add an error" do + record.hholdcount = 2 household_validator.validate_number_of_other_people_living_in_the_property(record) expect(record.errors).not_to be_present @@ -17,9 +17,9 @@ RSpec.describe Validations::Sales::HouseholdValidations do end context "when blank" do - let(:record) { FactoryBot.build(:sales_log, hholdcount: nil) } it "does not add an error" do + record.hholdcount = nil household_validator.validate_number_of_other_people_living_in_the_property(record) expect(record.errors).not_to be_present @@ -27,9 +27,9 @@ RSpec.describe Validations::Sales::HouseholdValidations do end context "when below lower bound" do - let(:record) { FactoryBot.build(:sales_log, hholdcount: -1) } it "adds an error" do + record.hholdcount = -1 household_validator.validate_number_of_other_people_living_in_the_property(record) expect(record.errors).to be_present @@ -37,9 +37,9 @@ RSpec.describe Validations::Sales::HouseholdValidations do end context "when higher than upper bound" do - let(:record) { FactoryBot.build(:sales_log, hholdcount: 5) } it "adds an error" do + record.hholdcount = 5 household_validator.validate_number_of_other_people_living_in_the_property(record) expect(record.errors).to be_present @@ -47,34 +47,144 @@ RSpec.describe Validations::Sales::HouseholdValidations do end end - describe "#validate_partner_count" do - context "when one partner" do - let(:record) { FactoryBot.build(:sales_log, relat2: "P", relat3: nil, relat4: nil, relat5: nil, relat6: nil) } + describe "household member validations" do + it "validates that only 1 partner exists" do + record.relat2 = "P" + record.relat3 = "P" + household_validator.validate_household_number_of_other_members(record) + expect(record.errors["base"]) + .to include(match I18n.t("validations.household.relat.one_partner")) + end - it "does not add an error" do - household_validator.validate_partner_count(record) + it "expects that a tenant can have a partner" do + record.relat3 = "P" + household_validator.validate_household_number_of_other_members(record) + expect(record.errors["base"]).to be_empty + end - expect(record.errors).not_to be_present + context "when the household contains a person under 16" do + it "validates that person must be a child of the tenant" do + record.age2 = 14 + record.relat2 = "P" + household_validator.validate_household_number_of_other_members(record) + expect(record.errors["relat2"]) + .to include(match I18n.t("validations.household.relat.child_under_16", person_num: 2)) + expect(record.errors["age2"]) + .to include(match I18n.t("validations.household.age.child_under_16_relat", person_num: 2)) + end + + it "expects that person is a child of the tenant" do + record.age2 = 14 + record.relat2 = "C" + household_validator.validate_household_number_of_other_members(record) + expect(record.errors["relat2"]).to be_empty + expect(record.errors["age2"]).to be_empty + end + + it "validates that person's economic status must be Child" do + record.age2 = 14 + record.ecstat2 = 1 + household_validator.validate_household_number_of_other_members(record) + expect(record.errors["ecstat2"]) + .to include(match I18n.t("validations.household.ecstat.child_under_16", person_num: 2)) + expect(record.errors["age2"]) + .to include(match I18n.t("validations.household.age.child_under_16", person_num: 2)) + end + + it "expects that person's economic status is Child" do + record.age2 = 14 + record.ecstat2 = 9 + household_validator.validate_household_number_of_other_members(record) + expect(record.errors["ecstat2"]).to be_empty + expect(record.errors["age2"]).to be_empty + end + + it "validates that a person with economic status 'child' must be under 16" do + record.age2 = 21 + record.relat2 = "C" + record.ecstat2 = 9 + household_validator.validate_household_number_of_other_members(record) + expect(record.errors["ecstat2"]) + .to include(match I18n.t("validations.household.ecstat.child_over_16", person_num: 2)) + expect(record.errors["age2"]) + .to include(match I18n.t("validations.household.age.child_over_16", person_num: 2)) end end - context "when blank" do - let(:record) { FactoryBot.build(:sales_log, relat2: nil, relat3: nil, relat4: nil, relat5: nil, relat6: nil) } + context "when the household contains a tenant’s child between the ages of 16 and 19" do + it "validates that person's economic status must be full time student or refused" do + record.age2 = 17 + record.relat2 = "C" + record.ecstat2 = 1 + household_validator.validate_household_number_of_other_members(record) + expect(record.errors["ecstat2"]) + .to include(match I18n.t("validations.household.ecstat.student_16_19", person_num: 2)) + expect(record.errors["age2"]) + .to include(match I18n.t("validations.household.age.student_16_19", person_num: 2)) + expect(record.errors["relat2"]) + .to include(match I18n.t("validations.household.relat.student_16_19", person_num: 2)) + end - it "does not add an error" do - household_validator.validate_partner_count(record) + it "expects that person can be a full time student" do + record.age2 = 17 + record.relat2 = "C" + record.ecstat2 = 7 + household_validator.validate_household_number_of_other_members(record) + expect(record.errors["ecstat2"]).to be_empty + expect(record.errors["age2"]).to be_empty + expect(record.errors["relat2"]).to be_empty + end - expect(record.errors).not_to be_present + it "expects that person can refuse to share their work status" do + record.age2 = 17 + record.relat2 = "C" + record.ecstat2 = 10 + household_validator.validate_household_number_of_other_members(record) + expect(record.errors["ecstat2"]).to be_empty + expect(record.errors["age2"]).to be_empty + expect(record.errors["relat2"]).to be_empty end end - context "when two partners" do - let(:record) { FactoryBot.build(:sales_log, relat2: "P", relat3: "P", relat4: nil, relat5: nil, relat6: nil) } + context "when the household contains a person over 70" do + it "expects that person under 70 does not need to be retired" do + record.age2 = 50 + record.ecstat2 = 1 + household_validator.validate_household_number_of_other_members(record) + expect(record.errors["ecstat2"]).to be_empty + expect(record.errors["age2"]).to be_empty + end - it "adds an error" do - household_validator.validate_partner_count(record) + it "expects that person over 70 is retired" do + record.age2 = 71 + record.ecstat2 = 5 + household_validator.validate_household_number_of_other_members(record) + expect(record.errors["ecstat2"]).to be_empty + expect(record.errors["age2"]).to be_empty + end + end - expect(record.errors).to be_present + context "when the household contains a retired male" do + it "expects that person is over 65" do + record.age2 = 66 + record.sex2 = "M" + record.ecstat2 = 5 + household_validator.validate_household_number_of_other_members(record) + expect(record.errors["ecstat2"]).to be_empty + expect(record.errors["sex2"]).to be_empty + expect(record.errors["age2"]).to be_empty + end + end + + context "when the household contains a retired female" do + it "expects that person is over 60" do + record.age2 = 61 + record.sex2 = "F" + record.ecstat2 = 5 + household_validator.validate_household_number_of_other_members(record) + expect(record.errors["ecstat2"]).to be_empty + expect(record.errors["sex2"]).to be_empty + expect(record.errors["age2"]).to be_empty end end end