diff --git a/Gemfile.lock b/Gemfile.lock index bcd977d68..3d1a3f0d3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -343,7 +343,7 @@ GEM activesupport (>= 3.0.0) raabro (1.4.0) racc (1.8.1) - rack (3.1.11) + rack (3.1.12) rack-attack (6.7.0) rack (>= 1.0, < 4) rack-mini-profiler (3.3.1) diff --git a/app/controllers/address_search_controller.rb b/app/controllers/address_search_controller.rb index 616d5b702..74cda65c2 100644 --- a/app/controllers/address_search_controller.rb +++ b/app/controllers/address_search_controller.rb @@ -5,7 +5,9 @@ class AddressSearchController < ApplicationController def index query = params[:query] - if query.match?(/\A\d+\z/) && query.length > 5 + if query.nil? + render json: { error: "Query cannot be blank." }, status: :bad_request + elsif query.match?(/\A\d+\z/) && query.length > 5 # Query is all numbers and greater than 5 digits, assume it's a UPRN service = UprnClient.new(query) service.call @@ -38,7 +40,7 @@ class AddressSearchController < ApplicationController address_service.call uprn_service.call - results = ([uprn_service.result] || []) + (address_service.result || []) + results = [uprn_service.result, *address_service.result].compact if address_service.error.present? && uprn_service.error.present? render json: { error: "Address and UPRN are not recognised." }, status: :not_found diff --git a/app/helpers/check_errors_helper.rb b/app/helpers/check_errors_helper.rb index 3b3774566..c23b89c40 100644 --- a/app/helpers/check_errors_helper.rb +++ b/app/helpers/check_errors_helper.rb @@ -2,7 +2,7 @@ module CheckErrorsHelper include GovukLinkHelper def check_errors_answer_text(question, log) - question.displayed_as_answered?(log) ? "Change" : "Answer" + question.displayed_as_answered?(log) ? "Change" : "" end def check_errors_answer_link(log, question, page, applicable_questions) diff --git a/app/models/derived_variables/lettings_log_variables.rb b/app/models/derived_variables/lettings_log_variables.rb index 8cabf1ce5..42dadf43c 100644 --- a/app/models/derived_variables/lettings_log_variables.rb +++ b/app/models/derived_variables/lettings_log_variables.rb @@ -375,6 +375,7 @@ private self.address_line2 = nil self.town_or_city = nil self.county = nil + self.postcode_full = nil end def address_answered_without_uprn? diff --git a/app/models/derived_variables/sales_log_variables.rb b/app/models/derived_variables/sales_log_variables.rb index a570abc35..18b26ad85 100644 --- a/app/models/derived_variables/sales_log_variables.rb +++ b/app/models/derived_variables/sales_log_variables.rb @@ -258,10 +258,10 @@ private self.address_line2 = nil self.town_or_city = nil self.county = nil + self.postcode_full = nil self.pcode1 = nil self.pcode2 = nil self.pcodenk = nil - self.postcode_full = nil self.is_la_inferred = nil self.la = nil end diff --git a/app/models/form/lettings/questions/address_search.rb b/app/models/form/lettings/questions/address_search.rb index ed7edf894..c6abe9a6c 100644 --- a/app/models/form/lettings/questions/address_search.rb +++ b/app/models/form/lettings/questions/address_search.rb @@ -12,11 +12,9 @@ class Form::Lettings::Questions::AddressSearch < ::Form::Question def answer_options(log = nil, _user = nil) return {} unless ActiveRecord::Base.connected? - return {} unless log&.address_options&.any? + return {} unless log&.address_search_options&.any? - log.address_options.each_with_object({}) do |option, hash| - hash[option[:uprn]] = { "value" => "#{option[:address]} (#{option[:uprn]})" } - end + { log.address_search_options.first[:uprn] => { "value" => "#{log.address_search_options.first[:address]} (#{log.address_search_options.first[:uprn]})" } } end def get_extra_check_answer_value(log) diff --git a/app/models/form/lettings/subsections/property_information.rb b/app/models/form/lettings/subsections/property_information.rb index 475ff0a8c..3b827bf48 100644 --- a/app/models/form/lettings/subsections/property_information.rb +++ b/app/models/form/lettings/subsections/property_information.rb @@ -56,6 +56,8 @@ class Form::Lettings::Subsections::PropertyInformation < ::Form::Subsection end def displayed_in_tasklist?(log) + return true if form.start_year_2025_or_later? + !(log.is_supported_housing? && log.is_renewal?) end end diff --git a/app/models/form/sales/questions/address_search.rb b/app/models/form/sales/questions/address_search.rb index d6acbaba1..c219f13f1 100644 --- a/app/models/form/sales/questions/address_search.rb +++ b/app/models/form/sales/questions/address_search.rb @@ -12,11 +12,9 @@ class Form::Sales::Questions::AddressSearch < ::Form::Question def answer_options(log = nil, _user = nil) return {} unless ActiveRecord::Base.connected? - return {} unless log&.address_options&.any? + return {} unless log&.address_search_options&.any? - log.address_options.each_with_object({}) do |option, hash| - hash[option[:uprn]] = { "value" => "#{option[:address]} (#{option[:uprn]})" } - end + { log.address_search_options.first[:uprn] => { "value" => "#{log.address_search_options.first[:address]} (#{log.address_search_options.first[:uprn]})" } } end def get_extra_check_answer_value(log) diff --git a/app/models/form/sales/subsections/household_characteristics.rb b/app/models/form/sales/subsections/household_characteristics.rb index 5c3c0b9e3..a1f21ae8e 100644 --- a/app/models/form/sales/subsections/household_characteristics.rb +++ b/app/models/form/sales/subsections/household_characteristics.rb @@ -39,20 +39,20 @@ class Form::Sales::Subsections::HouseholdCharacteristics < ::Form::Subsection Form::Sales::Pages::Buyer1LiveInProperty.new(nil, nil, self), Form::Sales::Pages::BuyerLiveInValueCheck.new("buyer_1_live_in_property_value_check", nil, self, person_index: 1), (form.start_year_2025_or_later? ? Form::Sales::Pages::Buyer2RelationshipToBuyer1YesNo.new(nil, nil, self) : Form::Sales::Pages::Buyer2RelationshipToBuyer1.new(nil, nil, self)), - Form::Sales::Pages::PersonStudentNotChildValueCheck.new("buyer_2_relationship_student_not_child_value_check", nil, self, person_index: 2), + (Form::Sales::Pages::PersonStudentNotChildValueCheck.new("buyer_2_relationship_student_not_child_value_check", nil, self, person_index: 2) unless form.start_year_2025_or_later?), Form::Sales::Pages::Age2.new(nil, nil, self), Form::Sales::Pages::OldPersonsSharedOwnershipValueCheck.new("age_2_old_persons_shared_ownership_joint_purchase_value_check", nil, self, joint_purchase: true), Form::Sales::Pages::OldPersonsSharedOwnershipValueCheck.new("age_2_old_persons_shared_ownership_value_check", nil, self, joint_purchase: false), Form::Sales::Pages::RetirementValueCheck.new("age_2_buyer_retirement_value_check", nil, self, person_index: 2), (Form::Sales::Pages::NotRetiredValueCheck.new("age_2_buyer_not_retired_value_check", nil, self, person_index: 2) if form.start_year_2024_or_later?), - Form::Sales::Pages::PersonStudentNotChildValueCheck.new("buyer_2_age_student_not_child_value_check", nil, self, person_index: 2), + (Form::Sales::Pages::PersonStudentNotChildValueCheck.new("buyer_2_age_student_not_child_value_check", nil, self, person_index: 2) unless form.start_year_2025_or_later?), Form::Sales::Pages::GenderIdentity2.new(nil, nil, self), buyer_2_ethnicity_nationality_pages, Form::Sales::Pages::Buyer2WorkingSituation.new(nil, nil, self), Form::Sales::Pages::RetirementValueCheck.new("working_situation_2_retirement_value_check_joint_purchase", nil, self, person_index: 2), (Form::Sales::Pages::NotRetiredValueCheck.new("working_situation_2_not_retired_value_check_joint_purchase", nil, self, person_index: 2) if form.start_year_2024_or_later?), Form::Sales::Pages::Buyer2IncomeEcstatValueCheck.new("working_situation_buyer_2_income_value_check", nil, self), - Form::Sales::Pages::PersonStudentNotChildValueCheck.new("buyer_2_working_situation_student_not_child_value_check", nil, self, person_index: 2), + (Form::Sales::Pages::PersonStudentNotChildValueCheck.new("buyer_2_working_situation_student_not_child_value_check", nil, self, person_index: 2) unless form.start_year_2025_or_later?), Form::Sales::Pages::Buyer2LiveInProperty.new(nil, nil, self), Form::Sales::Pages::BuyerLiveInValueCheck.new("buyer_2_live_in_property_value_check", nil, self, person_index: 2), Form::Sales::Pages::NumberOfOthersInProperty.new("number_of_others_in_property", nil, self, joint_purchase: false), @@ -61,77 +61,77 @@ class Form::Sales::Subsections::HouseholdCharacteristics < ::Form::Subsection (form.start_year_2025_or_later? ? Form::Sales::Pages::PersonRelationshipToBuyer1YesNo.new("person_2_relationship_to_buyer_1", nil, self, person_index: 2) : Form::Sales::Pages::PersonRelationshipToBuyer1.new("person_2_relationship_to_buyer_1", nil, self, person_index: 2)), (Form::Sales::Pages::PartnerUnder16ValueCheck.new("relationship_2_partner_under_16_value_check", nil, self, person_index: 2) if form.start_year_2024_or_later?), (Form::Sales::Pages::MultiplePartnersValueCheck.new("relationship_2_multiple_partners_value_check", nil, self, person_index: 2) if form.start_year_2024_or_later?), - Form::Sales::Pages::PersonStudentNotChildValueCheck.new("relationship_2_student_not_child_value_check", nil, self, person_index: 2), + (Form::Sales::Pages::PersonStudentNotChildValueCheck.new("relationship_2_student_not_child_value_check", nil, self, person_index: 2) unless form.start_year_2025_or_later?), Form::Sales::Pages::PersonAge.new("person_2_age", nil, self, person_index: 2), Form::Sales::Pages::RetirementValueCheck.new("age_2_retirement_value_check", nil, self, person_index: 2), (Form::Sales::Pages::NotRetiredValueCheck.new("age_2_not_retired_value_check", nil, self, person_index: 2) if form.start_year_2024_or_later?), - Form::Sales::Pages::PersonStudentNotChildValueCheck.new("age_2_student_not_child_value_check", nil, self, person_index: 2), + (Form::Sales::Pages::PersonStudentNotChildValueCheck.new("age_2_student_not_child_value_check", nil, self, person_index: 2) unless form.start_year_2025_or_later?), (Form::Sales::Pages::PartnerUnder16ValueCheck.new("age_2_partner_under_16_value_check", nil, self, person_index: 2) if form.start_year_2024_or_later?), Form::Sales::Pages::PersonGenderIdentity.new("person_2_gender_identity", nil, self, person_index: 2), Form::Sales::Pages::PersonWorkingSituation.new("person_2_working_situation", nil, self, person_index: 2), Form::Sales::Pages::RetirementValueCheck.new("working_situation_2_retirement_value_check", nil, self, person_index: 2), (Form::Sales::Pages::NotRetiredValueCheck.new("working_situation_2_not_retired_value_check", nil, self, person_index: 2) if form.start_year_2024_or_later?), - Form::Sales::Pages::PersonStudentNotChildValueCheck.new("working_situation_2_student_not_child_value_check", nil, self, person_index: 2), + (Form::Sales::Pages::PersonStudentNotChildValueCheck.new("working_situation_2_student_not_child_value_check", nil, self, person_index: 2) unless form.start_year_2025_or_later?), Form::Sales::Pages::PersonKnown.new("person_3_known", nil, self, person_index: 3), (form.start_year_2025_or_later? ? Form::Sales::Pages::PersonRelationshipToBuyer1YesNo.new("person_3_relationship_to_buyer_1", nil, self, person_index: 3) : Form::Sales::Pages::PersonRelationshipToBuyer1.new("person_3_relationship_to_buyer_1", nil, self, person_index: 3)), (Form::Sales::Pages::PartnerUnder16ValueCheck.new("relationship_3_partner_under_16_value_check", nil, self, person_index: 3) if form.start_year_2024_or_later?), (Form::Sales::Pages::MultiplePartnersValueCheck.new("relationship_3_multiple_partners_value_check", nil, self, person_index: 3) if form.start_year_2024_or_later?), - Form::Sales::Pages::PersonStudentNotChildValueCheck.new("relationship_3_student_not_child_value_check", nil, self, person_index: 3), + (Form::Sales::Pages::PersonStudentNotChildValueCheck.new("relationship_3_student_not_child_value_check", nil, self, person_index: 3) unless form.start_year_2025_or_later?), Form::Sales::Pages::PersonAge.new("person_3_age", nil, self, person_index: 3), Form::Sales::Pages::RetirementValueCheck.new("age_3_retirement_value_check", nil, self, person_index: 3), (Form::Sales::Pages::NotRetiredValueCheck.new("age_3_not_retired_value_check", nil, self, person_index: 3) if form.start_year_2024_or_later?), - Form::Sales::Pages::PersonStudentNotChildValueCheck.new("age_3_student_not_child_value_check", nil, self, person_index: 3), + (Form::Sales::Pages::PersonStudentNotChildValueCheck.new("age_3_student_not_child_value_check", nil, self, person_index: 3) unless form.start_year_2025_or_later?), (Form::Sales::Pages::PartnerUnder16ValueCheck.new("age_3_partner_under_16_value_check", nil, self, person_index: 3) if form.start_year_2024_or_later?), Form::Sales::Pages::PersonGenderIdentity.new("person_3_gender_identity", nil, self, person_index: 3), Form::Sales::Pages::PersonWorkingSituation.new("person_3_working_situation", nil, self, person_index: 3), Form::Sales::Pages::RetirementValueCheck.new("working_situation_3_retirement_value_check", nil, self, person_index: 3), (Form::Sales::Pages::NotRetiredValueCheck.new("working_situation_3_not_retired_value_check", nil, self, person_index: 3) if form.start_year_2024_or_later?), - Form::Sales::Pages::PersonStudentNotChildValueCheck.new("working_situation_3_student_not_child_value_check", nil, self, person_index: 3), + (Form::Sales::Pages::PersonStudentNotChildValueCheck.new("working_situation_3_student_not_child_value_check", nil, self, person_index: 3) unless form.start_year_2025_or_later?), Form::Sales::Pages::PersonKnown.new("person_4_known", nil, self, person_index: 4), (form.start_year_2025_or_later? ? Form::Sales::Pages::PersonRelationshipToBuyer1YesNo.new("person_4_relationship_to_buyer_1", nil, self, person_index: 4) : Form::Sales::Pages::PersonRelationshipToBuyer1.new("person_4_relationship_to_buyer_1", nil, self, person_index: 4)), (Form::Sales::Pages::PartnerUnder16ValueCheck.new("relationship_4_partner_under_16_value_check", nil, self, person_index: 4) if form.start_year_2024_or_later?), (Form::Sales::Pages::MultiplePartnersValueCheck.new("relationship_4_multiple_partners_value_check", nil, self, person_index: 4) if form.start_year_2024_or_later?), - Form::Sales::Pages::PersonStudentNotChildValueCheck.new("relationship_4_student_not_child_value_check", nil, self, person_index: 4), + (Form::Sales::Pages::PersonStudentNotChildValueCheck.new("relationship_4_student_not_child_value_check", nil, self, person_index: 4) unless form.start_year_2025_or_later?), Form::Sales::Pages::PersonAge.new("person_4_age", nil, self, person_index: 4), Form::Sales::Pages::RetirementValueCheck.new("age_4_retirement_value_check", nil, self, person_index: 4), (Form::Sales::Pages::NotRetiredValueCheck.new("age_4_not_retired_value_check", nil, self, person_index: 4) if form.start_year_2024_or_later?), - Form::Sales::Pages::PersonStudentNotChildValueCheck.new("age_4_student_not_child_value_check", nil, self, person_index: 4), + (Form::Sales::Pages::PersonStudentNotChildValueCheck.new("age_4_student_not_child_value_check", nil, self, person_index: 4) unless form.start_year_2025_or_later?), (Form::Sales::Pages::PartnerUnder16ValueCheck.new("age_4_partner_under_16_value_check", nil, self, person_index: 4) if form.start_year_2024_or_later?), Form::Sales::Pages::PersonGenderIdentity.new("person_4_gender_identity", nil, self, person_index: 4), Form::Sales::Pages::PersonWorkingSituation.new("person_4_working_situation", nil, self, person_index: 4), Form::Sales::Pages::RetirementValueCheck.new("working_situation_4_retirement_value_check", nil, self, person_index: 4), (Form::Sales::Pages::NotRetiredValueCheck.new("working_situation_4_not_retired_value_check", nil, self, person_index: 4) if form.start_year_2024_or_later?), - Form::Sales::Pages::PersonStudentNotChildValueCheck.new("working_situation_4_student_not_child_value_check", nil, self, person_index: 4), + (Form::Sales::Pages::PersonStudentNotChildValueCheck.new("working_situation_4_student_not_child_value_check", nil, self, person_index: 4) unless form.start_year_2025_or_later?), Form::Sales::Pages::PersonKnown.new("person_5_known", nil, self, person_index: 5), (form.start_year_2025_or_later? ? Form::Sales::Pages::PersonRelationshipToBuyer1YesNo.new("person_5_relationship_to_buyer_1", nil, self, person_index: 5) : Form::Sales::Pages::PersonRelationshipToBuyer1.new("person_5_relationship_to_buyer_1", nil, self, person_index: 5)), (Form::Sales::Pages::PartnerUnder16ValueCheck.new("relationship_5_partner_under_16_value_check", nil, self, person_index: 5) if form.start_year_2024_or_later?), (Form::Sales::Pages::MultiplePartnersValueCheck.new("relationship_5_multiple_partners_value_check", nil, self, person_index: 5) if form.start_year_2024_or_later?), - Form::Sales::Pages::PersonStudentNotChildValueCheck.new("relationship_5_student_not_child_value_check", nil, self, person_index: 5), + (Form::Sales::Pages::PersonStudentNotChildValueCheck.new("relationship_5_student_not_child_value_check", nil, self, person_index: 5) unless form.start_year_2025_or_later?), Form::Sales::Pages::PersonAge.new("person_5_age", nil, self, person_index: 5), Form::Sales::Pages::RetirementValueCheck.new("age_5_retirement_value_check", nil, self, person_index: 5), (Form::Sales::Pages::NotRetiredValueCheck.new("age_5_not_retired_value_check", nil, self, person_index: 5) if form.start_year_2024_or_later?), - Form::Sales::Pages::PersonStudentNotChildValueCheck.new("age_5_student_not_child_value_check", nil, self, person_index: 5), + (Form::Sales::Pages::PersonStudentNotChildValueCheck.new("age_5_student_not_child_value_check", nil, self, person_index: 5) unless form.start_year_2025_or_later?), (Form::Sales::Pages::PartnerUnder16ValueCheck.new("age_5_partner_under_16_value_check", nil, self, person_index: 5) if form.start_year_2024_or_later?), Form::Sales::Pages::PersonGenderIdentity.new("person_5_gender_identity", nil, self, person_index: 5), Form::Sales::Pages::PersonWorkingSituation.new("person_5_working_situation", nil, self, person_index: 5), Form::Sales::Pages::RetirementValueCheck.new("working_situation_5_retirement_value_check", nil, self, person_index: 5), (Form::Sales::Pages::NotRetiredValueCheck.new("working_situation_5_not_retired_value_check", nil, self, person_index: 5) if form.start_year_2024_or_later?), - Form::Sales::Pages::PersonStudentNotChildValueCheck.new("working_situation_5_student_not_child_value_check", nil, self, person_index: 5), + (Form::Sales::Pages::PersonStudentNotChildValueCheck.new("working_situation_5_student_not_child_value_check", nil, self, person_index: 5) unless form.start_year_2025_or_later?), Form::Sales::Pages::PersonKnown.new("person_6_known", nil, self, person_index: 6), (form.start_year_2025_or_later? ? Form::Sales::Pages::PersonRelationshipToBuyer1YesNo.new("person_6_relationship_to_buyer_1", nil, self, person_index: 6) : Form::Sales::Pages::PersonRelationshipToBuyer1.new("person_6_relationship_to_buyer_1", nil, self, person_index: 6)), (Form::Sales::Pages::PartnerUnder16ValueCheck.new("relationship_6_partner_under_16_value_check", nil, self, person_index: 6) if form.start_year_2024_or_later?), (Form::Sales::Pages::MultiplePartnersValueCheck.new("relationship_6_multiple_partners_value_check", nil, self, person_index: 6) if form.start_year_2024_or_later?), - Form::Sales::Pages::PersonStudentNotChildValueCheck.new("relationship_6_student_not_child_value_check", nil, self, person_index: 6), + (Form::Sales::Pages::PersonStudentNotChildValueCheck.new("relationship_6_student_not_child_value_check", nil, self, person_index: 6) unless form.start_year_2025_or_later?), Form::Sales::Pages::PersonAge.new("person_6_age", nil, self, person_index: 6), Form::Sales::Pages::RetirementValueCheck.new("age_6_retirement_value_check", nil, self, person_index: 6), (Form::Sales::Pages::NotRetiredValueCheck.new("age_6_not_retired_value_check", nil, self, person_index: 6) if form.start_year_2024_or_later?), - Form::Sales::Pages::PersonStudentNotChildValueCheck.new("age_6_student_not_child_value_check", nil, self, person_index: 6), + (Form::Sales::Pages::PersonStudentNotChildValueCheck.new("age_6_student_not_child_value_check", nil, self, person_index: 6) unless form.start_year_2025_or_later?), (Form::Sales::Pages::PartnerUnder16ValueCheck.new("age_6_partner_under_16_value_check", nil, self, person_index: 6) if form.start_year_2024_or_later?), Form::Sales::Pages::PersonGenderIdentity.new("person_6_gender_identity", nil, self, person_index: 6), Form::Sales::Pages::PersonWorkingSituation.new("person_6_working_situation", nil, self, person_index: 6), Form::Sales::Pages::RetirementValueCheck.new("working_situation_6_retirement_value_check", nil, self, person_index: 6), (Form::Sales::Pages::NotRetiredValueCheck.new("working_situation_6_not_retired_value_check", nil, self, person_index: 6) if form.start_year_2024_or_later?), - Form::Sales::Pages::PersonStudentNotChildValueCheck.new("working_situation_6_student_not_child_value_check", nil, self, person_index: 6), + (Form::Sales::Pages::PersonStudentNotChildValueCheck.new("working_situation_6_student_not_child_value_check", nil, self, person_index: 6) unless form.start_year_2025_or_later?), ].flatten.compact end diff --git a/app/models/log.rb b/app/models/log.rb index 4c4116a23..31072dc44 100644 --- a/app/models/log.rb +++ b/app/models/log.rb @@ -128,38 +128,40 @@ class Log < ApplicationRecord "#{address_line1_input}, #{postcode_full_input}" end - def address_options - if uprn.present? - service = UprnClient.new(uprn) - service.call - if service.result.blank? || service.error.present? - @address_options = [] - return @address_options - end + def address_search_options + return if uprn.blank? + + service = UprnClient.new(uprn) + service.call + if service.result.blank? || service.error.present? + @address_options = [] + return @address_options + end - presenter = UprnDataPresenter.new(service.result) - @address_options = [{ address: presenter.address, uprn: presenter.uprn }] - else - return @address_options if @address_options && @last_searched_address_string == address_string - return if address_string.blank? + presenter = UprnDataPresenter.new(service.result) + @address_options = [{ address: presenter.address, uprn: presenter.uprn }] + end - @last_searched_address_string = address_string + def address_options + return @address_options if @address_options && @last_searched_address_string == address_string + return if address_string.blank? - service = AddressClient.new(address_string) - service.call - if service.result.blank? || service.error.present? - @address_options = [] - return @address_options - end + @last_searched_address_string = address_string - address_opts = [] - service.result.first(10).each do |result| - presenter = AddressDataPresenter.new(result) - address_opts.append({ address: presenter.address, uprn: presenter.uprn }) - end + service = AddressClient.new(address_string) + service.call + if service.result.blank? || service.error.present? + @address_options = [] + return @address_options + end - @address_options = address_opts + address_opts = [] + service.result.first(10).each do |result| + presenter = AddressDataPresenter.new(result) + address_opts.append({ address: presenter.address, uprn: presenter.uprn }) end + + @address_options = address_opts end def collection_start_year @@ -415,6 +417,7 @@ private self.address_line2 = address_line2_as_entered self.county = county_as_entered self.town_or_city = town_or_city_as_entered + self.la = la_as_entered self.manual_address_entry_selected = true end end diff --git a/app/services/bulk_upload/sales/year2025/row_parser.rb b/app/services/bulk_upload/sales/year2025/row_parser.rb index f22910a29..feb607baf 100644 --- a/app/services/bulk_upload/sales/year2025/row_parser.rb +++ b/app/services/bulk_upload/sales/year2025/row_parser.rb @@ -662,7 +662,7 @@ private relat2: %i[field_34], relat3: %i[field_42], relat4: %i[field_46], - relat5: %i[field_49], + relat5: %i[field_50], relat6: %i[field_54], ecstat1: %i[field_32], @@ -821,10 +821,10 @@ private else (field_46 == 2 ? "X" : "R") end - attributes["relat5"] = if field_49 == 1 + attributes["relat5"] = if field_50 == 1 "P" else - (field_49 == 2 ? "X" : "R") + (field_50 == 2 ? "X" : "R") end attributes["relat6"] = if field_54 == 1 "P" @@ -1036,7 +1036,7 @@ private end def person_5_present? - field_51.present? || field_52.present? || field_49.present? + field_51.present? || field_52.present? || field_50.present? end def person_6_present? diff --git a/app/views/form/check_errors.html.erb b/app/views/form/check_errors.html.erb index df297b891..c7b08701d 100644 --- a/app/views/form/check_errors.html.erb +++ b/app/views/form/check_errors.html.erb @@ -50,7 +50,7 @@
<% if !question.displayed_as_answered?(@log) || question.subsection.id == "setup" %> - <%= govuk_link_to check_errors_answer_text(question, @log), check_errors_answer_link(@log, question, @page, applicable_questions) %> + <%= govuk_link_to check_errors_answer_text(question, @log), check_errors_answer_link(@log, question, @page, applicable_questions) unless question.unanswered?(@log) %> <% else %> <% end %> diff --git a/config/locales/forms/2025/sales/soft_validations.en.yml b/config/locales/forms/2025/sales/soft_validations.en.yml index 5bc6cb762..0e0afeb99 100644 --- a/config/locales/forms/2025/sales/soft_validations.en.yml +++ b/config/locales/forms/2025/sales/soft_validations.en.yml @@ -191,15 +191,6 @@ en: title_text: "You told us that buyer 2 will not live in the property." informative_text: "For %{ownership_scheme} types, the buyer usually lives in the property." - student_not_child_value_check: - page_header: "" - check_answer_label: "Student not a child confirmation" - check_answer_prompt: "Confirm student not a child" - hint_text: "" - question_text: "Are you sure this person is not a child?" - title_text: "You told us this person is a student aged between 16 and 19." - informative_text: "Are you sure this person is not a child?" - partner_under_16_value_check: page_header: "" check_answer_label: "Partner under 16 confirmation" diff --git a/spec/models/form/lettings/questions/address_search_spec.rb b/spec/models/form/lettings/questions/address_search_spec.rb index d063a94dc..8635aa017 100644 --- a/spec/models/form/lettings/questions/address_search_spec.rb +++ b/spec/models/form/lettings/questions/address_search_spec.rb @@ -32,6 +32,39 @@ RSpec.describe Form::Lettings::Questions::AddressSearch, type: :model do end end + describe "#answer_options" do + before do + body = { + results: [ + { + DPA: { + "POSTCODE": "AA1 1AA", + "POST_TOWN": "Test Town", + "ORGANISATION_NAME": "1, Test Road", + "ADDRESS": "1 Test Street, Test City, AA1 1AA", + "UPRN": "123", + }, + }, + ], + }.to_json + + WebMock.stub_request(:get, "https://api.os.uk/search/places/v1/uprn?dataset=DPA,LPI&key=OS_DATA_KEY&uprn=123") + .to_return(status: 200, body:, headers: {}) + end + + let(:log_with_uprn) { build(:lettings_log, :completed, uprn: 123, manual_address_entry_selected: false, address_line1_input: "1, Test Road", postcode_full_input: "Test Town") } + + let(:log_without_uprn) { build(:lettings_log, :completed, uprn: nil, manual_address_entry_selected: false, address_line1_input: "1, Test Road", postcode_full_input: "Test Town") } + + it "returns an answer option when uprn is present" do + expect(question.answer_options(log_with_uprn)).to eq({ "123" => { "value" => "1 Test Street, Test City, AA1 1AA (123)" } }) + end + + it "does not return an answer option when uprn is not present" do + expect(question.answer_options(log_without_uprn)).to eq({ nil => { "value" => " ()" } }) + end + end + describe "get_extra_check_answer_value" do context "when address is not present" do let(:log) { build(:lettings_log, manual_address_entry_selected: false) } diff --git a/spec/models/form/lettings/subsections/property_information_spec.rb b/spec/models/form/lettings/subsections/property_information_spec.rb index 2630c83d4..ed0add494 100644 --- a/spec/models/form/lettings/subsections/property_information_spec.rb +++ b/spec/models/form/lettings/subsections/property_information_spec.rb @@ -84,6 +84,14 @@ RSpec.describe Form::Lettings::Subsections::PropertyInformation, type: :model do ], ) end + + context "when it is supported housing and a renewal" do + let(:log) { FactoryBot.build(:lettings_log, needstype: 2, renewal: 1) } + + it "is not displayed in tasklist" do + expect(property_information.displayed_in_tasklist?(log)).to eq(false) + end + end end context "when 2025" do @@ -118,6 +126,14 @@ RSpec.describe Form::Lettings::Subsections::PropertyInformation, type: :model do ], ) end + + context "when it is supported housing and a renewal" do + let(:log) { FactoryBot.build(:lettings_log, needstype: 2, renewal: 1) } + + it "is displayed in tasklist" do + expect(property_information.displayed_in_tasklist?(log)).to eq(true) + end + end end end diff --git a/spec/models/form/sales/questions/address_search_spec.rb b/spec/models/form/sales/questions/address_search_spec.rb index bb30cbfa0..a2a2b51c9 100644 --- a/spec/models/form/sales/questions/address_search_spec.rb +++ b/spec/models/form/sales/questions/address_search_spec.rb @@ -32,6 +32,39 @@ RSpec.describe Form::Sales::Questions::AddressSearch, type: :model do end end + describe "#answer_options" do + before do + body = { + results: [ + { + DPA: { + "POSTCODE": "AA1 1AA", + "POST_TOWN": "Test Town", + "ORGANISATION_NAME": "1, Test Road", + "ADDRESS": "1 Test Street, Test City, AA1 1AA", + "UPRN": "123", + }, + }, + ], + }.to_json + + WebMock.stub_request(:get, "https://api.os.uk/search/places/v1/uprn?dataset=DPA,LPI&key=OS_DATA_KEY&uprn=123") + .to_return(status: 200, body:, headers: {}) + end + + let(:log_with_uprn) { build(:sales_log, :completed, uprn: 123, manual_address_entry_selected: false, address_line1_input: "1, Test Road", postcode_full_input: "Test Town") } + + let(:log_without_uprn) { build(:sales_log, :completed, uprn: nil, manual_address_entry_selected: false, address_line1_input: "1, Test Road", postcode_full_input: "Test Town") } + + it "returns an answer option when uprn is present" do + expect(question.answer_options(log_with_uprn)).to eq({ "123" => { "value" => "1 Test Street, Test City, AA1 1AA (123)" } }) + end + + it "does not return an answer option when uprn is not present" do + expect(question.answer_options(log_without_uprn)).to eq({ nil => { "value" => " ()" } }) + end + end + describe "get_extra_check_answer_value" do context "when address is not present" do let(:log) { build(:sales_log, manual_address_entry_selected: false) } diff --git a/spec/models/form/sales/subsections/household_characteristics_spec.rb b/spec/models/form/sales/subsections/household_characteristics_spec.rb index d892febc4..67f758ae3 100644 --- a/spec/models/form/sales/subsections/household_characteristics_spec.rb +++ b/spec/models/form/sales/subsections/household_characteristics_spec.rb @@ -309,13 +309,11 @@ RSpec.describe Form::Sales::Subsections::HouseholdCharacteristics, type: :model buyer_1_live_in_property buyer_1_live_in_property_value_check buyer_2_relationship_to_buyer_1 - buyer_2_relationship_student_not_child_value_check buyer_2_age age_2_old_persons_shared_ownership_joint_purchase_value_check age_2_old_persons_shared_ownership_value_check age_2_buyer_retirement_value_check age_2_buyer_not_retired_value_check - buyer_2_age_student_not_child_value_check buyer_2_gender_identity buyer_2_ethnic_group buyer_2_ethnic_background_black @@ -328,7 +326,6 @@ RSpec.describe Form::Sales::Subsections::HouseholdCharacteristics, type: :model working_situation_2_retirement_value_check_joint_purchase working_situation_2_not_retired_value_check_joint_purchase working_situation_buyer_2_income_value_check - buyer_2_working_situation_student_not_child_value_check buyer_2_live_in_property buyer_2_live_in_property_value_check number_of_others_in_property @@ -337,77 +334,62 @@ RSpec.describe Form::Sales::Subsections::HouseholdCharacteristics, type: :model person_2_relationship_to_buyer_1 relationship_2_partner_under_16_value_check relationship_2_multiple_partners_value_check - relationship_2_student_not_child_value_check person_2_age age_2_retirement_value_check age_2_not_retired_value_check - age_2_student_not_child_value_check age_2_partner_under_16_value_check person_2_gender_identity person_2_working_situation working_situation_2_retirement_value_check working_situation_2_not_retired_value_check - working_situation_2_student_not_child_value_check person_3_known person_3_relationship_to_buyer_1 relationship_3_partner_under_16_value_check relationship_3_multiple_partners_value_check - relationship_3_student_not_child_value_check person_3_age age_3_retirement_value_check age_3_not_retired_value_check - age_3_student_not_child_value_check age_3_partner_under_16_value_check person_3_gender_identity person_3_working_situation working_situation_3_retirement_value_check working_situation_3_not_retired_value_check - working_situation_3_student_not_child_value_check person_4_known person_4_relationship_to_buyer_1 relationship_4_partner_under_16_value_check relationship_4_multiple_partners_value_check - relationship_4_student_not_child_value_check person_4_age age_4_retirement_value_check age_4_not_retired_value_check - age_4_student_not_child_value_check age_4_partner_under_16_value_check person_4_gender_identity person_4_working_situation working_situation_4_retirement_value_check working_situation_4_not_retired_value_check - working_situation_4_student_not_child_value_check person_5_known person_5_relationship_to_buyer_1 relationship_5_partner_under_16_value_check relationship_5_multiple_partners_value_check - relationship_5_student_not_child_value_check person_5_age age_5_retirement_value_check age_5_not_retired_value_check - age_5_student_not_child_value_check age_5_partner_under_16_value_check person_5_gender_identity person_5_working_situation working_situation_5_retirement_value_check working_situation_5_not_retired_value_check - working_situation_5_student_not_child_value_check person_6_known person_6_relationship_to_buyer_1 relationship_6_partner_under_16_value_check relationship_6_multiple_partners_value_check - relationship_6_student_not_child_value_check person_6_age age_6_retirement_value_check age_6_not_retired_value_check - age_6_student_not_child_value_check age_6_partner_under_16_value_check person_6_gender_identity person_6_working_situation working_situation_6_retirement_value_check working_situation_6_not_retired_value_check - working_situation_6_student_not_child_value_check ], ) end diff --git a/spec/requests/address_search_controller_spec.rb b/spec/requests/address_search_controller_spec.rb index 5c2acd11a..7c8523abe 100644 --- a/spec/requests/address_search_controller_spec.rb +++ b/spec/requests/address_search_controller_spec.rb @@ -144,5 +144,45 @@ RSpec.describe AddressSearchController, type: :request do expect(sales_log.la).to eq(nil) end end + + context "when searching by address and UPRN" do + let(:sales_log) { create(:sales_log, :completed, manual_address_entry_selected: false, assigned_to: user) } + + context "and theres no uprn returned" do + before do + body = { results: [{ DPA: { "ADDRESS": "1, Test Street", "UPRN": "123" } }] }.to_json + uprn_body = { results: [{ DPA: nil }] }.to_json + WebMock.stub_request(:get, "https://api.os.uk/search/places/v1/find?key=OS_DATA_KEY&maxresults=10&minmatch=0.2&query=100") + .to_return(status: 200, body:, headers: {}) + WebMock.stub_request(:get, "https://api.os.uk/search/places/v1/uprn?dataset=DPA,LPI&key=OS_DATA_KEY&uprn=100") + .to_return(status: 200, body: uprn_body, headers: {}) + end + + it "returns the address results" do + get "/address-search?query=100" + + expect(response).to have_http_status(:ok) + expect(response.body).to eq([{ text: "1, Test Street", value: "123" }].to_json) + end + end + + context "and theres no address returned" do + before do + body = { results: [{ DPA: nil }] }.to_json + uprn_body = { results: [{ DPA: { "ADDRESS": "2, Test Street", UPRN: "321" } }] }.to_json + WebMock.stub_request(:get, "https://api.os.uk/search/places/v1/find?key=OS_DATA_KEY&maxresults=10&minmatch=0.2&query=100") + .to_return(status: 200, body:, headers: {}) + WebMock.stub_request(:get, "https://api.os.uk/search/places/v1/uprn?dataset=DPA,LPI&key=OS_DATA_KEY&uprn=100") + .to_return(status: 200, body: uprn_body, headers: {}) + end + + it "returns the address results" do + get "/address-search?query=100" + + expect(response).to have_http_status(:ok) + expect(response.body).to eq([{ text: "2, Test Street", value: "321" }].to_json) + end + end + end end end diff --git a/spec/requests/check_errors_controller_spec.rb b/spec/requests/check_errors_controller_spec.rb index 71a83a3fa..186bb8749 100644 --- a/spec/requests/check_errors_controller_spec.rb +++ b/spec/requests/check_errors_controller_spec.rb @@ -295,7 +295,7 @@ RSpec.describe CheckErrorsController, type: :request do it "displays correct clear links" do expect(page).to have_content("Make sure these answers are correct") expect(page).to have_link(lettings_log.form.get_question("hhmemb", lettings_log).check_answer_prompt, href: "/lettings-logs/#{lettings_log.id}/household-members?referrer=check_answers_new_answer", class: "govuk-link govuk-link--no-visited-state") - expect(page).to have_link("Answer") + expect(page).to have_link("Enter total number of household members") expect(lettings_log.reload.earnings).to eq(nil) end end @@ -350,7 +350,7 @@ RSpec.describe CheckErrorsController, type: :request do it "displays correct clear links" do expect(page).to have_content("Make sure these answers are correct") expect(page).to have_link(sales_log.form.get_question("income1", sales_log).check_answer_prompt, href: "/sales-logs/#{sales_log.id}/buyer-1-income?referrer=check_answers_new_answer", class: "govuk-link govuk-link--no-visited-state") - expect(page).to have_link("Answer") + expect(page).to have_link("Enter buyer 1’s gross annual income") expect(sales_log.reload.income1).to eq(nil) end end diff --git a/spec/services/bulk_upload/sales/year2024/row_parser_spec.rb b/spec/services/bulk_upload/sales/year2024/row_parser_spec.rb index 90bd87291..b4e9e1b49 100644 --- a/spec/services/bulk_upload/sales/year2024/row_parser_spec.rb +++ b/spec/services/bulk_upload/sales/year2024/row_parser_spec.rb @@ -1063,7 +1063,7 @@ RSpec.describe BulkUpload::Sales::Year2024::RowParser do end context "and all key address fields are present" do - let(:attributes) { setup_section_params.merge({ field_22: nil, field_23: "address line 1", field_25: "town or city", field_27: "AA1", field_28: "1AA" }) } + let(:attributes) { setup_section_params.merge({ field_22: nil, field_23: "address line 1", field_25: "town or city", field_27: "AA1", field_28: "1AA", field_29: "E06000023" }) } context "and an address can be found with a high enough match rating" do before do @@ -1073,7 +1073,7 @@ RSpec.describe BulkUpload::Sales::Year2024::RowParser do it "does not add errors" do parser.valid? - %i[field_22 field_23 field_24 field_25 field_26 field_27 field_28].each do |field| + %i[field_22 field_23 field_24 field_25 field_26 field_27 field_28 field_29].each do |field| expect(parser.errors[field]).to be_empty end end @@ -1092,7 +1092,7 @@ RSpec.describe BulkUpload::Sales::Year2024::RowParser do it "does not add errors" do parser.valid? - %i[field_22 field_23 field_24 field_25 field_26 field_27 field_28].each do |field| + %i[field_22 field_23 field_24 field_25 field_26 field_27 field_28 field_29].each do |field| expect(parser.errors[field]).to be_empty end end @@ -1103,6 +1103,7 @@ RSpec.describe BulkUpload::Sales::Year2024::RowParser do expect(parser.log.address_line1).to eq("address line 1") expect(parser.log.town_or_city).to eq("town or city") expect(parser.log.postcode_full).to eq("AA1 1AA") + expect(parser.log.la).to eq("E06000023") end end diff --git a/spec/services/bulk_upload/sales/year2025/row_parser_spec.rb b/spec/services/bulk_upload/sales/year2025/row_parser_spec.rb index 86f264401..28aac4fea 100644 --- a/spec/services/bulk_upload/sales/year2025/row_parser_spec.rb +++ b/spec/services/bulk_upload/sales/year2025/row_parser_spec.rb @@ -978,7 +978,7 @@ RSpec.describe BulkUpload::Sales::Year2025::RowParser do end context "and all key address fields are present" do - let(:attributes) { setup_section_params.merge({ field_16: nil, field_17: "address line 1", field_19: "town or city", field_21: "AA1", field_22: "1AA" }) } + let(:attributes) { setup_section_params.merge({ field_16: nil, field_17: "address line 1", field_19: "town or city", field_21: "AA1", field_22: "1AA", field_23: "E06000023" }) } context "and an address can be found with a high enough match rating" do before do @@ -988,7 +988,7 @@ RSpec.describe BulkUpload::Sales::Year2025::RowParser do it "does not add errors" do parser.valid? - %i[field_16 field_17 field_18 field_19 field_20 field_21 field_22].each do |field| + %i[field_16 field_17 field_18 field_19 field_20 field_21 field_22 field_23].each do |field| expect(parser.errors[field]).to be_empty end end @@ -1007,7 +1007,7 @@ RSpec.describe BulkUpload::Sales::Year2025::RowParser do it "does not add errors" do parser.valid? - %i[field_16 field_17 field_18 field_19 field_20 field_21 field_22].each do |field| + %i[field_16 field_17 field_18 field_19 field_20 field_21 field_22 field_23].each do |field| expect(parser.errors[field]).to be_empty end end @@ -1018,6 +1018,7 @@ RSpec.describe BulkUpload::Sales::Year2025::RowParser do expect(parser.log.address_line1).to eq("address line 1") expect(parser.log.town_or_city).to eq("town or city") expect(parser.log.postcode_full).to eq("AA1 1AA") + expect(parser.log.la).to eq("E06000023") end end