diff --git a/app/controllers/form_controller.rb b/app/controllers/form_controller.rb index 5182aeea5..8ddd160d6 100644 --- a/app/controllers/form_controller.rb +++ b/app/controllers/form_controller.rb @@ -1,36 +1,26 @@ class FormController < ApplicationController before_action :authenticate_user! - before_action :find_resource, only: [:submit_form, :review] - before_action :find_resource_by_named_id, except: [:submit_form, :review] + before_action :find_resource, only: %i[submit_form review] + before_action :find_resource_by_named_id, except: %i[submit_form review] def submit_form if @case_log - if is_referrer_review? - if @case_log.completed? - redirect_to(case_logs_path, flash: { notice: "Log #{@case_log.id} has been submitted" }) + @page = @case_log.form.get_page(params[:case_log][:page]) + responses_for_page = responses_for_page(@page) + if @case_log.update(responses_for_page) + session[:errors] = nil + if is_referrer_check_answers? && !@case_log.form.next_page(@page, @case_log).to_s.include?("value_check") + 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 - @case_log.errors.add :base, "All mandatory fields have not been completed, please refer to section status" - session[:review_errors] = @case_log.errors.to_json - redirect_to(review_case_log_path) - end - else - @page = @case_log.form.get_page(params[:case_log][:page]) - responses_for_page = responses_for_page(@page) - if @case_log.update(responses_for_page) - session[:errors] = nil - if is_referrer_check_answers? && !@case_log.form.next_page(@page, @case_log).to_s.include?("value_check") - 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) - redirect_to(send(redirect_path, @case_log)) - end - else - redirect_path = "case_log_#{@page.id}_path" - session[:errors] = @case_log.errors.to_json + redirect_path = @case_log.form.next_page_redirect_path(@page, @case_log) redirect_to(send(redirect_path, @case_log)) end + else + redirect_path = "case_log_#{@page.id}_path" + session[:errors] = @case_log.errors.to_json + redirect_to(send(redirect_path, @case_log)) end else render_not_found @@ -38,7 +28,6 @@ class FormController < ApplicationController end def check_answers - session[:review_errors] = nil if @case_log current_url = request.env["PATH_INFO"] subsection = @case_log.form.get_subsection(current_url.split("/")[-2]) @@ -50,16 +39,11 @@ class FormController < ApplicationController def review if @case_log - if session[:review_errors] - JSON(session[:review_errors]).each do |field, messages| - messages.each { |message| @case_log.errors.add field.to_sym, message } - end - end render "form/review" else render_not_found end - end + end FormHandler.instance.forms.each do |_key, form| form.pages.map do |page| @@ -127,9 +111,4 @@ private referrer = request.headers["HTTP_REFERER"].presence || "" referrer.present? && CGI.parse(referrer.split("?")[-1]).present? && CGI.parse(referrer.split("?")[-1])["referrer"][0] == "check_answers" end - - def is_referrer_review? - referrer = request.headers["HTTP_REFERER"].presence || "" - referrer.present? && referrer.split("/")[-1].present? && referrer.split("/")[-1] == "review" - end end diff --git a/app/models/form/question.rb b/app/models/form/question.rb index d5133cc1a..9cf8d0fa7 100644 --- a/app/models/form/question.rb +++ b/app/models/form/question.rb @@ -175,6 +175,7 @@ private def checkbox_answer_label(case_log) answer = [] return "Yes" if id == "declaration" && value_is_yes?(case_log["declaration"]) + answer_options.each { |key, options| value_is_yes?(case_log[key]) ? answer << options["value"] : nil } answer.join(", ") end diff --git a/app/views/form/review.html.erb b/app/views/form/review.html.erb index b3131a200..c4f058400 100644 --- a/app/views/form/review.html.erb +++ b/app/views/form/review.html.erb @@ -5,34 +5,30 @@ "Review lettings log" => "" }) %> -<%= form_with model: @case_log, url: form_case_log_path(@case_log), method: "post" do |f| %> - <%= f.govuk_error_summary %> -
-
-

- <%= content_for(:title) %> -

- <% @case_log.form.sections.map do |section| %> -

<%= section.label %>

- <% section.subsections.map do |subsection| %> -
-
-

<%= subsection.label %>

-
-
-
- <% subsection.applicable_questions(@case_log).each do |question| %> - <%= render partial: 'form/check_answers_table', locals: { question: question, case_log: @case_log } %> - <% end %> -
-
+
+
+

+ <%= content_for(:title) %> +

+ <% @case_log.form.sections.map do |section| %> +

<%= section.label %>

+ <% section.subsections.map do |subsection| %> +
+
+

<%= subsection.label %>

- <% end %> +
+
+ <% subsection.applicable_questions(@case_log).each do |question| %> + <%= render partial: 'form/check_answers_table', locals: { question: question, case_log: @case_log } %> + <% end %> +
+
+
<% end %> -
- You can submit changes to this log until the close of the current collection year, 31 March 2022. -
+ <% end %> +
+ You can submit changes to this log until the close of the current collection year, 31 March <%= @case_log.collection_start_year.present? ? @case_log.collection_start_year + 1 : " of current collection end year" %>.
- <%= f.govuk_submit "Submit lettings log", accesskey: "s" %> -<% end %> \ No newline at end of file +
\ No newline at end of file diff --git a/spec/features/form/tasklist_page_spec.rb b/spec/features/form/tasklist_page_spec.rb index 6acb1ef6a..39cbe63eb 100644 --- a/spec/features/form/tasklist_page_spec.rb +++ b/spec/features/form/tasklist_page_spec.rb @@ -48,5 +48,5 @@ RSpec.describe "Task List" do expect(page).to have_content("Review your answers and submit this log to the Department of Levelling Up, Housing & Communities.") click_link(text: "Review lettings log") expect(page).to have_current_path("/logs/#{case_log.id}/review") - end + end end diff --git a/spec/requests/form_controller_spec.rb b/spec/requests/form_controller_spec.rb index 994ed09fa..e9a8e7cd8 100644 --- a/spec/requests/form_controller_spec.rb +++ b/spec/requests/form_controller_spec.rb @@ -121,7 +121,7 @@ RSpec.describe FormController, type: :request do it "renders the review page for the case log" do get "/logs/#{setup_complete_case_log.id}/review", headers: headers, params: {} expect(response.body).to match("Review lettings log") - end + end end end @@ -364,23 +364,6 @@ RSpec.describe FormController, type: :request do expect(response).to have_http_status(:not_found) end end - - context "When submitting the case log from the review page" do - - it "redirects to the case logs page on a successful submission of a complete case log" do - post "/logs/#{completed_case_log.id}/form", headers: { "HTTP_REFERER": "/logs/#{completed_case_log.id}/review" } - expect(response).to redirect_to("/logs") - follow_redirect! - expect(Capybara::Node::Simple.new(response.body)).to have_content("Log #{completed_case_log.id} has been submitted") - end - - it "redirects to the review page and presents an error to the user if submitting an incomplete case log" do - post "/logs/#{setup_complete_case_log.id}/form", headers: { "HTTP_REFERER": "/logs/#{setup_complete_case_log.id}/review" } - expect(response).to redirect_to("/logs/#{setup_complete_case_log.id}/review") - follow_redirect! - expect(Capybara::Node::Simple.new(response.body)).to have_content("All mandatory fields have not been completed, please refer to section status") - end - end end end end