From 41b2b00003f045de8564ba9c453b4b772d353c3c Mon Sep 17 00:00:00 2001 From: Samuel Young Date: Tue, 17 Feb 2026 17:36:16 +0000 Subject: [PATCH] CLDC-4143: Add 2026 tests --- .../validations/soft_validations_spec.rb | 330 ++++++++++++++---- 1 file changed, 255 insertions(+), 75 deletions(-) diff --git a/spec/models/validations/soft_validations_spec.rb b/spec/models/validations/soft_validations_spec.rb index edeb42048..4e582bde9 100644 --- a/spec/models/validations/soft_validations_spec.rb +++ b/spec/models/validations/soft_validations_spec.rb @@ -1,8 +1,11 @@ require "rails_helper" RSpec.describe Validations::SoftValidations do - let(:organisation) { FactoryBot.build(:organisation, provider_type: "PRP", id: 123) } - let(:record) { FactoryBot.build(:lettings_log, owning_organisation: organisation) } + include CollectionTimeHelper + + let(:organisation) { build(:organisation, provider_type: "PRP", id: 123) } + let(:start_year) { current_collection_start_year } + let(:record) { build(:lettings_log, owning_organisation: organisation, startdate: collection_start_date_for_year(start_year)) } describe "rent min max validations" do before do @@ -153,98 +156,275 @@ RSpec.describe Validations::SoftValidations do end describe "pregnancy soft validations" do - context "when all tenants are male" do - it "shows the interruption screen" do - record.age1 = 43 - record.sex1 = "M" - record.preg_occ = 1 - record.hhmemb = 1 - record.age1_known = 0 - expect(record.all_male_tenants_in_a_pregnant_household?).to be true + context "when 2025" do + let(:start_year) { 2025 } + + context "when all tenants are male" do + it "shows the interruption screen" do + record.age1 = 43 + record.sex1 = "M" + record.preg_occ = 1 + record.hhmemb = 1 + record.age1_known = 0 + expect(record.all_male_tenants_in_a_pregnant_household?).to be true + end end - end - context "when there all tenants are male and age of tenants is unknown" do - it "shows the interruption screen" do - record.sex1 = "M" - record.preg_occ = 1 - record.hhmemb = 1 - record.age1_known = 1 - expect(record.all_male_tenants_in_a_pregnant_household?).to be true + context "when there all tenants are male and age of tenants is unknown" do + it "shows the interruption screen" do + record.sex1 = "M" + record.preg_occ = 1 + record.hhmemb = 1 + record.age1_known = 1 + expect(record.all_male_tenants_in_a_pregnant_household?).to be true + end end - end - context "when all tenants are male and household members are over 8" do - it "does not show the interruption screen" do - (1..8).each do |n| - record.send("sex#{n}=", "M") - record.send("age#{n}=", 30) - record.send("age#{n}_known=", 0) - record.send("details_known_#{n}=", 0) unless n == 1 + context "when all tenants are male and household members are over 8" do + it "does not show the interruption screen" do + (1..8).each do |n| + record.send("sex#{n}=", "M") + record.send("age#{n}=", 30) + record.send("age#{n}_known=", 0) + record.send("details_known_#{n}=", 0) unless n == 1 + end + record.preg_occ = 1 + record.hhmemb = 9 + expect(record.all_male_tenants_in_a_pregnant_household?).to be false end - record.preg_occ = 1 - record.hhmemb = 9 - expect(record.all_male_tenants_in_a_pregnant_household?).to be false end - end - context "when female tenants are under 16" do - it "shows the interruption screen" do - record.age2 = 14 - record.sex2 = "F" - record.preg_occ = 1 - record.hhmemb = 2 - record.details_known_2 = 0 - record.age2_known = 0 - record.age1 = 18 - record.sex1 = "M" - record.age1_known = 0 - expect(record.non_males_in_pregnant_household_in_soft_validation_range?).to be true + context "when female tenants are under 16" do + it "shows the interruption screen" do + record.age2 = 14 + record.sex2 = "F" + record.preg_occ = 1 + record.hhmemb = 2 + record.details_known_2 = 0 + record.age2_known = 0 + record.age1 = 18 + record.sex1 = "M" + record.age1_known = 0 + expect(record.non_males_in_pregnant_household_in_soft_validation_range?).to be true + end end - end - context "when female tenants are over 50" do - it "shows the interruption screen" do - record.age1 = 54 - record.sex1 = "F" - record.preg_occ = 1 - record.hhmemb = 1 - record.age1_known = 0 - expect(record.non_males_in_pregnant_household_in_soft_validation_range?).to be true + context "when female tenants are over 50" do + it "shows the interruption screen" do + record.age1 = 54 + record.sex1 = "F" + record.preg_occ = 1 + record.hhmemb = 1 + record.age1_known = 0 + expect(record.non_males_in_pregnant_household_in_soft_validation_range?).to be true + end + end + + context "when non-binary tenants are under 16" do + it "does not show the interruption screen" do + record.age2 = 14 + record.sex2 = "X" + record.preg_occ = 1 + record.hhmemb = 2 + record.details_known_2 = 0 + record.age2_known = 0 + record.age1 = 18 + record.sex1 = "M" + record.age1_known = 0 + expect(record.non_males_in_pregnant_household_in_soft_validation_range?).to be false + end + end + + context "when non-binary tenants are over 50" do + it "does not show the interruption screen" do + record.age1 = 54 + record.sex1 = "X" + record.preg_occ = 1 + record.hhmemb = 1 + record.age1_known = 0 + expect(record.non_males_in_pregnant_household_in_soft_validation_range?).to be false + end + end + + context "when female tenants are outside of soft validation ranges" do + it "does not show the interruption screen" do + record.age1 = 44 + record.sex1 = "F" + record.preg_occ = 1 + record.hhmemb = 1 + expect(record.all_male_tenants_in_a_pregnant_household?).to be false + expect(record.non_males_in_pregnant_household_in_soft_validation_range?).to be false + end + end + + context "when the information about the tenants is not given" do + it "does not show the interruption screen" do + record.preg_occ = 1 + record.hhmemb = 2 + expect(record.all_male_tenants_in_a_pregnant_household?).to be false + expect(record.non_males_in_pregnant_household_in_soft_validation_range?).to be false + end + end + + context "when number of household members is over 8" do + it "does not show the interruption screen" do + (1..8).each do |n| + record.send("sex#{n}=", "F") + record.send("age#{n}=", 50) + record.send("age#{n}_known=", 0) + record.send("details_known_#{n}=", 0) unless n == 1 + end + record.preg_occ = 1 + record.hhmemb = 9 + expect(record.non_males_in_pregnant_household_in_soft_validation_range?).to be false + end end end - context "when female tenants are outside of soft validation ranges" do - it "does not show the interruption screen" do - record.age1 = 44 - record.sex1 = "F" + context "when 2026" do + let(:start_year) { 2026 } + + before do + record.age1 = 43 + record.age1_known = 0 record.preg_occ = 1 record.hhmemb = 1 - expect(record.all_male_tenants_in_a_pregnant_household?).to be false - expect(record.non_males_in_pregnant_household_in_soft_validation_range?).to be false end - end - context "when the information about the tenants is not given" do - it "does not show the interruption screen" do - record.preg_occ = 1 - record.hhmemb = 2 - expect(record.all_male_tenants_in_a_pregnant_household?).to be false - expect(record.non_males_in_pregnant_household_in_soft_validation_range?).to be false + context "when all tenants are male" do + before do + record.sexrab1 = "M" + record.gender_same_as_sex1 = 1 + end + + it "shows the interruption screen" do + expect(record.all_male_tenants_in_a_pregnant_household?).to be true + end end - end - context "when number of household members is over 8" do - it "does not show the interruption screen" do - (1..8).each do |n| - record.send("sex#{n}=", "F") - record.send("age#{n}=", 50) - record.send("age#{n}_known=", 0) - record.send("details_known_#{n}=", 0) unless n == 1 + context "when there all tenants are male and age of tenants is unknown" do + before do + record.sexrab1 = "M" + record.gender_same_as_sex1 = 1 + record.age1_known = 1 + end + + it "shows the interruption screen" do + expect(record.all_male_tenants_in_a_pregnant_household?).to be true + end + end + + context "when all tenants are male and household members are over 8" do + before do + (1..8).each do |n| + record.send("sexrab#{n}=", "M") + record.send("gender_same_as_sex#{n}=", 1) + record.send("age#{n}=", 30) + record.send("age#{n}_known=", 0) + record.send("details_known_#{n}=", 0) unless n == 1 + end + record.preg_occ = 1 + record.hhmemb = 9 + end + + it "does not show the interruption screen" do + expect(record.all_male_tenants_in_a_pregnant_household?).to be false + end + end + + context "when female tenants are under 16" do + before do + record.age1 = 12 + record.sexrab1 = "F" + record.gender_same_as_sex1 = 1 + end + + it "shows the interruption screen" do + expect(record.non_males_in_pregnant_household_in_soft_validation_range?).to be true + end + end + + context "when female tenants are over 50" do + before do + record.age1 = 60 + record.sexrab1 = "F" + record.gender_same_as_sex1 = 1 + end + + it "shows the interruption screen" do + expect(record.non_males_in_pregnant_household_in_soft_validation_range?).to be true + end + end + + context "when non binary tenants are under 16" do + before do + record.age1 = 12 + record.sexrab1 = "M" + record.gender_same_as_sex1 = 2 + record.gender_description1 = "Non-binary" + end + + it "shows the interruption screen" do + expect(record.non_males_in_pregnant_household_in_soft_validation_range?).to be true + end + end + + context "when non binary tenants are over 50" do + before do + record.age1 = 60 + record.sexrab1 = "M" + record.gender_same_as_sex1 = 2 + record.gender_description1 = "Non-binary" + end + + it "shows the interruption screen" do + expect(record.non_males_in_pregnant_household_in_soft_validation_range?).to be true + end + end + + context "when female tenants are outside of soft validation ranges" do + before do + record.age1 = 30 + record.sexrab1 = "F" + record.gender_same_as_sex1 = 1 + end + + it "does not show the interruption screen" do + expect(record.non_males_in_pregnant_household_in_soft_validation_range?).to be false + end + end + + context "when the information about the tenants is not given" do + before do + record.age1 = nil + record.age1_known = nil + record.sexrab1 = nil + record.gender_same_as_sex1 = nil + record.preg_occ = 1 + record.hhmemb = 1 + end + + it "does not show the interruption screen" do + expect(record.non_males_in_pregnant_household_in_soft_validation_range?).to be false + end + end + + context "when number of household members is over 8" do + before do + (1..8).each do |n| + record.send("sexrab#{n}=", "F") + record.send("gender_same_as_sex#{n}=", 1) + record.send("age#{n}=", 30) + record.send("age#{n}_known=", 0) + record.send("details_known_#{n}=", 0) unless n == 1 + end + record.preg_occ = 1 + record.hhmemb = 9 + end + + it "does not show the interruption screen" do + expect(record.non_males_in_pregnant_household_in_soft_validation_range?).to be false end - record.preg_occ = 1 - record.hhmemb = 9 - expect(record.non_males_in_pregnant_household_in_soft_validation_range?).to be false end end end