From abf9aa07a94de75b50be6c47870be9f069ace4cc Mon Sep 17 00:00:00 2001 From: Jack <113976590+bibblobcode@users.noreply.github.com> Date: Wed, 30 Aug 2023 16:02:27 +0100 Subject: [PATCH] CLDC-2665 Switch lettings ppcodenk (#1854) * Switch lettings ppcodenk * Address Kat's comment * separate process postcode methods * tests * Update row parsers * Update conditionals * Add rake task to update ppcodenk * Bring back value_is_no? --------- Co-authored-by: Kat --- .../form/lettings/questions/ppcodenk.rb | 7 +- .../form/lettings/questions/ppostcode_full.rb | 7 +- app/models/form/question.rb | 23 +++---- app/models/lettings_log.rb | 24 ++++--- app/models/log.rb | 5 -- app/models/sales_log.rb | 26 ++++--- .../lettings/year2022/row_parser.rb | 4 +- .../lettings/year2023/row_parser.rb | 4 +- .../imports/lettings_logs_import_service.rb | 4 +- config/forms/2021_2022.json | 8 +-- config/forms/2022_2023.json | 8 +-- lib/tasks/correct_ppcodenk_values.rake | 6 ++ spec/factories/lettings_log.rb | 2 +- spec/fixtures/exports/general_needs_log.xml | 2 +- .../exports/general_needs_log_23_24.xml | 2 +- .../exports/supported_housing_logs.xml | 2 +- .../files/lettings_log_csv_export_codes.csv | 2 +- ...tings_log_csv_export_non_support_codes.csv | 2 +- .../lib/tasks/correct_ppcodenk_values_spec.rb | 67 +++++++++++++++++++ spec/models/form/question_spec.rb | 50 ++------------ spec/models/lettings_log_spec.rb | 8 +-- .../local_authority_validations_spec.rb | 40 +++++------ .../bulk_upload/lettings/log_creator_spec.rb | 4 +- .../lettings/year2022/row_parser_spec.rb | 2 +- .../lettings/year2023/row_parser_spec.rb | 2 +- spec/services/bulk_upload/processor_spec.rb | 4 +- 26 files changed, 182 insertions(+), 133 deletions(-) create mode 100644 lib/tasks/correct_ppcodenk_values.rake create mode 100644 spec/lib/tasks/correct_ppcodenk_values_spec.rb diff --git a/app/models/form/lettings/questions/ppcodenk.rb b/app/models/form/lettings/questions/ppcodenk.rb index 25557a166..c8dbd24d0 100644 --- a/app/models/form/lettings/questions/ppcodenk.rb +++ b/app/models/form/lettings/questions/ppcodenk.rb @@ -8,11 +8,14 @@ class Form::Lettings::Questions::Ppcodenk < ::Form::Question @check_answers_card_number = 0 @hint_text = "This is also known as the household’s ‘last settled home’." @answer_options = ANSWER_OPTIONS - @conditional_for = { "ppostcode_full" => [1] } + @conditional_for = { "ppostcode_full" => [0] } @hidden_in_check_answers = { "depends_on" => [{ "ppcodenk" => 0 }, { "ppcodenk" => 1 }] } @question_number = 80 @disable_clearing_if_not_routed_or_dynamic_answer_options = true end - ANSWER_OPTIONS = { "1" => { "value" => "Yes" }, "0" => { "value" => "No" } }.freeze + ANSWER_OPTIONS = { + "0" => { "value" => "Yes" }, + "1" => { "value" => "No" }, + }.freeze end diff --git a/app/models/form/lettings/questions/ppostcode_full.rb b/app/models/form/lettings/questions/ppostcode_full.rb index 86b4c7b31..edcbaf30a 100644 --- a/app/models/form/lettings/questions/ppostcode_full.rb +++ b/app/models/form/lettings/questions/ppostcode_full.rb @@ -6,7 +6,12 @@ class Form::Lettings::Questions::PpostcodeFull < ::Form::Question @header = "Postcode for the previous accommodation" @type = "text" @width = 5 - @inferred_check_answers_value = [{ "condition" => { "ppcodenk" => 0 }, "value" => "Not known" }] + @inferred_check_answers_value = [{ + "condition" => { + "ppcodenk" => 1, + }, + "value" => "Not known", + }] @check_answers_card_number = 0 @hint_text = "" @inferred_answers = { "prevloc" => { "is_previous_la_inferred" => true } } diff --git a/app/models/form/question.rb b/app/models/form/question.rb index c27dca9c2..9f0a8aac9 100644 --- a/app/models/form/question.rb +++ b/app/models/form/question.rb @@ -116,20 +116,20 @@ class Form::Question if is_derived_or_has_inferred_check_answers_value?(log) "Change" elsif type == "checkbox" - answer_options.keys.any? { |key| value_is_yes?(log[key], log.lettings?) } ? "Change" : "Answer" + answer_options.keys.any? { |key| value_is_yes?(log[key]) } ? "Change" : "Answer" else log[id].blank? ? "Answer" : "Change" end end def unanswered?(log) - return answer_options.keys.none? { |key| value_is_yes?(log[key], log.lettings?) } if type == "checkbox" + return answer_options.keys.none? { |key| value_is_yes?(log[key]) } if type == "checkbox" log[id].blank? end def completed?(log) - return answer_options.keys.any? { |key| value_is_yes?(log[key], log.lettings?) } if type == "checkbox" + return answer_options.keys.any? { |key| value_is_yes?(log[key]) } if type == "checkbox" log[id].present? || !log.respond_to?(id.to_sym) || has_inferred_display_value?(log) end @@ -166,18 +166,18 @@ class Form::Question label || value.to_s end - def value_is_yes?(value, is_lettings) + def value_is_yes?(value) case type when "checkbox" value == 1 when "radio" - is_lettings ? RADIO_YES_VALUE_LETTINGS[id.to_sym]&.include?(value) : RADIO_YES_VALUE_SALES[id.to_sym]&.include?(value) + RADIO_YES_VALUE[id.to_sym]&.include?(value) else %w[yes].include?(value.downcase) end end - def value_is_no?(value, is_lettings) + def value_is_no?(value) case type when "checkbox" value && value.zero? @@ -272,9 +272,9 @@ private def checkbox_answer_label(log) answer = [] - return "Yes" if id == "declaration" && value_is_yes?(log["declaration"], log.lettings?) + return "Yes" if id == "declaration" && value_is_yes?(log["declaration"]) - answer_options.each { |key, options| value_is_yes?(log[key], log.lettings?) ? answer << options["value"] : nil } + answer_options.each { |key, options| value_is_yes?(log[key]) ? answer << options["value"] : nil } answer.join(", ") end @@ -338,6 +338,7 @@ private is_carehome: [1], hbrentshortfall: [1], net_income_value_check: [0], + ppcodenk: [0], }.freeze RADIO_NO_VALUE = { @@ -362,13 +363,9 @@ private is_carehome: [0], hbrentshortfall: [2], net_income_value_check: [1], + ppcodenk: [1], }.freeze - RADIO_YES_VALUE_LETTINGS = RADIO_YES_VALUE.merge({ ppcodenk: [1] }) - RADIO_YES_VALUE_SALES = RADIO_YES_VALUE.merge({ ppcodenk: [0] }) - RADIO_NO_VALUE_LETTINGS = RADIO_NO_VALUE.merge({ ppcodenk: [0] }) - RADIO_NO_VALUE_SALES = RADIO_NO_VALUE.merge({ ppcodenk: [1] }) - RADIO_DONT_KNOW_VALUE = { sheltered: [3], underoccupation_benefitcap: [3], diff --git a/app/models/lettings_log.rb b/app/models/lettings_log.rb index 9ab6329d2..6d15699cc 100644 --- a/app/models/lettings_log.rb +++ b/app/models/lettings_log.rb @@ -260,8 +260,8 @@ class LettingsLog < Log end def previous_postcode_known? - # 1: Yes - ppcodenk == 1 + # 0: Yes + ppcodenk&.zero? end def previous_la_known? @@ -628,16 +628,22 @@ private def process_postcode_changes! self.postcode_full = upcase_and_remove_whitespace(postcode_full) - process_postcode(postcode_full, "postcode_known", "is_la_inferred", "la") + return if postcode_full.blank? + + self.postcode_known = 1 + inferred_la = get_inferred_la(postcode_full) + self.is_la_inferred = inferred_la.present? + self.la = inferred_la if inferred_la.present? end - def process_postcode(postcode, postcode_known_key, la_inferred_key, la_key) - return if postcode.blank? + def process_previous_postcode_changes! + self.ppostcode_full = upcase_and_remove_whitespace(ppostcode_full) + return if ppostcode_full.blank? - self[postcode_known_key] = 1 - inferred_la = get_inferred_la(postcode) - self[la_inferred_key] = inferred_la.present? - self[la_key] = inferred_la if inferred_la.present? + self.ppcodenk = 0 + inferred_la = get_inferred_la(ppostcode_full) + self.is_previous_la_inferred = inferred_la.present? + self.prevloc = inferred_la if inferred_la.present? end def get_has_benefits diff --git a/app/models/log.rb b/app/models/log.rb index 024470b21..849927cf1 100644 --- a/app/models/log.rb +++ b/app/models/log.rb @@ -232,11 +232,6 @@ private PIO = PostcodeService.new - def process_previous_postcode_changes! - self.ppostcode_full = upcase_and_remove_whitespace(ppostcode_full) - process_postcode(ppostcode_full, "ppcodenk", "is_previous_la_inferred", "prevloc") - end - LA_CHANGES = { "E07000027" => "E06000064", # Barrow-in-Furness => Westmorland and Furness "E07000030" => "E06000064", # Eden => Westmorland and Furness diff --git a/app/models/sales_log.rb b/app/models/sales_log.rb index 283485d11..f144336bf 100644 --- a/app/models/sales_log.rb +++ b/app/models/sales_log.rb @@ -278,15 +278,6 @@ class SalesLog < Log mortgage + deposit end - def process_postcode(postcode, postcode_known_key, la_inferred_key, la_key) - return if postcode.blank? - - self[postcode_known_key] = 0 - inferred_la = get_inferred_la(postcode) - self[la_inferred_key] = inferred_la.present? - self[la_key] = inferred_la if inferred_la.present? - end - def outright_sale? ownershipsch == 3 end @@ -305,7 +296,22 @@ class SalesLog < Log def process_postcode_changes! self.postcode_full = upcase_and_remove_whitespace(postcode_full) - process_postcode(postcode_full, "pcodenk", "is_la_inferred", "la") + return if postcode_full.blank? + + self.pcodenk = 0 + inferred_la = get_inferred_la(postcode_full) + self.is_la_inferred = inferred_la.present? + self.la = inferred_la if inferred_la.present? + end + + def process_previous_postcode_changes! + self.ppostcode_full = upcase_and_remove_whitespace(ppostcode_full) + return if ppostcode_full.blank? + + self.ppcodenk = 0 + inferred_la = get_inferred_la(ppostcode_full) + self.is_previous_la_inferred = inferred_la.present? + self.prevloc = inferred_la if inferred_la.present? end def reset_created_by! diff --git a/app/services/bulk_upload/lettings/year2022/row_parser.rb b/app/services/bulk_upload/lettings/year2022/row_parser.rb index 9bef9312f..a5c598d5a 100644 --- a/app/services/bulk_upload/lettings/year2022/row_parser.rb +++ b/app/services/bulk_upload/lettings/year2022/row_parser.rb @@ -1285,9 +1285,9 @@ private def ppcodenk case field_65 when 1 - 1 - when 2 0 + when 2 + 1 end end diff --git a/app/services/bulk_upload/lettings/year2023/row_parser.rb b/app/services/bulk_upload/lettings/year2023/row_parser.rb index 8d023792c..4abfdac17 100644 --- a/app/services/bulk_upload/lettings/year2023/row_parser.rb +++ b/app/services/bulk_upload/lettings/year2023/row_parser.rb @@ -1424,9 +1424,9 @@ private def ppcodenk case field_106 when 1 - 1 - when 2 0 + when 2 + 1 end end diff --git a/app/services/imports/lettings_logs_import_service.rb b/app/services/imports/lettings_logs_import_service.rb index 339dc5ca9..a1c957b85 100644 --- a/app/services/imports/lettings_logs_import_service.rb +++ b/app/services/imports/lettings_logs_import_service.rb @@ -465,11 +465,11 @@ module Imports def previous_postcode_known(xml_doc, previous_postcode, prevloc) previous_postcode_known = string_or_nil(xml_doc, "Q12bnot") if previous_postcode_known == "Temporary_or_Unknown" || (previous_postcode.nil? && prevloc.present?) - 0 # not known + 1 # not known elsif previous_postcode.nil? nil else - 1 # known + 0 # known end end diff --git a/config/forms/2021_2022.json b/config/forms/2021_2022.json index 75660731d..086f201c2 100644 --- a/config/forms/2021_2022.json +++ b/config/forms/2021_2022.json @@ -6488,15 +6488,15 @@ "disable_clearing_if_not_routed_or_dynamic_answer_options": true, "answer_options": { "1": { - "value": "Yes" + "value": "No" }, "0": { - "value": "No" + "value": "Yes" } }, "conditional_for": { "ppostcode_full": [ - 1 + 0 ] }, "hidden_in_check_answers": { @@ -6524,7 +6524,7 @@ }, "inferred_check_answers_value": [{ "condition": { - "ppcodenk": 0 + "ppcodenk": 1 }, "value": "Not known" }] diff --git a/config/forms/2022_2023.json b/config/forms/2022_2023.json index 8d5f674f3..f8eb4d4c5 100644 --- a/config/forms/2022_2023.json +++ b/config/forms/2022_2023.json @@ -6388,16 +6388,16 @@ "type": "radio", "disable_clearing_if_not_routed_or_dynamic_answer_options": true, "answer_options": { - "1": { + "0": { "value": "Yes" }, - "0": { + "1": { "value": "No" } }, "conditional_for": { "ppostcode_full": [ - 1 + 0 ] }, "hidden_in_check_answers": { @@ -6425,7 +6425,7 @@ }, "inferred_check_answers_value": [{ "condition": { - "ppcodenk": 0 + "ppcodenk": 1 }, "value": "Not known" }] diff --git a/lib/tasks/correct_ppcodenk_values.rake b/lib/tasks/correct_ppcodenk_values.rake new file mode 100644 index 000000000..86c678fc0 --- /dev/null +++ b/lib/tasks/correct_ppcodenk_values.rake @@ -0,0 +1,6 @@ +desc "Alter ppcodenk values for non imported lettings logs in the database" +task correct_ppcodenk_values: :environment do + LettingsLog.where.not(ppcodenk: nil).find_each do |log| + log.update_columns(ppcodenk: log.ppcodenk == 1 ? 0 : 1) + end +end diff --git a/spec/factories/lettings_log.rb b/spec/factories/lettings_log.rb index 59eb48da2..6cce1dfea 100644 --- a/spec/factories/lettings_log.rb +++ b/spec/factories/lettings_log.rb @@ -166,7 +166,7 @@ FactoryBot.define do joint { 3 } address_line1 { "fake address" } town_or_city { "London" } - ppcodenk { 0 } + ppcodenk { 1 } tshortfall_known { 1 } end trait :export do diff --git a/spec/fixtures/exports/general_needs_log.xml b/spec/fixtures/exports/general_needs_log.xml index f996d5097..27a995304 100644 --- a/spec/fixtures/exports/general_needs_log.xml +++ b/spec/fixtures/exports/general_needs_log.xml @@ -109,7 +109,7 @@ 325.0 12.0 - 1 + 0 1 0 100.0 diff --git a/spec/fixtures/exports/general_needs_log_23_24.xml b/spec/fixtures/exports/general_needs_log_23_24.xml index 796c0c72e..aa3ca758a 100644 --- a/spec/fixtures/exports/general_needs_log_23_24.xml +++ b/spec/fixtures/exports/general_needs_log_23_24.xml @@ -109,7 +109,7 @@ 325.0 12.0 - 1 + 0 1 0 100.0 diff --git a/spec/fixtures/exports/supported_housing_logs.xml b/spec/fixtures/exports/supported_housing_logs.xml index 032590622..73595e76f 100644 --- a/spec/fixtures/exports/supported_housing_logs.xml +++ b/spec/fixtures/exports/supported_housing_logs.xml @@ -108,7 +108,7 @@ 325.0 12.0 - 1 + 0 1 0 100.0 diff --git a/spec/fixtures/files/lettings_log_csv_export_codes.csv b/spec/fixtures/files/lettings_log_csv_export_codes.csv index e4a1c53e3..2fc1624af 100644 --- a/spec/fixtures/files/lettings_log_csv_export_codes.csv +++ b/spec/fixtures/files/lettings_log_csv_export_codes.csv @@ -1,2 +1,2 @@ id,status,created_by,is_dpo,created_at,updated_by,updated_at,creation_method,old_id,old_form_id,collection_start_year,owning_organisation_name,managing_organisation_name,needstype,lettype,renewal,startdate,renttype,rent_type_detail,irproduct,irproduct_other,lar,tenancycode,propcode,uprn_known,uprn,uprn_confirmed,address_line1,address_line2,town_or_city,county,postcode_full,is_la_inferred,la_label,la,first_time_property_let_as_social_housing,unitletas,rsnvac,newprop,offered,unittype_gn,builtype,wchair,beds,voiddate,vacdays,void_date_value_check,majorrepairs,mrcdate,major_repairs_date_value_check,joint,startertenancy,tenancy,tenancyother,tenancylength,sheltered,declaration,hhmemb,pregnancy_value_check,age1_known,refused,hhtype,totchild,totelder,totadult,age1,retirement_value_check,sex1,ethnic_group,ethnic,national,ecstat1,details_known_2,relat2,age2_known,age2,sex2,ecstat2,details_known_3,relat3,age3_known,age3,sex3,ecstat3,details_known_4,relat4,age4_known,age4,sex4,ecstat4,details_known_5,relat5,age5_known,age5,sex5,ecstat5,details_known_6,relat6,age6_known,age6,sex6,ecstat6,details_known_7,relat7,age7_known,age7,sex7,ecstat7,details_known_8,relat8,age8_known,age8,sex8,ecstat8,armedforces,leftreg,reservist,preg_occ,housingneeds,housingneeds_type,housingneeds_a,housingneeds_b,housingneeds_c,housingneeds_f,housingneeds_g,housingneeds_h,housingneeds_other,illness,illness_type_4,illness_type_5,illness_type_2,illness_type_6,illness_type_7,illness_type_3,illness_type_9,illness_type_8,illness_type_1,illness_type_10,layear,waityear,reason,reasonother,prevten,new_old,homeless,ppcodenk,ppostcode_full,previous_la_known,is_previous_la_inferred,prevloc_label,prevloc,reasonpref,rp_homeless,rp_insan_unsat,rp_medwel,rp_hardship,rp_dontknow,cbl,cap,chr,letting_allocation_unknown,referral,net_income_known,incref,earnings,incfreq,net_income_value_check,hb,has_benefits,benefits,household_charge,nocharge,period,is_carehome,chcharge,wchchrg,carehome_charges_value_check,brent,wrent,rent_value_check,scharge,wscharge,pscharge,wpschrge,supcharg,wsupchrg,tcharge,wtcharge,hbrentshortfall,tshortfall_known,tshortfall,wtshortfall,scheme_code,scheme_service_name,scheme_sensitive,SCHTYPE,scheme_registered_under_care_act,scheme_owning_organisation_name,scheme_primary_client_group,scheme_has_other_client_group,scheme_secondary_client_group,scheme_support_type,scheme_intended_stay,scheme_created_at,location_code,location_postcode,location_name,location_units,location_type_of_unit,location_mobility_type,location_admin_district,location_startdate -,completed,s.port@jeemayle.com,false,2023-06-26T00:00:00+01:00,,2023-06-26T00:00:00+01:00,1,,,2023,DLUHC,DLUHC,1,7,0,2023-06-26T00:00:00+01:00,2,1,,,,HIJKLMN,ABCDEFG,0,,,fake address,,London,,NW9 5LL,false,Barnet,E09000003,0,2,6,2,2,7,1,1,3,2023-06-24T00:00:00+01:00,,,1,2023-06-25T00:00:00+01:00,,3,1,4,,2,,1,2,,0,0,4,0,0,2,35,,F,0,2,13,0,0,P,0,32,M,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,4,1,2,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,2,7,4,,6,2,1,1,TN23 6LZ,1,false,Ashford,E07000105,1,0,1,0,0,0,0,0,1,,2,0,0,68,1,,6,1,1,,0,2,,,,,200.0,100.0,,50.0,25.0,40.0,20.0,35.0,17.5,325.0,162.5,1,0,12.0,6.0,,,,,,,,,,,,,,,,,,,, +,completed,s.port@jeemayle.com,false,2023-06-26T00:00:00+01:00,,2023-06-26T00:00:00+01:00,1,,,2023,DLUHC,DLUHC,1,7,0,2023-06-26T00:00:00+01:00,2,1,,,,HIJKLMN,ABCDEFG,0,,,fake address,,London,,NW9 5LL,false,Barnet,E09000003,0,2,6,2,2,7,1,1,3,2023-06-24T00:00:00+01:00,,,1,2023-06-25T00:00:00+01:00,,3,1,4,,2,,1,2,,0,0,4,0,0,2,35,,F,0,2,13,0,0,P,0,32,M,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,4,1,2,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,2,7,4,,6,2,1,0,TN23 6LZ,1,false,Ashford,E07000105,1,0,1,0,0,0,0,0,1,,2,0,0,68,1,,6,1,1,,0,2,,,,,200.0,100.0,,50.0,25.0,40.0,20.0,35.0,17.5,325.0,162.5,1,0,12.0,6.0,,,,,,,,,,,,,,,,,,,, diff --git a/spec/fixtures/files/lettings_log_csv_export_non_support_codes.csv b/spec/fixtures/files/lettings_log_csv_export_non_support_codes.csv index 4cfdc963c..8847034ee 100644 --- a/spec/fixtures/files/lettings_log_csv_export_non_support_codes.csv +++ b/spec/fixtures/files/lettings_log_csv_export_non_support_codes.csv @@ -1,2 +1,2 @@ id,status,created_by,is_dpo,created_at,updated_by,updated_at,creation_method,collection_start_year,owning_organisation_name,managing_organisation_name,lettype,renewal,startdate,irproduct,irproduct_other,lar,tenancycode,propcode,uprn_known,uprn,address_line1,address_line2,town_or_city,county,postcode_full,la_label,unitletas,rsnvac,newprop,offered,unittype_gn,builtype,wchair,beds,voiddate,void_date_value_check,majorrepairs,mrcdate,major_repairs_date_value_check,joint,startertenancy,tenancy,tenancyother,tenancylength,sheltered,declaration,refused,age1,sex1,ethnic_group,ethnic,national,ecstat1,relat2,age2,sex2,ecstat2,relat3,age3,sex3,ecstat3,relat4,age4,sex4,ecstat4,relat5,age5,sex5,ecstat5,relat6,age6,sex6,ecstat6,relat7,age7,sex7,ecstat7,relat8,age8,sex8,ecstat8,armedforces,leftreg,reservist,preg_occ,housingneeds,housingneeds_type,housingneeds_a,housingneeds_b,housingneeds_c,housingneeds_f,housingneeds_g,housingneeds_h,housingneeds_other,illness,illness_type_4,illness_type_5,illness_type_2,illness_type_6,illness_type_7,illness_type_3,illness_type_9,illness_type_8,illness_type_1,illness_type_10,layear,waityear,reason,reasonother,prevten,homeless,ppcodenk,ppostcode_full,prevloc_label,reasonpref,rp_homeless,rp_insan_unsat,rp_medwel,rp_hardship,rp_dontknow,cbl,cap,chr,referral,incref,earnings,incfreq,hb,has_benefits,benefits,household_charge,nocharge,period,chcharge,wchchrg,carehome_charges_value_check,brent,scharge,pscharge,supcharg,tcharge,hbrentshortfall,tshortfall,scheme_code,scheme_service_name,scheme_sensitive,SCHTYPE,scheme_registered_under_care_act,scheme_owning_organisation_name,scheme_primary_client_group,scheme_has_other_client_group,scheme_secondary_client_group,scheme_support_type,scheme_intended_stay,scheme_created_at,location_code,location_postcode,location_name,location_units,location_type_of_unit,location_mobility_type,location_admin_district,location_startdate -,completed,choreographer@owtluk.com,false,2023-06-26T00:00:00+01:00,,2023-06-26T00:00:00+01:00,1,2023,DLUHC,DLUHC,7,0,2023-06-26T00:00:00+01:00,,,,HIJKLMN,ABCDEFG,0,,fake address,,London,,NW9 5LL,Barnet,2,6,2,2,7,1,1,3,2023-06-24T00:00:00+01:00,,1,2023-06-25T00:00:00+01:00,,3,1,4,,2,,1,0,35,F,0,2,13,0,P,32,M,6,,,,,,,,,,,,,,,,,,,,,,,,,1,4,1,2,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,2,7,4,,6,1,1,TN23 6LZ,Ashford,1,0,1,0,0,0,0,0,1,2,0,68,1,6,1,1,,0,2,,,,200.0,50.0,40.0,35.0,325.0,1,12.0,,,,,,,,,,,,,,,,,,,, +,completed,choreographer@owtluk.com,false,2023-06-26T00:00:00+01:00,,2023-06-26T00:00:00+01:00,1,2023,DLUHC,DLUHC,7,0,2023-06-26T00:00:00+01:00,,,,HIJKLMN,ABCDEFG,0,,fake address,,London,,NW9 5LL,Barnet,2,6,2,2,7,1,1,3,2023-06-24T00:00:00+01:00,,1,2023-06-25T00:00:00+01:00,,3,1,4,,2,,1,0,35,F,0,2,13,0,P,32,M,6,,,,,,,,,,,,,,,,,,,,,,,,,1,4,1,2,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,2,7,4,,6,1,0,TN23 6LZ,Ashford,1,0,1,0,0,0,0,0,1,2,0,68,1,6,1,1,,0,2,,,,200.0,50.0,40.0,35.0,325.0,1,12.0,,,,,,,,,,,,,,,,,,,, diff --git a/spec/lib/tasks/correct_ppcodenk_values_spec.rb b/spec/lib/tasks/correct_ppcodenk_values_spec.rb new file mode 100644 index 000000000..fabfd05f3 --- /dev/null +++ b/spec/lib/tasks/correct_ppcodenk_values_spec.rb @@ -0,0 +1,67 @@ +require "rails_helper" +require "rake" + +RSpec.describe "correct_ppcodenk_values" do + describe ":correct_ppcodenk_values", type: :task do + subject(:task) { Rake::Task["correct_ppcodenk_values"] } + + before do + Rake.application.rake_require("tasks/correct_ppcodenk_values") + Rake::Task.define_task(:environment) + task.reenable + end + + context "when the rake task is run" do + let!(:lettings_log) { create(:lettings_log, :completed) } + + it "updates lettings logs with ppcodenk 0 to have ppcodenk 1" do + lettings_log.update!(ppcodenk: 0) + task.invoke + expect(lettings_log.reload.ppcodenk).to eq(1) + end + + it "updates lettings logs with ppcodenk 1 to have ppcodenk 0" do + lettings_log.update!(ppcodenk: 1) + task.invoke + expect(lettings_log.reload.ppcodenk).to eq(0) + end + + it "does not update lettings logs with ppcodenk nil" do + lettings_log.update!(ppcodenk: nil) + task.invoke + expect(lettings_log.reload.ppcodenk).to eq(nil) + end + + context "with multiple lettings logs" do + let(:lettings_log_2) { create(:lettings_log, :completed) } + let(:lettings_log_3) { create(:lettings_log, :completed) } + + it "only updates each log once" do + lettings_log.update!(ppcodenk: nil) + lettings_log_2.update!(ppcodenk: 0) + lettings_log_3.update!(ppcodenk: 1) + task.invoke + expect(lettings_log.reload.ppcodenk).to eq(nil) + expect(lettings_log_2.reload.ppcodenk).to eq(1) + expect(lettings_log_3.reload.ppcodenk).to eq(0) + end + end + + it "does not update updated_at value" do + lettings_log.updated_at = Time.zone.local(2021, 3, 3) + lettings_log.save!(validate: false) + expect(lettings_log.updated_at.to_date).to eq(Time.zone.local(2021, 3, 3)) + task.invoke + expect(lettings_log.updated_at.to_date).to eq(Time.zone.local(2021, 3, 3)) + end + + it "skips validations for previous years" do + lettings_log.update!(ppcodenk: 1) + lettings_log.startdate = Time.zone.local(2021, 3, 3) + lettings_log.save!(validate: false) + task.invoke + expect(lettings_log.reload.ppcodenk).to eq(0) + end + end + end +end diff --git a/spec/models/form/question_spec.rb b/spec/models/form/question_spec.rb index 08d08032f..4c3579793 100644 --- a/spec/models/form/question_spec.rb +++ b/spec/models/form/question_spec.rb @@ -60,37 +60,9 @@ RSpec.describe Form::Question, type: :model do end it "has a yes value helper" do - expect(question).to be_value_is_yes("Yes", true) - expect(question).to be_value_is_yes("YES", true) - expect(question).not_to be_value_is_yes("random", true) - end - - it "has a no value helper" do - expect(question).to be_value_is_no("No", true) - expect(question).to be_value_is_no("NO", true) - expect(question).not_to be_value_is_no("random", true) - end - - context "when there are different value helper values for lettings and sales" do - context "with a lettings log" do - let(:lettings_log) { FactoryBot.build(:lettings_log, :in_progress) } - let(:question) { Form::Lettings::Questions::Ppcodenk.new(nil, nil, Form::Lettings::Pages::PreviousPostcode.new("previous_postcode", nil, Form::Lettings::Subsections::HouseholdSituation.new(nil, nil, Form::Lettings::Sections::Household))) } - - it "has the correct values" do - expect(question.value_is_yes?(1, lettings_log.lettings?)).to be true - expect(question.value_is_no?(0, lettings_log.lettings?)).to be true - end - end - - context "with a sales log" do - let(:sales_log) { FactoryBot.build(:sales_log, :in_progress) } - let(:question) { Form::Sales::Questions::PreviousPostcodeKnown.new(nil, nil, Form::Sales::Pages::LastAccommodation.new("previous_postcode", nil, Form::Sales::Subsections::HouseholdSituation.new(nil, nil, Form::Sales::Sections::Household))) } - - it "has the correct values" do - expect(question.value_is_yes?(0, sales_log.lettings?)).to be true - expect(question.value_is_no?(1, sales_log.lettings?)).to be true - end - end + expect(question).to be_value_is_yes("Yes") + expect(question).to be_value_is_yes("YES") + expect(question).not_to be_value_is_yes("random") end context "when type is numeric" do @@ -130,10 +102,8 @@ RSpec.describe Form::Question, type: :model do let(:question_id) { "illness" } it "maps those options" do - expect(question).to be_value_is_yes(1, true) - expect(question).not_to be_value_is_no(1, true) + expect(question).to be_value_is_yes(1) expect(question).not_to be_value_is_refused(1) - expect(question).to be_value_is_no(2, true) expect(question).to be_value_is_dont_know(3) end end @@ -145,8 +115,7 @@ RSpec.describe Form::Question, type: :model do let(:question_id) { "layear" } it "maps those options" do - expect(question).not_to be_value_is_yes(7, true) - expect(question).not_to be_value_is_no(7, true) + expect(question).not_to be_value_is_yes(7) expect(question).not_to be_value_is_refused(7) expect(question).to be_value_is_dont_know(7) end @@ -231,13 +200,8 @@ RSpec.describe Form::Question, type: :model do end it "can map yes values" do - expect(question).to be_value_is_yes(1, true) - expect(question).not_to be_value_is_yes(0, true) - end - - it "can map no values" do - expect(question).to be_value_is_no(0, true) - expect(question).not_to be_value_is_no(1, true) + expect(question).to be_value_is_yes(1) + expect(question).not_to be_value_is_yes(0) end end diff --git a/spec/models/lettings_log_spec.rb b/spec/models/lettings_log_spec.rb index e89015233..74a04f9e6 100644 --- a/spec/models/lettings_log_spec.rb +++ b/spec/models/lettings_log_spec.rb @@ -1329,7 +1329,7 @@ RSpec.describe LettingsLog do managing_organisation: owning_organisation, owning_organisation:, created_by: created_by_user, - ppcodenk: 1, + ppcodenk: 0, ppostcode_full: "M1 1AE", }) end @@ -1369,7 +1369,7 @@ RSpec.describe LettingsLog do end it "correctly resets all fields if previous postcode not known" do - address_lettings_log.update!({ ppcodenk: 0 }) + address_lettings_log.update!({ ppcodenk: 1 }) record_from_db = described_class.find(address_lettings_log.id) expect(record_from_db["ppostcode_full"]).to eq(nil) @@ -1378,7 +1378,7 @@ RSpec.describe LettingsLog do end it "correctly resets la if la is not known" do - address_lettings_log.update!({ ppcodenk: 0 }) + address_lettings_log.update!({ ppcodenk: 1 }) address_lettings_log.update!({ previous_la_known: 1, prevloc: "S92000003" }) record_from_db = described_class.find(address_lettings_log.id) expect(record_from_db["prevloc"]).to eq("S92000003") @@ -1391,7 +1391,7 @@ RSpec.describe LettingsLog do end it "changes the prevloc if previous postcode changes from not known to known and provided" do - address_lettings_log.update!({ ppcodenk: 0 }) + address_lettings_log.update!({ ppcodenk: 1 }) address_lettings_log.update!({ previous_la_known: 1, prevloc: "E09000033" }) record_from_db = described_class.find(address_lettings_log.id) diff --git a/spec/models/validations/local_authority_validations_spec.rb b/spec/models/validations/local_authority_validations_spec.rb index 1c0388c34..3b903e4dc 100644 --- a/spec/models/validations/local_authority_validations_spec.rb +++ b/spec/models/validations/local_authority_validations_spec.rb @@ -4,35 +4,35 @@ RSpec.describe Validations::LocalAuthorityValidations do subject(:local_auth_validator) { validator_class.new } let(:validator_class) { Class.new { include Validations::LocalAuthorityValidations } } - let(:record) { FactoryBot.create(:lettings_log) } + let(:log) { create(:lettings_log) } describe "#validate_previous_accommodation_postcode" do - it "does not add an error if the record ppostcode_full is missing" do - record.ppostcode_full = nil - local_auth_validator.validate_previous_accommodation_postcode(record) - expect(record.errors).to be_empty + it "does not add an error if the log ppostcode_full is missing" do + log.ppostcode_full = nil + local_auth_validator.validate_previous_accommodation_postcode(log) + expect(log.errors).to be_empty end - it "does not add an error if the record ppostcode_full is valid (uppercase space)" do - record.ppcodenk = 1 - record.ppostcode_full = "M1 1AE" - local_auth_validator.validate_previous_accommodation_postcode(record) - expect(record.errors).to be_empty + it "does not add an error if the log ppostcode_full is valid (uppercase space)" do + log.ppcodenk = 0 + log.ppostcode_full = "M1 1AE" + local_auth_validator.validate_previous_accommodation_postcode(log) + expect(log.errors).to be_empty end - it "does not add an error if the record ppostcode_full is valid (lowercase no space)" do - record.ppcodenk = 1 - record.ppostcode_full = "m11ae" - local_auth_validator.validate_previous_accommodation_postcode(record) - expect(record.errors).to be_empty + it "does not add an error if the log ppostcode_full is valid (lowercase no space)" do + log.ppcodenk = 0 + log.ppostcode_full = "m11ae" + local_auth_validator.validate_previous_accommodation_postcode(log) + expect(log.errors).to be_empty end it "does add an error when the postcode is invalid" do - record.ppcodenk = 1 - record.ppostcode_full = "invalid" - local_auth_validator.validate_previous_accommodation_postcode(record) - expect(record.errors).not_to be_empty - expect(record.errors["ppostcode_full"]).to include(match I18n.t("validations.postcode")) + log.ppcodenk = 0 + log.ppostcode_full = "invalid" + local_auth_validator.validate_previous_accommodation_postcode(log) + expect(log.errors).not_to be_empty + expect(log.errors["ppostcode_full"]).to include(match I18n.t("validations.postcode")) end end end diff --git a/spec/services/bulk_upload/lettings/log_creator_spec.rb b/spec/services/bulk_upload/lettings/log_creator_spec.rb index 03724577b..6dfaff46c 100644 --- a/spec/services/bulk_upload/lettings/log_creator_spec.rb +++ b/spec/services/bulk_upload/lettings/log_creator_spec.rb @@ -67,7 +67,7 @@ RSpec.describe BulkUpload::Lettings::LogCreator do waityear: 9, joint: 2, tenancy: 9, - ppcodenk: 0, + ppcodenk: 1, ) end @@ -153,7 +153,7 @@ RSpec.describe BulkUpload::Lettings::LogCreator do waityear: 9, joint: 2, tenancy: 9, - ppcodenk: 0, + ppcodenk: 1, ) end diff --git a/spec/services/bulk_upload/lettings/year2022/row_parser_spec.rb b/spec/services/bulk_upload/lettings/year2022/row_parser_spec.rb index 6b5eaa2ae..7380ca550 100644 --- a/spec/services/bulk_upload/lettings/year2022/row_parser_spec.rb +++ b/spec/services/bulk_upload/lettings/year2022/row_parser_spec.rb @@ -1562,7 +1562,7 @@ RSpec.describe BulkUpload::Lettings::Year2022::RowParser do let(:attributes) { { bulk_upload:, field_65: "2" } } it "sets correct value from mapping" do - expect(parser.log.ppcodenk).to eq(0) + expect(parser.log.ppcodenk).to eq(1) end end diff --git a/spec/services/bulk_upload/lettings/year2023/row_parser_spec.rb b/spec/services/bulk_upload/lettings/year2023/row_parser_spec.rb index cac166f46..c2f816ab6 100644 --- a/spec/services/bulk_upload/lettings/year2023/row_parser_spec.rb +++ b/spec/services/bulk_upload/lettings/year2023/row_parser_spec.rb @@ -1642,7 +1642,7 @@ RSpec.describe BulkUpload::Lettings::Year2023::RowParser do let(:attributes) { { bulk_upload:, field_106: "2" } } it "sets correct value from mapping" do - expect(parser.log.ppcodenk).to eq(0) + expect(parser.log.ppcodenk).to eq(1) end end diff --git a/spec/services/bulk_upload/processor_spec.rb b/spec/services/bulk_upload/processor_spec.rb index f01f2daf7..9f287c592 100644 --- a/spec/services/bulk_upload/processor_spec.rb +++ b/spec/services/bulk_upload/processor_spec.rb @@ -176,7 +176,7 @@ RSpec.describe BulkUpload::Processor do waityear: 9, joint: 2, tenancy: 9, - ppcodenk: 0, + ppcodenk: 1, voiddate: nil, mrcdate: nil, startdate: Date.new(2022, 10, 1), @@ -385,7 +385,7 @@ RSpec.describe BulkUpload::Processor do waityear: 9, joint: 2, tenancy: 2, - ppcodenk: 0, + ppcodenk: 1, voiddate: Date.new(2022, 1, 1), reason: 40, leftreg: 3,