Browse Source

Update routing and add flash

pull/1584/head
Kat 3 years ago
parent
commit
0be6522a4e
  1. 11
      app/controllers/form_controller.rb
  2. 4
      app/models/form/question.rb
  3. 19
      app/views/form/_interruption_screen_question.html.erb
  4. 25
      spec/features/form/validations_spec.rb

11
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) 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)) 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) redirect_to(successful_redirect_path)
else else
mandatory_questions_with_no_response.map do |question| mandatory_questions_with_no_response.map do |question|
@ -49,7 +50,7 @@ class FormController < ApplicationController
page_id = request.path.split("/")[-1].underscore page_id = request.path.split("/")[-1].underscore
@page = form.get_page(page_id) @page = form.get_page(page_id)
@subsection = form.subsection_for_page(@page) @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" render "form/page"
else else
redirect_to @log.lettings? ? lettings_log_path(@log) : sales_log_path(@log) 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" referrer.present? && CGI.parse(referrer.split("?")[-1]).present? && CGI.parse(referrer.split("?")[-1])["referrer"][0] == "check_answers"
end 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 def successful_redirect_path
if is_referrer_check_answers? if is_referrer_check_answers?
next_page_id = form.next_page_id(@page, @log, current_user) 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) return send("#{@log.model_name.param_key}_#{form.subsection_for_page(@page).id}_check_answers_path", @log)
end end
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) redirect_path = form.next_page_redirect_path(@page, @log, current_user)
send(redirect_path, @log) send(redirect_path, @log)
end end

4
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" "/#{log.model_name.param_key.dasherize}s/#{log.id}/#{page_id.to_s.dasherize}?referrer=check_answers"
end end
def interruption_action_href(log, page_id) def interruption_action_href(log, page_id, current_page_id)
"/#{log.model_name.param_key.dasherize}s/#{log.id}/#{page_id.to_s.dasherize}" "/#{log.model_name.param_key.dasherize}s/#{log.id}/#{page_id.to_s.dasherize}?referrer=#{current_page_id}"
end end
def unanswered?(log) def unanswered?(log)

19
app/views/form/_interruption_screen_question.html.erb

@ -1,11 +1,12 @@
<%= govuk_panel( <% if question.page.routed_to?(@log, current_user) %>
classes: "app-panel--interruption", <%= govuk_panel(
) do %> classes: "app-panel--interruption",
<p class="govuk-heading-l"><%= display_title_text(title_text, lettings_log) %></p> ) do %>
<p class="govuk-body-l"><%= display_informative_text(informative_text, lettings_log) %></p> <p class="govuk-heading-l"><%= display_title_text(title_text, lettings_log) %></p>
<p class="govuk-body-l"><%= question.header %></p> <p class="govuk-body-l"><%= display_informative_text(informative_text, lettings_log) %></p>
<p class="govuk-body-l"><%= question.hint_text&.html_safe %></p> <p class="govuk-body-l"><%= question.header %></p>
<p class="govuk-body-l"><%= question.hint_text&.html_safe %></p>
<% end %>
<% end %> <% end %>
<h1 class="govuk-heading-l"> <h1 class="govuk-heading-l">
@ -36,7 +37,7 @@
<% if @log.collection_period_open? %> <% if @log.collection_period_open? %>
<% row.action( <% row.action(
text: affected_question.action_text(@log), 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, visually_hidden_text: affected_question.check_answer_label.to_s.downcase,
) %> ) %>
<% end %> <% end %>

25
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 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_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}/net-income?referrer=net_income_value_check").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}/person-1-working-situation?referrer=net_income_value_check")
expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/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) 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") 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) fill_in("lettings-log-earnings-field", with: income_under_soft_limit)
choose("lettings-log-incfreq-1-field", allow_label_click: true) choose("lettings-log-incfreq-1-field", allow_label_click: true)
click_button("Save and continue") 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 end
end end

Loading…
Cancel
Save