From 80861fe2d853179caa3267106374878778f1da92 Mon Sep 17 00:00:00 2001 From: natdeanlewissoftwire Date: Tue, 5 Mar 2024 10:47:30 +0000 Subject: [PATCH] feat: handle case when no addresses are found --- .../form/lettings/pages/address_fallback.rb | 9 ++++-- .../form/lettings/pages/address_selection.rb | 3 +- .../lettings/questions/address_selection.rb | 32 +++++++------------ app/models/log.rb | 10 ++++-- 4 files changed, 26 insertions(+), 28 deletions(-) diff --git a/app/models/form/lettings/pages/address_fallback.rb b/app/models/form/lettings/pages/address_fallback.rb index 5e932d913..40f23aff1 100644 --- a/app/models/form/lettings/pages/address_fallback.rb +++ b/app/models/form/lettings/pages/address_fallback.rb @@ -4,9 +4,12 @@ class Form::Lettings::Pages::AddressFallback < ::Form::Page @id = "address" @header = "Q12 - What is the property's address?" @depends_on = [ - { "is_supported_housing?" => false, "uprn_known" => nil, "address_selection" => 10 }, - { "is_supported_housing?" => false, "uprn_known" => 0, "address_selection" => 10 }, - { "is_supported_housing?" => false, "uprn_confirmed" => 0, "address_selection" => 10 }, + { "is_supported_housing?" => false, "uprn_known" => nil, "address_selection" => -1 }, + { "is_supported_housing?" => false, "uprn_known" => 0, "address_selection" => -1 }, + { "is_supported_housing?" => false, "uprn_confirmed" => 0, "address_selection" => -1 }, + { "is_supported_housing?" => false, "uprn_known" => nil, "address_options_present?" => false }, + { "is_supported_housing?" => false, "uprn_known" => 0, "address_options_present?" => false }, + { "is_supported_housing?" => false, "uprn_confirmed" => 0, "address_options_present?" => false }, ] end diff --git a/app/models/form/lettings/pages/address_selection.rb b/app/models/form/lettings/pages/address_selection.rb index 40a48c27b..3ba14e7b8 100644 --- a/app/models/form/lettings/pages/address_selection.rb +++ b/app/models/form/lettings/pages/address_selection.rb @@ -3,6 +3,7 @@ class Form::Lettings::Pages::AddressSelection < ::Form::Page super @id = "address_selection" @header = "We found some addresses that might be this property" + @depends_on = [{ "address_options_present?" => true }] end def questions @@ -12,7 +13,7 @@ class Form::Lettings::Pages::AddressSelection < ::Form::Page end def routed_to?(log, _current_user = nil) - log.uprn_known.present? && log.uprn_known.zero? && log.address_line1_input.present? && log.postcode_full_input.present? + log.uprn_known.present? && log.uprn_known.zero? && log.address_line1_input.present? && log.postcode_full_input.present? && (1..10).cover?(log.address_options.count) end def skip_text diff --git a/app/models/form/lettings/questions/address_selection.rb b/app/models/form/lettings/questions/address_selection.rb index 09fb6a475..2b6ac4099 100644 --- a/app/models/form/lettings/questions/address_selection.rb +++ b/app/models/form/lettings/questions/address_selection.rb @@ -9,30 +9,20 @@ class Form::Lettings::Questions::AddressSelection < ::Form::Question end def answer_options(log = nil, _user = nil) - answer_opts = { "10" => { "value" => "The address is not listed" } } + answer_opts = { "-1" => { "value" => "The address is not listed, I want to enter the address manually" } } return answer_opts unless ActiveRecord::Base.connected? - return answer_opts unless log - return answer_opts unless log.address_options + return answer_opts unless log&.address_options + return answer_opts if log.errors.of_kind?(:address_selection, :address_error) - values = [] - log.address_options.each do |option| - values.append(option) + answer_opts = {} + + (0...[log.address_options.count, 10].min).each do |i| + answer_opts[i.to_s] = { "value" => log.address_options[i] } end - { - "0" => { "value" => values[0] }, - "1" => { "value" => values[1] }, - "2" => { "value" => values[2] }, - "3" => { "value" => values[3] }, - "4" => { "value" => values[4] }, - "5" => { "value" => values[5] }, - "6" => { "value" => values[6] }, - "7" => { "value" => values[7] }, - "8" => { "value" => values[8] }, - "9" => { "value" => values[9] }, - "divider" => { "value" => true }, - "-1" => { "value" => "The address is not listed, I want to enter the address manually" }, - }.freeze + answer_opts["divider"] = { "value" => true } + answer_opts["-1"] = { "value" => "The address is not listed, I want to enter the address manually" } + answer_opts end def displayed_answer_options(log, user = nil) @@ -40,6 +30,6 @@ class Form::Lettings::Questions::AddressSelection < ::Form::Question end def hidden_in_check_answers?(log, _current_user = nil) - (log.uprn_known == 1 || log.uprn_confirmed == 1) + (log.uprn_known == 1 || log.uprn_confirmed == 1) || !(1..10).cover?(log.address_options.count) end end diff --git a/app/models/log.rb b/app/models/log.rb index d06227d5d..5f17167c6 100644 --- a/app/models/log.rb +++ b/app/models/log.rb @@ -55,6 +55,8 @@ class Log < ApplicationRecord attr_accessor :skip_update_status, :skip_update_uprn_confirmed, :skip_update_address_selection, :skip_dpo_validation + delegate :present?, to: :address_options, prefix: true + def process_uprn_change! if uprn.present? service = UprnClient.new(uprn) @@ -109,6 +111,8 @@ class Log < ApplicationRecord end def address_options + return @address_options if @address_options + if [address_line1_input, postcode_full_input].all?(&:present?) address_string = "#{address_line1_input}, , , #{postcode_full_input}" service = AddressClient.new(address_string) @@ -116,13 +120,13 @@ class Log < ApplicationRecord return errors.add(:address_selection, :address_error, message: service.error) if service.error.present? - address_options = [] + address_opts = [] service.result.first(10).each do |result| presenter = AddressDataPresenter.new(result) - address_options.append(presenter.address) + address_opts.append(presenter.address) end - address_options + @address_options = address_opts end end