From 0be6522a4e72536b6dd7b920f3ddd649d632ab3a Mon Sep 17 00:00:00 2001 From: Kat Date: Mon, 24 Apr 2023 15:10:42 +0100 Subject: [PATCH] Update routing and add flash --- app/controllers/form_controller.rb | 11 +++++++- app/models/form/question.rb | 4 +-- .../_interruption_screen_question.html.erb | 19 +++++++------- spec/features/form/validations_spec.rb | 25 +++++++++++++++---- 4 files changed, 42 insertions(+), 17 deletions(-) diff --git a/app/controllers/form_controller.rb b/app/controllers/form_controller.rb index dbc5ba490..0568369fb 100644 --- a/app/controllers/form_controller.rb +++ b/app/controllers/form_controller.rb @@ -11,6 +11,7 @@ class FormController < ApplicationController mandatory_questions_with_no_response = mandatory_questions_with_no_response(responses_for_page) if mandatory_questions_with_no_response.empty? && @log.update(responses_for_page.merge(updated_by: current_user)) + flash[:notice] = "You have successfully updated #{@page.questions.map(&:check_answer_label).join(', ')}" if interruprion_screen_referrer.present? redirect_to(successful_redirect_path) else mandatory_questions_with_no_response.map do |question| @@ -49,7 +50,7 @@ class FormController < ApplicationController page_id = request.path.split("/")[-1].underscore @page = form.get_page(page_id) @subsection = form.subsection_for_page(@page) - if @page.routed_to?(@log, current_user) + if @page.routed_to?(@log, current_user) || @page.interruption_screen? render "form/page" else redirect_to @log.lettings? ? lettings_log_path(@log) : sales_log_path(@log) @@ -120,6 +121,11 @@ private referrer.present? && CGI.parse(referrer.split("?")[-1]).present? && CGI.parse(referrer.split("?")[-1])["referrer"][0] == "check_answers" end + def interruprion_screen_referrer + referrer = request.headers["HTTP_REFERER"].presence || "" + return CGI.parse(referrer.split("?")[-1])["referrer"][0] if referrer.present? && CGI.parse(referrer.split("?")[-1]).present? + end + def successful_redirect_path if is_referrer_check_answers? next_page_id = form.next_page_id(@page, @log, current_user) @@ -132,6 +138,9 @@ private return send("#{@log.model_name.param_key}_#{form.subsection_for_page(@page).id}_check_answers_path", @log) end end + if interruprion_screen_referrer.present? + return send("#{@log.class.name.underscore}_#{interruprion_screen_referrer}_path", @log) + end redirect_path = form.next_page_redirect_path(@page, @log, current_user) send(redirect_path, @log) end diff --git a/app/models/form/question.rb b/app/models/form/question.rb index 7b04b48f8..0a1f66831 100644 --- a/app/models/form/question.rb +++ b/app/models/form/question.rb @@ -126,8 +126,8 @@ class Form::Question "/#{log.model_name.param_key.dasherize}s/#{log.id}/#{page_id.to_s.dasherize}?referrer=check_answers" end - def interruption_action_href(log, page_id) - "/#{log.model_name.param_key.dasherize}s/#{log.id}/#{page_id.to_s.dasherize}" + def interruption_action_href(log, page_id, current_page_id) + "/#{log.model_name.param_key.dasherize}s/#{log.id}/#{page_id.to_s.dasherize}?referrer=#{current_page_id}" end def unanswered?(log) diff --git a/app/views/form/_interruption_screen_question.html.erb b/app/views/form/_interruption_screen_question.html.erb index 07081c005..7daef4553 100644 --- a/app/views/form/_interruption_screen_question.html.erb +++ b/app/views/form/_interruption_screen_question.html.erb @@ -1,11 +1,12 @@ -<%= govuk_panel( - classes: "app-panel--interruption", -) do %> -

<%= display_title_text(title_text, lettings_log) %>

-

<%= display_informative_text(informative_text, lettings_log) %>

-

<%= question.header %>

-

<%= question.hint_text&.html_safe %>

- +<% if question.page.routed_to?(@log, current_user) %> + <%= govuk_panel( + classes: "app-panel--interruption", + ) do %> +

<%= display_title_text(title_text, lettings_log) %>

+

<%= display_informative_text(informative_text, lettings_log) %>

+

<%= question.header %>

+

<%= question.hint_text&.html_safe %>

+ <% end %> <% end %>

@@ -36,7 +37,7 @@ <% if @log.collection_period_open? %> <% row.action( text: affected_question.action_text(@log), - href: affected_question.interruption_action_href(@log, affected_question.page.id), + href: affected_question.interruption_action_href(@log, affected_question.page.id, question.page.id), visually_hidden_text: affected_question.check_answer_label.to_s.downcase, ) %> <% end %> diff --git a/spec/features/form/validations_spec.rb b/spec/features/form/validations_spec.rb index 6c02855a2..c7c611266 100644 --- a/spec/features/form/validations_spec.rb +++ b/spec/features/form/validations_spec.rb @@ -156,15 +156,30 @@ RSpec.describe "validations" do it "allows to fix the questions that trigger the soft validation" do expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/net-income-value-check") - expect(page).to have_link("Change", href: "/lettings-logs/#{lettings_log.id}/net-income").twice - expect(page).to have_link("Change", href: "/lettings-logs/#{lettings_log.id}/person-1-working-situation") + expect(page).to have_link("Change", href: "/lettings-logs/#{lettings_log.id}/net-income?referrer=net_income_value_check").twice + expect(page).to have_link("Change", href: "/lettings-logs/#{lettings_log.id}/person-1-working-situation?referrer=net_income_value_check") expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/net-income-value-check") - click_link("Change", href: "/lettings-logs/#{lettings_log.id}/net-income", match: :first) - expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/net-income") + click_link("Change", href: "/lettings-logs/#{lettings_log.id}/net-income?referrer=net_income_value_check", match: :first) + expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/net-income?referrer=net_income_value_check") fill_in("lettings-log-earnings-field", with: income_under_soft_limit) choose("lettings-log-incfreq-1-field", allow_label_click: true) click_button("Save and continue") - expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/net-income-uc-proportion") # will need change to the interruption screen + expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/net-income-value-check") + expect(page).not_to have_content("Net income is outside the expected range based on the lead tenant’s working situation") + expect(page).to have_css(".govuk-notification-banner.govuk-notification-banner--success") + end + + it "allows to fix the questions from different sections" do + expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/net-income-value-check") + expect(page).to have_link("Change", href: "/lettings-logs/#{lettings_log.id}/net-income?referrer=net_income_value_check").twice + expect(page).to have_link("Change", href: "/lettings-logs/#{lettings_log.id}/person-1-working-situation?referrer=net_income_value_check") + expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/net-income-value-check") + click_link("Change", href: "/lettings-logs/#{lettings_log.id}/person-1-working-situation?referrer=net_income_value_check") + expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/person-1-working-situation?referrer=net_income_value_check") + choose("lettings-log-ecstat1-10-field", allow_label_click: true) + click_button("Save and continue") + expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/net-income-value-check") + expect(page).to have_css(".govuk-notification-banner.govuk-notification-banner--success") end end end