diff --git a/app/controllers/form_controller.rb b/app/controllers/form_controller.rb
index 95da341fc..b24632b31 100644
--- a/app/controllers/form_controller.rb
+++ b/app/controllers/form_controller.rb
@@ -8,7 +8,9 @@ class FormController < ApplicationController
@page = @case_log.form.get_page(params[:case_log][:page])
responses_for_page = responses_for_page(@page)
if @case_log.update(responses_for_page)
- if @case_log.form.is_last_question?(@page, @case_log.form.subsection_for_page(@page), @case_log)
+ if is_referrer_check_answers?
+ redirect_to(send("case_log_#{@case_log.form.subsection_for_page(@page).id}_check_answers_path", @case_log))
+ elsif @case_log.form.is_last_question?(@page, @case_log.form.subsection_for_page(@page), @case_log)
redirect_to(case_logs_path)
else
redirect_path = @case_log.form.next_page_redirect_path(@page, @case_log)
@@ -88,4 +90,9 @@ private
def find_resource_by_named_id
@case_log = current_user.case_logs.find_by(id: params[:case_log_id])
end
+
+ def is_referrer_check_answers?
+ referrer = request.headers["HTTP_REFERER"].presence || ""
+ referrer.present? && CGI.parse(referrer.split("?")[-1]).present? && CGI.parse(referrer.split("?")[-1])["referrer"][0] == "check_answers"
+ end
end
diff --git a/app/views/form/_check_answers_table.html.erb b/app/views/form/_check_answers_table.html.erb
index 4a2b7183a..ae22a0c14 100644
--- a/app/views/form/_check_answers_table.html.erb
+++ b/app/views/form/_check_answers_table.html.erb
@@ -9,6 +9,6 @@
<% end %>
- <%= govuk_link_to(question.update_answer_link_name(@case_log), "/logs/#{@case_log.id}/#{question.page.id.to_s.dasherize}").html_safe %>
+ <%= govuk_link_to(question.update_answer_link_name(@case_log), "/logs/#{@case_log.id}/#{question.page.id.to_s.dasherize}?referrer=check_answers").html_safe %>
diff --git a/db/schema.rb b/db/schema.rb
index 965fcee3d..008545aab 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -319,6 +319,7 @@ ActiveRecord::Schema[7.0].define(version: 202202071123100) do
t.boolean "is_dpo", default: false
t.boolean "is_key_contact", default: false
t.string "phone"
+ t.boolean "is_dpo", default: false
t.index ["email"], name: "index_users_on_email", unique: true
t.index ["organisation_id"], name: "index_users_on_organisation_id"
t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
diff --git a/spec/features/form/check_answers_page_spec.rb b/spec/features/form/check_answers_page_spec.rb
index 6ef6d7d3b..3bc40ad18 100644
--- a/spec/features/form/check_answers_page_spec.rb
+++ b/spec/features/form/check_answers_page_spec.rb
@@ -71,10 +71,10 @@ RSpec.describe "Form Check Answers Page" do
# Regex explanation: match the string "Answer" but not if it's follow by "the missing questions"
# This way only the links in the table will get picked up
it "has an answer link for questions missing an answer" do
- visit("/logs/#{empty_case_log.id}/#{subsection}/check-answers")
+ visit("/logs/#{empty_case_log.id}/#{subsection}/check-answers?referrer=check_answers")
assert_selector "a", text: /Answer (?!the missing questions)/, count: 5
assert_selector "a", text: "Change", count: 0
- expect(page).to have_link("Answer", href: "/logs/#{empty_case_log.id}/person-1-age")
+ expect(page).to have_link("Answer", href: "/logs/#{empty_case_log.id}/person-1-age?referrer=check_answers")
end
it "has a change link for answered questions" do
@@ -82,7 +82,7 @@ RSpec.describe "Form Check Answers Page" do
visit("/logs/#{empty_case_log.id}/#{subsection}/check-answers")
assert_selector "a", text: /Answer (?!the missing questions)/, count: 4
assert_selector "a", text: "Change", count: 1
- expect(page).to have_link("Change", href: "/logs/#{empty_case_log.id}/person-1-age")
+ expect(page).to have_link("Change", href: "/logs/#{empty_case_log.id}/person-1-age?referrer=check_answers")
end
it "updates the change/answer link when answers get updated" do
@@ -95,7 +95,7 @@ RSpec.describe "Form Check Answers Page" do
visit("/logs/#{empty_case_log.id}/household-needs/check-answers")
assert_selector "a", text: /Answer (?!the missing questions)/, count: 3
assert_selector "a", text: "Change", count: 2
- expect(page).to have_link("Change", href: "/logs/#{empty_case_log.id}/accessibility-requirements")
+ expect(page).to have_link("Change", href: "/logs/#{empty_case_log.id}/accessibility-requirements?referrer=check_answers")
end
it "does not display conditional questions that were not visited" do
@@ -127,6 +127,18 @@ RSpec.describe "Form Check Answers Page" do
end
end
+ context "when the user changes their answer" do
+ it "routes back to check answers" do
+ visit("/logs/#{empty_case_log.id}/accessibility-requirements")
+ check("case-log-accessibility-requirements-housingneeds-c-field")
+ click_button("Save and continue")
+ visit("/logs/#{empty_case_log.id}/household-needs/check-answers")
+ first("a", text: /Change/).click
+ click_button("Save and continue")
+ expect(page).to have_current_path("/logs/#{empty_case_log.id}/household-needs/check-answers")
+ end
+ end
+
context "when the user wants to bypass the tasklist page from check answers" do
let(:section_completed_case_log) do
FactoryBot.create(