From a38d6a265fd61772830712c8e3589ac5acf42d5d Mon Sep 17 00:00:00 2001 From: kosiakkatrina <54268893+kosiakkatrina@users.noreply.github.com> Date: Mon, 25 Mar 2024 08:13:05 +0000 Subject: [PATCH] CLDC-3334 Improve address search flow (#2339) * Refactor page buttons * Immediately show address search results --- app/controllers/form_controller.rb | 2 +- app/helpers/form_page_helper.rb | 28 +++++++ .../form/lettings/pages/address_matcher.rb | 4 + app/models/form/page.rb | 3 +- .../form/sales/pages/address_matcher.rb | 4 + app/views/form/page.html.erb | 15 +--- spec/features/form/form_navigation_spec.rb | 83 ++++++++++++++++--- 7 files changed, 113 insertions(+), 26 deletions(-) diff --git a/app/controllers/form_controller.rb b/app/controllers/form_controller.rb index ae23e564b..117a4ac19 100644 --- a/app/controllers/form_controller.rb +++ b/app/controllers/form_controller.rb @@ -249,7 +249,7 @@ private redirect_to lettings_log_path(@log) unless @log.collection_period_open_for_editing? end - CONFIRMATION_PAGE_IDS = %w[uprn_confirmation].freeze + CONFIRMATION_PAGE_IDS = %w[uprn_confirmation uprn_selection].freeze def correcting_duplicate_logs_redirect_path class_name = @log.class.name.underscore diff --git a/app/helpers/form_page_helper.rb b/app/helpers/form_page_helper.rb index aefbed1c1..dc471da1c 100644 --- a/app/helpers/form_page_helper.rb +++ b/app/helpers/form_page_helper.rb @@ -18,4 +18,32 @@ module FormPageHelper def relevant_check_answers_path(log, subsection) send("#{log.class.name.underscore}_#{subsection.id}_check_answers_path", log) end + + def submit_button_text(page, referrer) + return page.submit_text if page.submit_text.present? + + if accessed_from_duplicate_logs?(referrer) || returning_to_question_page?(page, referrer) + "Save changes" + else + "Save and continue" + end + end + + def cancel_button_text(page, referrer) + if accessed_from_duplicate_logs?(referrer) || returning_to_question_page?(page, referrer) + "Cancel" + else + page.skip_text || "Skip for now" + end + end + + def cancel_button_link(page, referrer, original_log_id, log) + if accessed_from_duplicate_logs?(referrer) + duplicate_log_set_path(log, original_log_id) + elsif returning_to_question_page?(page, referrer) + send(log.form.cancel_path(page, log), log) + else + page.skip_href(log) || send(log.form.next_page_redirect_path(page, log, current_user), log) + end + end end diff --git a/app/models/form/lettings/pages/address_matcher.rb b/app/models/form/lettings/pages/address_matcher.rb index 2f19519b8..a48eb21c3 100644 --- a/app/models/form/lettings/pages/address_matcher.rb +++ b/app/models/form/lettings/pages/address_matcher.rb @@ -16,4 +16,8 @@ class Form::Lettings::Pages::AddressMatcher < ::Form::Page Form::Lettings::Questions::PostcodeForAddressMatcher.new(nil, nil, self), ] end + + def submit_text + "Search" + end end diff --git a/app/models/form/page.rb b/app/models/form/page.rb index 498c69d7b..6485ceb07 100644 --- a/app/models/form/page.rb +++ b/app/models/form/page.rb @@ -1,7 +1,7 @@ class Form::Page attr_accessor :id, :header, :header_partial, :description, :questions, :depends_on, :title_text, :informative_text, :subsection, :hide_subsection_label, :next_unresolved_page_id, - :skip_text, :interruption_screen_question_ids + :skip_text, :interruption_screen_question_ids, :submit_text def initialize(id, hsh, subsection) @id = id @@ -17,6 +17,7 @@ class Form::Page @hide_subsection_label = hsh["hide_subsection_label"] @next_unresolved_page_id = hsh["next_unresolved_page_id"] @skip_text = hsh["skip_text"] + @submit_text = hsh["submit_text"] @interruption_screen_question_ids = hsh["interruption_screen_question_ids"] || [] end end diff --git a/app/models/form/sales/pages/address_matcher.rb b/app/models/form/sales/pages/address_matcher.rb index f4a02972c..033b398c8 100644 --- a/app/models/form/sales/pages/address_matcher.rb +++ b/app/models/form/sales/pages/address_matcher.rb @@ -16,4 +16,8 @@ class Form::Sales::Pages::AddressMatcher < ::Form::Page Form::Sales::Questions::PostcodeForAddressMatcher.new(nil, nil, self), ] end + + def submit_text + "Search" + end end diff --git a/app/views/form/page.html.erb b/app/views/form/page.html.erb index 32ccdaed5..fffc22411 100644 --- a/app/views/form/page.html.erb +++ b/app/views/form/page.html.erb @@ -72,19 +72,8 @@
diff --git a/spec/features/form/form_navigation_spec.rb b/spec/features/form/form_navigation_spec.rb index bb326c76c..9e43dd682 100644 --- a/spec/features/form/form_navigation_spec.rb +++ b/spec/features/form/form_navigation_spec.rb @@ -2,16 +2,7 @@ require "rails_helper" require_relative "helpers" RSpec.describe "Form Navigation" do - around do |example| - Timecop.travel(Time.zone.local(2022, 1, 1)) do - Singleton.__init__(FormHandler) - example.run - end - Timecop.return - Singleton.__init__(FormHandler) - end - - include Helpers + let(:now) { Time.zone.local(2022, 1, 1) } let(:user) { FactoryBot.create(:user) } let(:lettings_log) do FactoryBot.create( @@ -30,7 +21,6 @@ RSpec.describe "Form Navigation" do created_by: user, ) end - let(:id) { lettings_log.id } let(:question_answers) do { @@ -43,6 +33,17 @@ RSpec.describe "Form Navigation" do end let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json") } + around do |example| + Timecop.travel(now) do + Singleton.__init__(FormHandler) + example.run + end + Timecop.return + Singleton.__init__(FormHandler) + end + + include Helpers + before do allow(lettings_log.form).to receive(:new_logs_end_date).and_return(Time.zone.today + 1.day) allow(fake_2021_2022_form).to receive(:new_logs_end_date).and_return(Time.zone.today + 1.day) @@ -185,4 +186,64 @@ RSpec.describe "Form Navigation" do expect(page).to have_current_path("/lettings-logs/#{id}/duplicate-logs?original_log_id=#{id}") end end + + describe "searching for an address" do + let(:now) { Time.zone.local(2024, 5, 1) } + + context "with a lettings log" do + let(:lettings_log) { create(:lettings_log, :completed, startdate: Time.zone.local(2024, 5, 5), created_by: user) } + + before do + stub_request(:get, /api\.os\.uk/) + .to_return(status: 200, body: { results: [{ DPA: { MATCH: 0.9, BUILDING_NAME: "result address line 1", POST_TOWN: "result town or city", POSTCODE: "AA1 1AA", UPRN: "12345" } }] }.to_json, headers: {}) + end + + it "allows searching for an address" do + visit("lettings-logs/#{id}/address-matcher") + fill_in("lettings-log-address-line1-input-field", with: "address") + fill_in("lettings-log-postcode-full-input-field", with: "A1 1AA") + click_button(text: "Search") + expect(page).to have_current_path("/lettings-logs/#{id}/uprn-selection") + end + + it "allows searching for an address from check your answers page" do + visit("lettings-logs/#{id}/address-matcher?referrer=check_answers") + fill_in("lettings-log-address-line1-input-field", with: "address") + fill_in("lettings-log-postcode-full-input-field", with: "A1 1AA") + click_button(text: "Search") + expect(page).to have_current_path("/lettings-logs/#{id}/uprn-selection?referrer=check_answers") + choose("lettings-log-uprn-selection-12345-field", allow_label_click: true) + click_button(text: "Save changes") + expect(page).to have_current_path("/lettings-logs/#{id}/property-information/check-answers") + end + end + + context "with a sales log" do + let(:sales_log) { create(:sales_log, :completed, saledate: Time.zone.local(2024, 5, 5), created_by: user) } + + before do + stub_request(:get, /api\.os\.uk/) + .to_return(status: 200, body: { results: [{ DPA: { MATCH: 0.9, BUILDING_NAME: "result address line 1", POST_TOWN: "result town or city", POSTCODE: "AA1 1AA", UPRN: "12345" } }] }.to_json, headers: {}) + end + + it "allows searching for an address" do + visit("sales-logs/#{sales_log.id}/address-matcher") + fill_in("sales-log-address-line1-input-field", with: "address") + fill_in("sales-log-postcode-full-input-field", with: "A1 1AA") + click_button(text: "Search") + expect(page).to have_current_path("/sales-logs/#{sales_log.id}/uprn-selection") + end + + it "allows searching for an address from check your answers page" do + visit("sales-logs/#{sales_log.id}/address-matcher?referrer=check_answers") + fill_in("sales-log-address-line1-input-field", with: "address") + fill_in("sales-log-postcode-full-input-field", with: "A1 1AA") + click_button(text: "Search") + expect(page).to have_current_path("/sales-logs/#{sales_log.id}/uprn-selection?referrer=check_answers") + choose("sales-log-uprn-selection-12345-field", allow_label_click: true) + click_button(text: "Save changes") + expect(page).to have_current_path("/sales-logs/#{sales_log.id}/property-information/check-answers") + end + end + end end