You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
373 lines
14 KiB
373 lines
14 KiB
require "rails_helper" |
|
|
|
RSpec.describe Form, type: :model do |
|
describe "#new" do |
|
it "validates age is a number" do |
|
expect { CaseLog.create!(age1: "random") }.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
|
|
it "validates age is under 120" do |
|
expect { CaseLog.create!(age1: 121) }.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
|
|
it "validates age is over 0" do |
|
expect { CaseLog.create!(age1: 0) }.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
|
|
it "validates number of relets is a number" do |
|
expect { CaseLog.create!(offered: "random") }.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
|
|
it "validates number of relets is under 20" do |
|
expect { CaseLog.create!(offered: 21) }.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
|
|
it "validates number of relets is over 0" do |
|
expect { CaseLog.create!(offered: 0) }.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
|
|
context "reasonable preference is yes" do |
|
it "validates a reason must be selected" do |
|
expect { |
|
CaseLog.create!(reasonpref: "Yes", |
|
rp_homeless: nil, |
|
rp_insan_unsat: nil, |
|
rp_medwel: nil, |
|
rp_hardship: nil, |
|
rp_dontknow: nil) |
|
}.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
|
|
it "validates that previously homeless should be selected" do |
|
expect { |
|
CaseLog.create!( |
|
homeless: "No", |
|
reasonpref: "Yes", |
|
) |
|
}.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
end |
|
|
|
context "reasonable preference is no" do |
|
it "validates no reason is needed" do |
|
expect { |
|
CaseLog.create!(reasonpref: "No", rp_homeless: "No") |
|
}.not_to raise_error |
|
end |
|
end |
|
|
|
context "reason for leaving last settled home validation" do |
|
it "Reason for leaving must be don't know if reason for leaving settled home (Q9a) is don't know." do |
|
expect { |
|
CaseLog.create!(reason: "Do not know", |
|
underoccupation_benefitcap: "Yes - benefit cap") |
|
}.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
end |
|
context "other reason for leaving last settled home validation" do |
|
it "must be provided if main reason for leaving last settled home was given as other" do |
|
expect { |
|
CaseLog.create!(reason: "Other", |
|
other_reason_for_leaving_last_settled_home: nil) |
|
}.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
|
|
it "must not be provided if the main reason for leaving settled home is not other" do |
|
expect { |
|
CaseLog.create!(reason: "Repossession", |
|
other_reason_for_leaving_last_settled_home: "the other reason provided") |
|
}.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
end |
|
|
|
context "armed forces injured validation" do |
|
it "must be answered if tenant was a regular or reserve in armed forces" do |
|
expect { |
|
CaseLog.create!(armedforces: "A current or former regular in the UK Armed Forces (exc. National Service)", |
|
reservist: nil) |
|
}.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
|
|
it "must be answered if tenant was not a regular or reserve in armed forces" do |
|
expect { |
|
CaseLog.create!(armedforces: "No", |
|
reservist: "Yes") |
|
}.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
end |
|
|
|
context "Shared accomodation bedrooms validation" do |
|
it "you must have more than zero bedrooms" do |
|
expect { |
|
CaseLog.create!(unittype_gn: "Shared house", |
|
beds: 0) |
|
}.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
|
|
it "you must answer less than 8 bedrooms" do |
|
expect { |
|
CaseLog.create!(unittype_gn: "Shared bungalow", |
|
beds: 8, |
|
other_hhmemb: 1) |
|
}.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
|
|
it "you must answer less than 8 bedrooms" do |
|
expect { |
|
CaseLog.create!(unittype_gn: "Shared bungalow", |
|
beds: 4, |
|
other_hhmemb: 0) |
|
}.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
|
|
it "A bedsit must only have one room" do |
|
expect { |
|
CaseLog.create!(unittype_gn: "Bed-sit", |
|
beds: 2) |
|
}.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
|
|
it "A bedsit must only have one room" do |
|
expect { |
|
CaseLog.create!(unittype_gn: "Bed-sit", |
|
beds: 0) |
|
}.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
end |
|
|
|
context "outstanding rent or charges validation" do |
|
it "must be anwered if answered yes to outstanding rent or charges" do |
|
expect { |
|
CaseLog.create!(hbrentshortfall: "Yes", |
|
tshortfall: nil) |
|
}.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
|
|
it "must be not be anwered if answered no to outstanding rent or charges" do |
|
expect { |
|
CaseLog.create!(hbrentshortfall: "No", |
|
tshortfall: 99) |
|
}.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
end |
|
|
|
context "tenant’s income is from Universal Credit, state pensions or benefits" do |
|
it "Cannot be All if person 1 works full time" do |
|
expect { |
|
CaseLog.create!(benefits: "All", ecstat1: "Full-time - 30 hours or more") |
|
}.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
|
|
it "Cannot be All if person 1 works part time" do |
|
expect { |
|
CaseLog.create!(benefits: "All", ecstat1: "Part-time - Less than 30 hours") |
|
}.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
|
|
it "Cannot be 1 All if any of persons 2-4 are person 1's partner and work part or full time" do |
|
expect { |
|
CaseLog.create!(benefits: "All", relat2: "Partner", ecstat2: "Part-time - Less than 30 hours") |
|
}.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
end |
|
|
|
context "fixed term tenancy length" do |
|
it "Must not be completed if Type of main tenancy is not responded with either Secure or Assured shorthold " do |
|
expect { |
|
CaseLog.create!(tenancy: "Other", |
|
tenancylength: 10) |
|
}.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
|
|
it "Must be completed and between 2 and 99 if type of tenancy is Assured shorthold" do |
|
expect { |
|
CaseLog.create!(tenancy: "Assured Shorthold", |
|
tenancylength: 1) |
|
}.to raise_error(ActiveRecord::RecordInvalid) |
|
|
|
expect { |
|
CaseLog.create!(tenancy: "Assured Shorthold", |
|
tenancylength: nil) |
|
}.to raise_error(ActiveRecord::RecordInvalid) |
|
|
|
expect { |
|
CaseLog.create!(tenancy: "Assured Shorthold", |
|
tenancylength: 2) |
|
}.not_to raise_error |
|
end |
|
|
|
it "Must be empty or between 2 and 99 if type of tenancy is Secure" do |
|
expect { |
|
CaseLog.create!(tenancy: "Secure (including flexible)", |
|
tenancylength: 1) |
|
}.to raise_error(ActiveRecord::RecordInvalid) |
|
|
|
expect { |
|
CaseLog.create!(tenancy: "Secure (including flexible)", |
|
tenancylength: 100) |
|
}.to raise_error(ActiveRecord::RecordInvalid) |
|
|
|
expect { |
|
CaseLog.create!(tenancy: "Secure (including flexible)", |
|
tenancylength: nil) |
|
}.not_to raise_error |
|
|
|
expect { |
|
CaseLog.create!(tenancy: "Secure (including flexible)", |
|
tenancylength: 2) |
|
}.not_to raise_error |
|
end |
|
end |
|
|
|
context "armed forces active validation" do |
|
it "must be answered if ever served in the forces as a regular" do |
|
expect { |
|
CaseLog.create!(armedforces: "A current or former regular in the UK Armed Forces (exc. National Service)", |
|
leftreg: nil) |
|
}.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
|
|
it "must not be answered if not ever served as a regular" do |
|
expect { |
|
CaseLog.create!(armedforces: "No", |
|
leftreg: "Yes") |
|
}.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
|
|
# Crossover over tests here as injured must be answered as well for no error |
|
it "must be answered if ever served in the forces as a regular" do |
|
expect do |
|
CaseLog.create!(armedforces: "A current or former regular in the UK Armed Forces (exc. National Service)", |
|
leftreg: "Yes", |
|
reservist: "Yes") |
|
end |
|
end |
|
end |
|
|
|
context "household_member_validations" do |
|
it "validate that persons aged under 16 must have relationship Child" do |
|
expect { CaseLog.create!(age2: 14, relat2: "Partner") }.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
|
|
it "validate that persons aged over 70 must be retired" do |
|
expect { CaseLog.create!(age2: 71, ecstat2: "Full-time - 30 hours or more") }.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
|
|
it "validate that a male, retired persons must be over 65" do |
|
expect { CaseLog.create!(age2: 64, sex2: "Male", ecstat2: "Retired") }.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
|
|
it "validate that a female, retired persons must be over 60" do |
|
expect { CaseLog.create!(age2: 59, sex2: "Female", ecstat2: "Retired") }.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
|
|
it "validate that persons aged under 16 must be a child (economically speaking)" do |
|
expect { CaseLog.create!(age2: 15, ecstat2: "Full-time - 30 hours or more") }.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
|
|
it "validate that persons aged between 16 and 19 that are a child must be a full time student or economic status refused" do |
|
expect { CaseLog.create!(age2: 17, relat2: "Child - includes young adult and grown-up", ecstat2: "Full-time - 30 hours or more") }.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
|
|
it "validate that persons aged under 16 must be a child relationship" do |
|
expect { CaseLog.create!(age2: 15, relat2: "Partner") }.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
|
|
it "validate that no more than 1 partner relationship exists" do |
|
expect { CaseLog.create!(relat2: "Partner", relat3: "Partner") }.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
end |
|
|
|
context "other tenancy type validation" do |
|
it "must be provided if tenancy type was given as other" do |
|
expect { |
|
CaseLog.create!(tenancy: "Other", |
|
tenancyother: nil) |
|
}.to raise_error(ActiveRecord::RecordInvalid) |
|
|
|
expect { |
|
CaseLog.create!(tenancy: "Other", |
|
tenancyother: "type") |
|
}.not_to raise_error |
|
end |
|
|
|
it "must not be provided if tenancy type is not other" do |
|
expect { |
|
CaseLog.create!(tenancy: "Secure (including flexible)", |
|
tenancyother: "the other reason provided") |
|
}.to raise_error(ActiveRecord::RecordInvalid) |
|
|
|
expect { |
|
CaseLog.create!(tenancy: "Secure (including flexible)", |
|
tenancyother: nil) |
|
}.not_to raise_error |
|
end |
|
end |
|
|
|
context "income ranges" do |
|
it "validates net income maximum" do |
|
expect { |
|
CaseLog.create!( |
|
ecstat1: "Full-time - 30 hours or more", |
|
earnings: 5000, |
|
incfreq: "Weekly", |
|
) |
|
}.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
|
|
it "validates net income minimum" do |
|
expect { |
|
CaseLog.create!( |
|
ecstat1: "Full-time - 30 hours or more", |
|
earnings: 1, |
|
incfreq: "Weekly", |
|
) |
|
}.to raise_error(ActiveRecord::RecordInvalid) |
|
end |
|
end |
|
end |
|
|
|
describe "status" do |
|
let!(:empty_case_log) { FactoryBot.create(:case_log) } |
|
let!(:in_progress_case_log) { FactoryBot.create(:case_log, :in_progress) } |
|
let!(:completed_case_log) { FactoryBot.create(:case_log, :completed) } |
|
|
|
it "is set to not started for an empty case log" do |
|
expect(empty_case_log.not_started?).to be(true) |
|
expect(empty_case_log.in_progress?).to be(false) |
|
expect(empty_case_log.completed?).to be(false) |
|
end |
|
|
|
it "is set to in progress for a started case log" do |
|
expect(in_progress_case_log.in_progress?).to be(true) |
|
expect(in_progress_case_log.not_started?).to be(false) |
|
expect(in_progress_case_log.completed?).to be(false) |
|
end |
|
|
|
it "is set to completed for a completed case log" do |
|
expect(completed_case_log.in_progress?).to be(false) |
|
expect(completed_case_log.not_started?).to be(false) |
|
expect(completed_case_log.completed?).to be(true) |
|
end |
|
end |
|
|
|
describe "weekly_net_income" do |
|
let(:net_income) { 5000 } |
|
let(:case_log) { FactoryBot.build(:case_log, earnings: net_income) } |
|
|
|
it "returns input income if frequency is already weekly" do |
|
case_log.incfreq = "Weekly" |
|
expect(case_log.weekly_net_income).to eq(net_income) |
|
end |
|
|
|
it "calculates the correct weekly income from monthly income" do |
|
case_log.incfreq = "Monthly" |
|
expect(case_log.weekly_net_income).to eq(1154) |
|
end |
|
|
|
it "calculates the correct weekly income from yearly income" do |
|
case_log.incfreq = "Yearly" |
|
expect(case_log.weekly_net_income).to eq(417) |
|
end |
|
end |
|
end
|
|
|