Browse Source

Cldc 629 household situation (#298)

* Update household situation section questions #1

* fix typo

* update prevten content

* update homeless and benefitcap questions

* Add location questions to houshold situation

* Update reasonable preference and letting allocation questions

* Update depends on for postcode and referral

* fix content for non renewal household situation questions

* fix test

* update inferred conditions

* remove eval
pull/299/head
kosiakkatrina 3 years ago committed by GitHub
parent
commit
d77b1c3c05
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 58
      app/models/case_log.rb
  2. 62
      app/models/constants/case_log.rb
  3. 9
      app/models/form/page.rb
  4. 2
      app/models/validations/local_authority_validations.rb
  5. 717
      config/forms/2021_2022.json
  6. 9
      db/migrate/20220209105333_fix_typo.rb
  7. 7
      db/migrate/20220209132411_add_previous_postcode_known.rb
  8. 7
      db/migrate/20220209155009_add_unknown_letting_allocation.rb
  9. 6
      db/schema.rb
  10. 22
      docs/api/DLUHC-CORE-Data.v1.json
  11. 6
      spec/factories/case_log.rb
  12. 2
      spec/features/form/check_answers_page_spec.rb
  13. 4
      spec/fixtures/complete_case_log.json
  14. 20
      spec/fixtures/exports/case_logs.xml
  15. 20
      spec/fixtures/forms/2021_2022.json
  16. 66
      spec/models/case_log_spec.rb
  17. 2
      spec/models/form_spec.rb
  18. 3
      spec/models/validations/local_authority_validations_spec.rb

58
app/models/case_log.rb

@ -38,8 +38,10 @@ class CaseLog < ApplicationRecord
validates_with CaseLogValidator
before_validation :process_postcode_changes!, if: :property_postcode_changed?
before_validation :process_previous_postcode_changes!, if: :previous_postcode_changed?
before_validation :reset_invalidated_dependent_fields!
before_validation :reset_location_fields!, unless: :postcode_known?
before_validation :reset_previous_location_fields!, unless: :previous_postcode_known?
before_validation :set_derived_fields!
before_save :update_status!
@ -49,7 +51,7 @@ class CaseLog < ApplicationRecord
scope :for_organisation, ->(org) { where(owning_organisation: org).or(where(managing_organisation: org)) }
enum status: STATUS
enum letting_in_sheltered_accomodation: SHELTERED_ACCOMODATION
enum letting_in_sheltered_accommodation: SHELTERED_ACCOMMODATION
enum ethnic: ETHNIC
enum national: NATIONAL, _suffix: true
enum ecstat1: ECSTAT, _suffix: true
@ -109,9 +111,9 @@ class CaseLog < ApplicationRecord
enum rp_medwel: POLAR, _suffix: true
enum rp_hardship: POLAR, _suffix: true
enum rp_dontknow: POLAR, _suffix: true
enum cbl: POLAR2, _suffix: true
enum chr: POLAR2, _suffix: true
enum cap: POLAR2, _suffix: true
enum cbl: POLAR, _suffix: true
enum chr: POLAR, _suffix: true
enum cap: POLAR, _suffix: true
enum wchair: POLAR2, _suffix: true
enum incfreq: INCFREQ, _suffix: true
enum benefits: BENEFITS, _suffix: true
@ -135,7 +137,9 @@ class CaseLog < ApplicationRecord
enum needstype: NEEDS_TYPE, _suffix: true
enum lettype: LET_TYPE, _suffix: true
enum postcode_known: POLAR, _suffix: true
enum previous_postcode_known: POLAR, _suffix: true
enum la_known: POLAR, _suffix: true
enum previous_la_known: POLAR, _suffix: true
enum net_income_known: NET_INCOME_KNOWN, _suffix: true
enum household_charge: POLAR, _suffix: true
enum is_carehome: POLAR, _suffix: true
@ -180,6 +184,10 @@ class CaseLog < ApplicationRecord
postcode_known == "Yes"
end
def previous_postcode_known?
previous_postcode_known == "Yes"
end
def weekly_net_income
return unless earnings && incfreq
@ -264,24 +272,40 @@ private
end
def process_postcode_changes!
return if property_postcode.blank?
process_postcode(property_postcode, "postcode_known", "is_la_inferred", "la", "postcode", "postcod2")
end
def process_previous_postcode_changes!
process_postcode(previous_postcode, "previous_postcode_known", "is_previous_la_inferred", "prevloc", "ppostc1", "ppostc2")
end
self.postcode_known = "Yes"
inferred_la = get_inferred_la(property_postcode)
self.is_la_inferred = inferred_la.present?
self.la = inferred_la if inferred_la.present?
self.postcode = UKPostcode.parse(property_postcode).outcode
self.postcod2 = UKPostcode.parse(property_postcode).incode
def process_postcode(postcode, postcode_known_key, la_inferred_key, la_key, outcode_key, incode_key)
return if postcode.blank?
self[postcode_known_key] = "Yes"
inferred_la = get_inferred_la(postcode)
self[la_inferred_key] = inferred_la.present?
self[la_key] = inferred_la if inferred_la.present?
self[outcode_key] = UKPostcode.parse(postcode).outcode
self[incode_key] = UKPostcode.parse(postcode).incode
end
def reset_location_fields!
if is_la_inferred == true
self.la = nil
reset_location(is_la_inferred, "la", "is_la_inferred", "property_postcode", "postcode", "postcod2")
end
def reset_previous_location_fields!
reset_location(is_previous_la_inferred, "prevloc", "is_previous_la_inferred", "previous_postcode", "ppostc1", "ppostc2")
end
def reset_location(is_inferred, la_key, is_inferred_key, postcode_key, incode_key, outcode_key)
if is_inferred
self[la_key] = nil
end
self.is_la_inferred = false
self.property_postcode = nil
self.postcode = nil
self.postcod2 = nil
self[is_inferred_key] = false
self[postcode_key] = nil
self[incode_key] = nil
self[outcode_key] = nil
end
def get_totelder

62
app/models/constants/case_log.rb

@ -2,7 +2,7 @@ module Constants::CaseLog
BENEFITCAP = {
"Yes - benefit cap" => 5,
"Yes - removal of the spare room subsidy" => 4,
"Yes - both the benefit cap and the removal of the spare room subsidy" => 6,
"Yes - both" => 6,
"No" => 2,
"Don’t know" => 3,
"Prefer not to say" => 100,
@ -57,8 +57,8 @@ module Constants::CaseLog
}.freeze
HOMELESS = {
"Yes - assessed as homeless by a local authority and owed a homelessness duty. Including if threatened with homelessness within 56 days" => 11,
"Yes - other homelessness" => 7,
"Assessed as homeless (or threatened with homelessness within 56 days) by a local authority and owed a homelessness duty" => 11,
"Other homeless - not found statutorily homeless but considered homeless by landlord" => 7,
"No" => 1,
}.freeze
@ -104,11 +104,11 @@ module Constants::CaseLog
PREVIOUS_TENANCY = {
"Owner occupation (private)" => 26,
"Owner occupation (low cost home ownership)" => 27,
"Owner occupation (low-cost home ownership)" => 27,
"Private sector tenancy" => 3,
"Tied housing or rented with job" => 4,
"Supported housing" => 6,
"Sheltered accomodation" => 8,
"Sheltered accommodation" => 8,
"Residential care home" => 9,
"Living with friends or family" => 28,
"Refuge" => 21,
@ -121,11 +121,11 @@ module Constants::CaseLog
"Home Office Asylum Support" => 24,
"Children’s home or foster care" => 13,
"Rough sleeping" => 19,
"Other" => 25,
"Fixed term Local Authority General Needs tenancy" => 30,
"Lifetime Local Authority General Needs tenancy" => 31,
"Fixed term PRP General Needs tenancy" => 32,
"Lifetime PRP General Needs tenancy" => 33,
"Any other accommodation" => 25,
"Fixed-term local authority general needs tenancy" => 30,
"Lifetime local authority general needs tenancy" => 31,
"Fixed-term private registered provider (PRP) general needs tenancy" => 32,
"Lifetime private registered provider (PRP) general needs tenancy" => 33,
}.freeze
RESERVIST = {
@ -219,10 +219,10 @@ module Constants::CaseLog
LATIME = {
"Just moved to local authority area" => 1,
"Less than 1 year" => 2,
"1 to 2 years" => 7,
"2 to 3 years" => 8,
"3 to 4 years" => 9,
"4 to 5 years" => 10,
"1 year but under 2 years" => 7,
"2 years but under 3 years" => 8,
"3 years but under 4 years" => 9,
"4 years but under 5 years" => 10,
"5 years or more" => 5,
"Don’t know" => 6,
}.freeze
@ -242,36 +242,36 @@ module Constants::CaseLog
"Left home country as a refugee" => 2,
"Loss of tied accommodation" => 4,
"Domestic abuse" => 7,
"(Non violent) relationship breakdown with partner" => 8,
"Relationship breakdown (non-violent) with partner" => 8,
"Asked to leave by family or friends" => 9,
"Racial harassment" => 10,
"Other problems with neighbours" => 11,
"Property unsuitable because of overcrowding" => 12,
"End of assured shorthold tenancy - no fault" => 40,
"End of assured shorthold tenancy - tenant’s fault" => 41,
"End of assured shorthold tenancy - eviction or tenant at fault" => 41,
"End of fixed term tenancy - no fault" => 42,
"End of fixed term tenancy - tenant’s fault" => 43,
"End of fixed term tenancy - eviction or tenant at fault" => 43,
"Repossession" => 34,
"Under occupation - offered incentive to downsize" => 29,
"Under occupation - no incentive" => 30,
"Property unsuitable because of ill health / disability" => 13,
"Property unsuitable because of ill health or disability" => 13,
"Property unsuitable because of poor condition" => 14,
"Couldn't afford fees attached to renewing the tenancy" => 35,
"Couldn't afford increase in rent" => 36,
"Couldn't afford rent or mortgage - welfare reforms" => 37,
"Couldn't afford rent or mortgage - employment" => 38,
"Couldn't afford rent or mortgage - other" => 39,
"To move nearer to family / friends / school" => 16,
"Couldnt afford fees attached to renewing the tenancy" => 35,
"Couldnt afford increase in rent" => 36,
"Couldnt afford rent or mortgage - welfare reforms" => 37,
"Couldnt afford rent or mortgage - employment" => 38,
"Couldnt afford rent or mortgage - other" => 39,
"To move nearer to family, friends or school" => 16,
"To move nearer to work" => 17,
"To move to accomodation with support" => 18,
"To move to independent accomodation" => 19,
"To move to accommodation with support" => 18,
"To move to independent accommodation" => 19,
"Hate crime" => 31,
"Death of household member in last settled accomodation" => 46,
"Death of household member in last settled accommodation" => 46,
"Discharged from prison" => 44,
"Discharged from long stay hospital or similar institution" => 45,
"Other" => 20,
"Don’t know" => 28,
"Prefer not to say" => 100,
"Tenant prefers not to say" => 100,
}.freeze
ENGLISH_LA = {
@ -1087,7 +1087,7 @@ module Constants::CaseLog
"completed" => 2,
}.freeze
SHELTERED_ACCOMODATION = {
SHELTERED_ACCOMMODATION = {
"Yes - sheltered housing" => 1,
"Yes - extra care housing" => 2,
"No" => 3,
@ -1119,9 +1119,9 @@ module Constants::CaseLog
NON_TEMP_ACCOMMODATION = ["Tied housing or rented with job",
"Supported housing",
"Sheltered accomodation",
"Sheltered accommodation",
"Home Office Asylum Support",
"Other"].freeze
"Any other accommodation"].freeze
OPTIONAL_FIELDS = %w[postcode_known la_known first_time_property_let_as_social_housing tenant_code propcode].freeze
end

9
app/models/form/page.rb

@ -44,12 +44,19 @@ private
}.compact
end
def send_chain(arr, case_log)
Array(arr).inject(case_log) { |o, a| o.public_send(*a) }
end
def depends_on_met(case_log)
return true unless depends_on
depends_on.any? do |conditions_set|
conditions_set.all? do |question, value|
value.nil? ? case_log[question] == value : !case_log[question].nil? && case_log[question] == value
parts = question.split(".")
case_log_value = send_chain(parts, case_log)
value.nil? ? case_log_value == value : !case_log_value.nil? && case_log_value == value
end
end
end

2
app/models/validations/local_authority_validations.rb

@ -4,7 +4,7 @@ module Validations::LocalAuthorityValidations
def validate_previous_accommodation_postcode(record)
postcode = record.previous_postcode
if postcode.present? && !postcode.match(POSTCODE_REGEXP)
if record.previous_postcode_known == "Yes" && (postcode.blank? || !postcode.match(POSTCODE_REGEXP))
error_message = I18n.t("validations.postcode")
record.errors.add :previous_postcode, error_message
end

717
config/forms/2021_2022.json

File diff suppressed because it is too large Load Diff

9
db/migrate/20220209105333_fix_typo.rb

@ -0,0 +1,9 @@
class FixTypo < ActiveRecord::Migration[7.0]
def up
rename_column :case_logs, :letting_in_sheltered_accomodation, :letting_in_sheltered_accommodation
end
def down
rename_column :case_logs, :letting_in_sheltered_accommodation, :letting_in_sheltered_accomodation
end
end

7
db/migrate/20220209132411_add_previous_postcode_known.rb

@ -0,0 +1,7 @@
class AddPreviousPostcodeKnown < ActiveRecord::Migration[7.0]
change_table :case_logs, bulk: true do |t|
t.column :previous_postcode_known, :integer
t.column :previous_la_known, :integer
t.column :is_previous_la_inferred, :boolean
end
end

7
db/migrate/20220209155009_add_unknown_letting_allocation.rb

@ -0,0 +1,7 @@
class AddUnknownLettingAllocation < ActiveRecord::Migration[7.0]
def change
change_table :case_logs, bulk: true do |t|
t.column :letting_allocation_unknown, :boolean
end
end
end

6
db/schema.rb

@ -176,7 +176,7 @@ ActiveRecord::Schema[7.0].define(version: 202202071123100) do
t.string "has_benefits"
t.integer "nocharge"
t.integer "is_carehome"
t.integer "letting_in_sheltered_accomodation"
t.integer "letting_in_sheltered_accommodation"
t.integer "household_charge"
t.integer "referral"
t.decimal "brent", precision: 10, scale: 2
@ -187,6 +187,10 @@ ActiveRecord::Schema[7.0].define(version: 202202071123100) do
t.decimal "tshortfall", precision: 10, scale: 2
t.decimal "chcharge", precision: 10, scale: 2
t.integer "declaration"
t.integer "previous_postcode_known"
t.integer "previous_la_known"
t.boolean "is_previous_la_inferred"
t.boolean "letting_allocation_unknown"
t.index ["managing_organisation_id"], name: "index_case_logs_on_managing_organisation_id"
t.index ["owning_organisation_id"], name: "index_case_logs_on_owning_organisation_id"
end

22
docs/api/DLUHC-CORE-Data.v1.json

@ -331,7 +331,7 @@
"supcharg": 35,
"tcharge": 325,
"tshortfall": "Yes",
"layear": "1 to 2 years",
"layear": "1 year but under 2 years",
"lawaitlist": "Less than 1 year",
"prevloc": "Ashford",
"property_postcode": "SE2 6RT",
@ -733,36 +733,36 @@
"Left home country as a refugee",
"Loss of tied accommodation",
"Domestic abuse",
"(Non violent) relationship breakdown with partner",
"Relationship breakdown (non-violent) with partner",
"Asked to leave by family or friends",
"Racial harassment",
"Other problems with neighbours",
"Property unsuitable because of overcrowding",
"End of assured shorthold tenancy - no fault",
"End of assured shorthold tenancy - tenant’s fault",
"End of assured shorthold tenancy - eviction or tenant at fault",
"End of fixed term tenancy - no fault",
"End of fixed term tenancy - tenant’s fault",
"End of fixed term tenancy - eviction or tenant at fault",
"Repossession",
"Under occupation - offered incentive to downsize",
"Under occupation - no incentive",
"Property unsuitable because of ill health / disability",
"Property unsuitable because of ill health or disability",
"Property unsuitable because of poor condition",
"Couldn’t afford fees attached to renewing the tenancy",
"Couldn’t afford increase in rent",
"Couldn’t afford rent or mortgage - welfare reforms",
"Couldn’t afford rent or mortgage - employment",
"Couldn’t afford rent or mortgage - other",
"To move nearer to family / friends / school",
"To move nearer to family, friends or school",
"To move nearer to work",
"To move to accomodation with support",
"To move to independent accomodation",
"To move to accommodation with support",
"To move to independent accommodation",
"Hate crime",
"Death of household member in last settled accomodation",
"Death of household member in last settled accommodation",
"Discharged from prison",
"Discharged from long stay hospital or similar institution",
"Other",
"Don’t know",
"Prefer not to say"
"Tenant prefers not to say"
]
},
"underoccupation_benefitcap": {
@ -771,7 +771,7 @@
"enum": [
"Yes - benefit cap",
"Yes - removal of the spare room subsidy",
"Yes - both the benefit cap and the removal of the spare room subsidy",
"Yes - both",
"No",
"Don’t know",
"Prefer not to say"

6
spec/factories/case_log.rb

@ -47,7 +47,7 @@ FactoryBot.define do
age2 { 32 }
sex2 { "Male" }
ecstat2 { "Not seeking work" }
homeless { "Yes - other homelessness" }
homeless { "Other homeless - not found statutorily homeless but considered homeless by landlord" }
underoccupation_benefitcap { "No" }
leftreg { "No - they left up to 5 years ago" }
reservist { "No" }
@ -75,7 +75,7 @@ FactoryBot.define do
pscharge { 40 }
supcharg { 35 }
tcharge { 325 }
layear { "1 to 2 years" }
layear { "1 year but under 2 years" }
lawaitlist { "Less than 1 year" }
property_postcode { "NW1 5TY" }
reasonpref { "Yes" }
@ -144,7 +144,7 @@ FactoryBot.define do
has_benefits { "Yes" }
is_carehome { "No" }
chcharge { 7 }
letting_in_sheltered_accomodation { "No" }
letting_in_sheltered_accommodation { "No" }
la_known { "Yes" }
declaration { "Yes" }
end

2
spec/features/form/check_answers_page_spec.rb

@ -179,7 +179,7 @@ RSpec.describe "Form Check Answers Page" do
managing_organisation: user.organisation,
tenant_code: nil,
age1: nil,
layear: "1 to 2 years",
layear: "1 year but under 2 years",
lawaitlist: "Less than 1 year",
property_postcode: "NW1 5TY",
reason: "Permanently decanted from another property owned by this landlord",

4
spec/fixtures/complete_case_log.json vendored

@ -84,7 +84,7 @@
"supcharg": 35,
"tcharge": 325,
"outstanding_amount": "Yes",
"layear": "1 to 2 years",
"layear": "1 year but under 2 years",
"lawaitlist": "Less than 1 year",
"prevloc": "Ashford",
"previous_postcode": "SE2 6RT",
@ -143,7 +143,7 @@
"household_charge": "Yes",
"is_carehome": "Yes",
"chcharge": "6",
"letting_in_sheltered_accomodation": "No",
"letting_in_sheltered_accommodation": "No",
"declaration": "Yes"
}
}

20
spec/fixtures/exports/case_logs.xml vendored

@ -41,7 +41,7 @@
<age8/>
<sex8/>
<ecstat8/>
<homeless>Yes - other homelessness</homeless>
<homeless>Other homeless - not found statutorily homeless but considered homeless by landlord</homeless>
<underoccupation_benefitcap>No</underoccupation_benefitcap>
<leftreg>No - they left up to 5 years ago</leftreg>
<reservist>No</reservist>
@ -62,7 +62,7 @@
<incfreq>Weekly</incfreq>
<benefits>Some</benefits>
<period>Every 2 weeks</period>
<layear>1 to 2 years</layear>
<layear>1 year but under 2 years</layear>
<lawaitlist>Less than 1 year</lawaitlist>
<property_postcode>NW1 5TY</property_postcode>
<reasonpref>Yes</reasonpref>
@ -144,7 +144,7 @@
<has_benefits>Yes</has_benefits>
<nocharge>No</nocharge>
<is_carehome>No</is_carehome>
<letting_in_sheltered_accomodation>No</letting_in_sheltered_accomodation>
<letting_in_sheltered_accommodation>No</letting_in_sheltered_accommodation>
<household_charge>Yes</household_charge>
<referral/>
<brent>200.0</brent>
@ -155,6 +155,10 @@
<tshortfall>12.0</tshortfall>
<chcharge>7.0</chcharge>
<declaration>Yes</declaration>
<previous_postcode_known>Yes</previous_postcode_known>
<previous_la_known/>
<is_previous_la_inferred>false</is_previous_la_inferred>
<letting_allocation_unknown/>
</form>
<form>
<id>{id_2}</id>
@ -197,7 +201,7 @@
<age8/>
<sex8/>
<ecstat8/>
<homeless>Yes - other homelessness</homeless>
<homeless>Other homeless - not found statutorily homeless but considered homeless by landlord</homeless>
<underoccupation_benefitcap>No</underoccupation_benefitcap>
<leftreg>No - they left up to 5 years ago</leftreg>
<reservist>No</reservist>
@ -218,7 +222,7 @@
<incfreq>Weekly</incfreq>
<benefits>Some</benefits>
<period>Every 2 weeks</period>
<layear>1 to 2 years</layear>
<layear>1 year but under 2 years</layear>
<lawaitlist>Less than 1 year</lawaitlist>
<property_postcode>NW1 5TY</property_postcode>
<reasonpref>Yes</reasonpref>
@ -300,7 +304,7 @@
<has_benefits>Yes</has_benefits>
<nocharge>No</nocharge>
<is_carehome>No</is_carehome>
<letting_in_sheltered_accomodation>No</letting_in_sheltered_accomodation>
<letting_in_sheltered_accommodation>No</letting_in_sheltered_accommodation>
<household_charge>Yes</household_charge>
<referral/>
<brent>200.0</brent>
@ -311,5 +315,9 @@
<tshortfall>12.0</tshortfall>
<chcharge>7.0</chcharge>
<declaration>Yes</declaration>
<previous_postcode_known>Yes</previous_postcode_known>
<previous_la_known/>
<is_previous_la_inferred>false</is_previous_la_inferred>
<letting_allocation_unknown/>
</form>
</forms>

20
spec/fixtures/forms/2021_2022.json vendored

@ -688,16 +688,16 @@
"value": "Less than 1 year"
},
"2": {
"value": "1 to 2 years"
"value": "1 year but under 2 years"
},
"3": {
"value": "2 to 3 years"
"value": "2 years but under 3 years"
},
"4": {
"value": "3 to 4 years"
"value": "3 years but under 4 years"
},
"5": {
"value": "4 to 5 years"
"value": "4 years but under 5 years"
},
"6": {
"value": "5 years or more"
@ -726,16 +726,16 @@
"value": "Less than 1 year"
},
"2": {
"value": "1 to 2 years"
"value": "1 year but under 2 years"
},
"3": {
"value": "2 to 3 years"
"value": "2 years but under 3 years"
},
"4": {
"value": "3 to 4 years"
"value": "3 years but under 4 years"
},
"5": {
"value": "4 to 5 years"
"value": "4 years but under 5 years"
},
"6": {
"value": "5 years or more"
@ -753,7 +753,7 @@
"property_postcode": {
"questions": {
"property_postcode": {
"check_answer_label": "Postcode of previous accomodation if the household has moved from settled accommodation",
"check_answer_label": "Postcode of previous accommodation if the household has moved from settled accommodation",
"header": "Postcode for the previous accommodation",
"hint_text": "If the household has moved from settled accommodation immediately prior to being re-housed",
"type": "text",
@ -761,7 +761,7 @@
"conditional_for": { "fake_key": "fake_condition" }
},
"previous_postcode": {
"check_answer_label": "Postcode of previous accomodation if the household has moved from settled accommodation",
"check_answer_label": "Postcode of previous accommodation if the household has moved from settled accommodation",
"header": "Postcode for the previous accommodation",
"hint_text": "If the household has moved from settled accommodation immediately prior to being re-housed",
"type": "text",

66
spec/models/case_log_spec.rb

@ -781,15 +781,15 @@ RSpec.describe CaseLog do
}.to raise_error(ActiveRecord::RecordInvalid)
end
it "cannot be temp accomodation if previous tenancy was non temp" do
it "cannot be temp accommodation if previous tenancy was non temp" do
check_rsnvac_validation("Tied housing or rented with job")
check_rsnvac_validation("Supported housing")
check_rsnvac_validation("Sheltered accomodation")
check_rsnvac_validation("Sheltered accommodation")
check_rsnvac_validation("Home Office Asylum Support")
check_rsnvac_validation("Other")
check_rsnvac_validation("Any other accommodation")
end
it "cannot be temp accomodation if source of letting referral " do
it "cannot be temp accommodation if source of letting referral " do
check_rsnvac_referral_validation("Re-located through official housing mobility scheme")
check_rsnvac_referral_validation("Other social landlord")
check_rsnvac_referral_validation("Police, probation or prison")
@ -987,6 +987,64 @@ RSpec.describe CaseLog do
end
end
context "when saving previous address" do
before do
stub_request(:get, /api.postcodes.io/)
.to_return(status: 200, body: "{\"status\":200,\"result\":{\"admin_district\":\"Manchester\"}}", headers: {})
end
let!(:address_case_log) do
described_class.create({
managing_organisation: organisation,
owning_organisation: organisation,
previous_postcode_known: "Yes",
previous_postcode: "M1 1AE",
})
end
it "correctly infers prevloc" do
record_from_db = ActiveRecord::Base.connection.execute("select prevloc from case_logs where id=#{address_case_log.id}").to_a[0]
expect(address_case_log.prevloc).to eq("Manchester")
expect(record_from_db["prevloc"]).to eq("E08000003")
end
it "errors if the previous postcode is emptied" do
expect { address_case_log.update!({ previous_postcode: "" }) }
.to raise_error(ActiveRecord::RecordInvalid, /#{I18n.t("validations.postcode")}/)
end
it "errors if the previous postcode is not valid" do
expect { address_case_log.update!({ previous_postcode: "invalid_postcode" }) }
.to raise_error(ActiveRecord::RecordInvalid, /#{I18n.t("validations.postcode")}/)
end
it "correctly resets all fields if previous postcode not known" do
address_case_log.update!({ previous_postcode_known: "No" })
record_from_db = ActiveRecord::Base.connection.execute("select prevloc, previous_postcode from case_logs where id=#{address_case_log.id}").to_a[0]
expect(record_from_db["previous_postcode"]).to eq(nil)
expect(address_case_log.prevloc).to eq(nil)
expect(record_from_db["prevloc"]).to eq(nil)
end
it "changes the prevloc if previous postcode changes from not known to known and provided" do
address_case_log.update!({ previous_postcode_known: "No" })
address_case_log.update!({ prevloc: "Westminster" })
record_from_db = ActiveRecord::Base.connection.execute("select prevloc, previous_postcode from case_logs where id=#{address_case_log.id}").to_a[0]
expect(record_from_db["previous_postcode"]).to eq(nil)
expect(address_case_log.prevloc).to eq("Westminster")
expect(record_from_db["prevloc"]).to eq("E09000033")
address_case_log.update!({ previous_postcode_known: "Yes", previous_postcode: "M1 1AD" })
record_from_db = ActiveRecord::Base.connection.execute("select prevloc, previous_postcode from case_logs where id=#{address_case_log.id}").to_a[0]
expect(record_from_db["previous_postcode"]).to eq("M1 1AD")
expect(address_case_log.prevloc).to eq("Manchester")
expect(record_from_db["prevloc"]).to eq("E08000003")
end
end
context "when saving rent and charges" do
let!(:case_log) do
described_class.create({

2
spec/models/form_spec.rb

@ -77,7 +77,7 @@ RSpec.describe Form, type: :model do
end
def answer_local_authority(case_log)
case_log.layear = "1 to 2 years"
case_log.layear = "1 year but under 2 years"
case_log.lawaitlist = "Less than 1 year"
case_log.property_postcode = "NW1 5TY"
case_log.reason = "Permanently decanted from another property owned by this landlord"

3
spec/models/validations/local_authority_validations_spec.rb

@ -14,18 +14,21 @@ RSpec.describe Validations::LocalAuthorityValidations do
end
it "does not add an error if the record previous_postcode is valid (uppercase space)" do
record.previous_postcode_known = "Yes"
record.previous_postcode = "M1 1AE"
local_auth_validator.validate_previous_accommodation_postcode(record)
expect(record.errors).to be_empty
end
it "does not add an error if the record previous_postcode is valid (lowercase no space)" do
record.previous_postcode_known = "Yes"
record.previous_postcode = "m11ae"
local_auth_validator.validate_previous_accommodation_postcode(record)
expect(record.errors).to be_empty
end
it "does add an error when the postcode is invalid" do
record.previous_postcode_known = "Yes"
record.previous_postcode = "invalid"
local_auth_validator.validate_previous_accommodation_postcode(record)
expect(record.errors).not_to be_empty

Loading…
Cancel
Save