From 7e638657fb99fdd5b54b86fd8fcf5e3b2ff765f0 Mon Sep 17 00:00:00 2001 From: kosiakkatrina <54268893+kosiakkatrina@users.noreply.github.com> Date: Tue, 7 May 2024 09:54:49 +0100 Subject: [PATCH] CLDC-3354 Show user input on address selection page (#2374) * Display input playback on the page * Add input playback to uprn selection pages --- .../form/lettings/questions/uprn_selection.rb | 8 ++++ app/models/form/question.rb | 2 + .../form/sales/questions/uprn_selection.rb | 8 ++++ app/views/form/_radio_question.html.erb | 4 ++ .../lettings/questions/uprn_selection_spec.rb | 38 ++++++++++++++++++- .../sales/questions/uprn_selection_spec.rb | 38 ++++++++++++++++++- spec/views/form/page_view_spec.rb | 17 +++++++++ 7 files changed, 113 insertions(+), 2 deletions(-) diff --git a/app/models/form/lettings/questions/uprn_selection.rb b/app/models/form/lettings/questions/uprn_selection.rb index d7f412c66..f6c71f498 100644 --- a/app/models/form/lettings/questions/uprn_selection.rb +++ b/app/models/form/lettings/questions/uprn_selection.rb @@ -31,4 +31,12 @@ class Form::Lettings::Questions::UprnSelection < ::Form::Question def hidden_in_check_answers?(log, _current_user = nil) (log.uprn_known == 1 || log.uprn_confirmed == 1) || !(1..10).cover?(log.address_options&.count) end + + def input_playback(log = nil) + return unless log&.address_line1_input || log&.postcode_full_input + + address_options_count = answer_options(log).count > 1 ? answer_options(log).count - 2 : 0 + searched_address = [log.address_line1_input, log.postcode_full_input].select(&:present?).map { |x| "#{x}" }.join(" and ") + "#{address_options_count} #{'address'.pluralize(address_options_count)} found for #{searched_address}. Search again".html_safe + end end diff --git a/app/models/form/question.rb b/app/models/form/question.rb index 20b73f5d8..aa019c1c6 100644 --- a/app/models/form/question.rb +++ b/app/models/form/question.rb @@ -60,6 +60,8 @@ class Form::Question def notification_banner(_log = nil); end + def input_playback(_log = nil); end + def get_inferred_answers(log) return [] unless inferred_answers diff --git a/app/models/form/sales/questions/uprn_selection.rb b/app/models/form/sales/questions/uprn_selection.rb index 2ffb679db..f916dcd47 100644 --- a/app/models/form/sales/questions/uprn_selection.rb +++ b/app/models/form/sales/questions/uprn_selection.rb @@ -31,4 +31,12 @@ class Form::Sales::Questions::UprnSelection < ::Form::Question def hidden_in_check_answers?(log, _current_user = nil) (log.uprn_known == 1 || log.uprn_confirmed == 1) || !(1..10).cover?(log.address_options&.count) end + + def input_playback(log = nil) + return unless log&.address_line1_input || log&.postcode_full_input + + address_options_count = answer_options(log).count > 1 ? answer_options(log).count - 2 : 0 + searched_address = [log.address_line1_input, log.postcode_full_input].select(&:present?).map { |x| "#{x}" }.join(" and ") + "#{address_options_count} #{'address'.pluralize(address_options_count)} found for #{searched_address}. Search again".html_safe + end end diff --git a/app/views/form/_radio_question.html.erb b/app/views/form/_radio_question.html.erb index d126b89d8..c15b31b58 100644 --- a/app/views/form/_radio_question.html.erb +++ b/app/views/form/_radio_question.html.erb @@ -8,6 +8,10 @@ simple_format(banner[:heading]) end %> <% end %> + <% input_playback = question.input_playback(@log) %> + <% if input_playback %> +

<%= input_playback %>

+ <% end %> <%= f.govuk_radio_buttons_fieldset question.id.to_sym, caption: caption(caption_text, page_header, conditional), diff --git a/spec/models/form/lettings/questions/uprn_selection_spec.rb b/spec/models/form/lettings/questions/uprn_selection_spec.rb index 7ecd133ce..8e3d38bf7 100644 --- a/spec/models/form/lettings/questions/uprn_selection_spec.rb +++ b/spec/models/form/lettings/questions/uprn_selection_spec.rb @@ -5,7 +5,7 @@ RSpec.describe Form::Lettings::Questions::UprnSelection, type: :model do let(:question_id) { nil } let(:question_definition) { nil } - let(:page) { instance_double(Form::Page) } + let(:page) { instance_double(Form::Page, skip_href: "skip_href") } let(:log) { create(:lettings_log, :in_progress, address_line1_input: "Address line 1", postcode_full_input: "AA1 1AA") } let(:address_client_instance) { AddressClient.new(log.address_string) } @@ -99,4 +99,40 @@ RSpec.describe Form::Lettings::Questions::UprnSelection, type: :model do expect(question.hidden_in_check_answers?(log)).to eq(true) end end + + context "when the log has address line 1 input only" do + before do + log.address_line1_input = "Address line 1" + log.postcode_full_input = nil + log.save!(valudate: false) + end + + it "has the correct input_playback" do + expect(question.input_playback(log)).to eq("0 addresses found for Address line 1. Search again") + end + end + + context "when the log has postcode input only" do + before do + log.address_line1_input = nil + log.postcode_full_input = "A1 1AA" + log.save!(valudate: false) + end + + it "has the correct input_playback" do + expect(question.input_playback(log)).to eq("0 addresses found for A1 1AA. Search again") + end + end + + context "when the log has address line 1 and postcode inputs" do + before do + log.address_line1_input = "Address line 1" + log.postcode_full_input = "A1 1AA" + log.save!(valudate: false) + end + + it "has the correct input_playback" do + expect(question.input_playback(log)).to eq("1 address found for Address line 1 and A1 1AA. Search again") + end + end end diff --git a/spec/models/form/sales/questions/uprn_selection_spec.rb b/spec/models/form/sales/questions/uprn_selection_spec.rb index 621a3955e..5f7951c3d 100644 --- a/spec/models/form/sales/questions/uprn_selection_spec.rb +++ b/spec/models/form/sales/questions/uprn_selection_spec.rb @@ -5,7 +5,7 @@ RSpec.describe Form::Sales::Questions::UprnSelection, type: :model do let(:question_id) { nil } let(:question_definition) { nil } - let(:page) { instance_double(Form::Page) } + let(:page) { instance_double(Form::Page, skip_href: "skip_href") } let(:log) { create(:sales_log, :in_progress, address_line1_input: "Address line 1", postcode_full_input: "AA1 1AA") } let(:address_client_instance) { AddressClient.new(log.address_string) } @@ -99,4 +99,40 @@ RSpec.describe Form::Sales::Questions::UprnSelection, type: :model do expect(question.hidden_in_check_answers?(log)).to eq(true) end end + + context "when the log has address line 1 input only" do + before do + log.address_line1_input = "Address line 1" + log.postcode_full_input = nil + log.save!(valudate: false) + end + + it "has the correct input_playback" do + expect(question.input_playback(log)).to eq("0 addresses found for Address line 1. Search again") + end + end + + context "when the log has postcode input only" do + before do + log.address_line1_input = nil + log.postcode_full_input = "A1 1AA" + log.save!(valudate: false) + end + + it "has the correct input_playback" do + expect(question.input_playback(log)).to eq("0 addresses found for A1 1AA. Search again") + end + end + + context "when the log has address line 1 and postcode inputs" do + before do + log.address_line1_input = "Address line 1" + log.postcode_full_input = "A1 1AA" + log.save!(valudate: false) + end + + it "has the correct input_playback" do + expect(question.input_playback(log)).to eq("1 address found for Address line 1 and A1 1AA. Search again") + end + end end diff --git a/spec/views/form/page_view_spec.rb b/spec/views/form/page_view_spec.rb index 6664981f9..16c4c0672 100644 --- a/spec/views/form/page_view_spec.rb +++ b/spec/views/form/page_view_spec.rb @@ -150,4 +150,21 @@ RSpec.describe "form/page" do end end end + + context "with a question containing input playback" do + let(:expected_playback) { /This is input playback/ } + + context "with radio type" do + let(:question_attributes) { { type: "radio", answer_options: { "1": "A", "2": "B" } } } + + before do + allow(question).to receive(:input_playback).and_return("This is input playback") + render + end + + it "renders the input playback for radio questions" do + expect(rendered).to match(expected_playback) + end + end + end end