Browse Source

return the user back to the check_your_answers after fixing a validation from check_your_anwers

pull/1584/head
Kat 3 years ago
parent
commit
ce535c84a3
  1. 23
      app/controllers/form_controller.rb
  2. 1
      app/views/form/page.html.erb
  3. 15
      spec/features/form/validations_spec.rb
  4. 11
      spec/fixtures/forms/2021_2022.json

23
app/controllers/form_controller.rb

@ -48,6 +48,7 @@ class FormController < ApplicationController
def show_page def show_page
if request.params["referrer"] == "interruption_screen" if request.params["referrer"] == "interruption_screen"
@interruption_page_id = URI.parse(request.headers["HTTP_REFERER"]).path.split("/").last.underscore @interruption_page_id = URI.parse(request.headers["HTTP_REFERER"]).path.split("/").last.underscore
@interruption_page_referrer_type = referrer_from_query
end end
if @log if @log
@ -121,20 +122,30 @@ private
end end
def is_referrer_type?(referrer_type) def is_referrer_type?(referrer_type)
referrer_from_query == referrer_type
end
def referrer_from_query
referrer = request.headers["HTTP_REFERER"] referrer = request.headers["HTTP_REFERER"]
return false unless referrer return nil unless referrer
query_params = URI.parse(referrer).query query_params = URI.parse(referrer).query
return false unless query_params return nil unless query_params
parsed_params = CGI.parse(query_params) parsed_params = CGI.parse(query_params)
parsed_params["referrer"].present? && parsed_params["referrer"][0] == referrer_type return nil unless parsed_params["referrer"]
parsed_params["referrer"][0]
end end
def previous_interruption_screen_page_id def previous_interruption_screen_page_id
params[@log.model_name.param_key]["interruption_page_id"] params[@log.model_name.param_key]["interruption_page_id"]
end end
def previous_interruption_screen_referrer
params[@log.model_name.param_key]["interruption_page_referrer_type"]
end
def successful_redirect_path def successful_redirect_path
if is_referrer_type?("check_answers") if is_referrer_type?("check_answers")
next_page_id = form.next_page_id(@page, @log, current_user) next_page_id = form.next_page_id(@page, @log, current_user)
@ -148,7 +159,11 @@ private
end end
end end
if previous_interruption_screen_page_id.present? if previous_interruption_screen_page_id.present?
return send("#{@log.class.name.underscore}_#{previous_interruption_screen_page_id}_path", @log) if previous_interruption_screen_referrer.present?
return send("#{@log.class.name.underscore}_#{previous_interruption_screen_page_id}_path", @log, referrer: previous_interruption_screen_referrer)
else
return send("#{@log.class.name.underscore}_#{previous_interruption_screen_page_id}_path", @log)
end
end end
redirect_path = form.next_page_redirect_path(@page, @log, current_user) redirect_path = form.next_page_redirect_path(@page, @log, current_user)

1
app/views/form/page.html.erb

@ -60,6 +60,7 @@
<%= f.hidden_field :page, value: @page.id %> <%= f.hidden_field :page, value: @page.id %>
<%= f.hidden_field :interruption_page_id, value: @interruption_page_id %> <%= f.hidden_field :interruption_page_id, value: @interruption_page_id %>
<%= f.hidden_field :interruption_page_referrer_type, value: @interruption_page_referrer_type %>
<div class="govuk-button-group"> <div class="govuk-button-group">
<% if !@page.interruption_screen? && if request.query_parameters["referrer"] != "check_answers" %> <% if !@page.interruption_screen? && if request.query_parameters["referrer"] != "check_answers" %>

15
spec/features/form/validations_spec.rb

@ -180,6 +180,21 @@ RSpec.describe "validations" 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_css(".govuk-notification-banner.govuk-notification-banner--success") expect(page).to have_css(".govuk-notification-banner.govuk-notification-banner--success")
end end
it "returns the user back to the check_your_answers after fixing a validation from check_your_anwers" do
lettings_log.update!(earnings: income_over_soft_limit, incfreq: 1)
visit("/lettings-logs/#{lettings_log.id}/income-and-benefits/check-answers")
click_link("Answer", href: "/lettings-logs/#{lettings_log.id}/net-income-value-check?referrer=check_answers")
expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/net-income-value-check?referrer=check_answers")
click_link("Change", href: "/lettings-logs/#{lettings_log.id}/net-income?referrer=interruption_screen", match: :first)
expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/net-income?referrer=interruption_screen")
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-value-check?referrer=check_answers")
click_button("Confirm and continue")
expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/income-and-benefits/check-answers")
end
end end
end end

11
spec/fixtures/forms/2021_2022.json vendored

@ -768,7 +768,16 @@
"questions": { "questions": {
"net_income_value_check": { "net_income_value_check": {
"check_answer_label": "Net income soft validation", "check_answer_label": "Net income soft validation",
"hidden_in_check_answers": true, "hidden_in_check_answers": {
"depends_on": [
{
"net_income_value_check": 0
},
{
"net_income_value_check": 1
}
]
},
"header": "Are you sure this is correct?", "header": "Are you sure this is correct?",
"type": "interruption_screen", "type": "interruption_screen",
"answer_options": { "answer_options": {

Loading…
Cancel
Save