diff --git a/app/controllers/form_controller.rb b/app/controllers/form_controller.rb index 6d3af2f75..444be4df8 100644 --- a/app/controllers/form_controller.rb +++ b/app/controllers/form_controller.rb @@ -6,25 +6,31 @@ class FormController < ApplicationController def submit_form if @case_log if is_referrer_review? - @case_log.update!(@case_log.attributes) - redirect_to(send(case_logs_path, @case_log)) + if @case_log.completed? + redirect_to(case_logs_path, flash: { notice: "Log #{@case_log.id} has been submitted" }) + else + @case_log.errors.add :base, "All mandatory fields have not been completed, please refer to section status" + session[:errors][:review] = @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) + @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.form.next_page_redirect_path(@page, @case_log) + redirect_path = "case_log_#{@page.id}_path" + session[:errors] = @case_log.errors.to_json 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 @@ -32,6 +38,7 @@ 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]) @@ -43,6 +50,11 @@ class FormController < ApplicationController def review if @case_log + if session["errors"] + JSON(session["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 @@ -52,6 +64,7 @@ class FormController < ApplicationController FormHandler.instance.forms.each do |_key, form| form.pages.map do |page| define_method(page.id) do |_errors = {}| + session[:review_errors] = nil if @case_log if session["errors"] JSON(session["errors"]).each do |field, messages| diff --git a/app/views/case_logs/index.html.erb b/app/views/case_logs/index.html.erb index db44e88a4..8060f3c99 100644 --- a/app/views/case_logs/index.html.erb +++ b/app/views/case_logs/index.html.erb @@ -1,9 +1,5 @@ <% content_for :title, "Logs" %> -<% if @case_log.present? %> -<%= render partial: "success", locals: { case_log: @case_log } %> -<% end %> -

<%= content_for(:title) %>

diff --git a/app/views/form/review.html.erb b/app/views/form/review.html.erb index fa01de259..b3131a200 100644 --- a/app/views/form/review.html.erb +++ b/app/views/form/review.html.erb @@ -5,7 +5,8 @@ "Review lettings log" => "" }) %> -<%= turbo_frame_tag "case_log_form", target: "_top" do %> +<%= form_with model: @case_log, url: form_case_log_path(@case_log), method: "post" do |f| %> + <%= f.govuk_error_summary %>

@@ -31,9 +32,7 @@
You can submit changes to this log until the close of the current collection year, 31 March 2022.
- <%= form_with model: @case_log, url: form_case_log_path(@case_log), method: "post" do |f| %> - <%= f.govuk_submit "Submit lettings log", accesskey: "s" %> - <% end %>

+ <%= f.govuk_submit "Submit lettings log", accesskey: "s" %> <% end %> \ No newline at end of file diff --git a/spec/features/form/review_page_spec.rb b/spec/features/form/review_page_spec.rb index ece35c82e..23f55cb92 100644 --- a/spec/features/form/review_page_spec.rb +++ b/spec/features/form/review_page_spec.rb @@ -4,11 +4,18 @@ require_relative "helpers" RSpec.describe "Form Review Page" do include Helpers let(:user) { FactoryBot.create(:user) } - let(:completed_unsubmitted_case_log) do + let(:case_log) do + FactoryBot.create( + :case_log, + :in_progress, + owning_organisation: user.organisation, + managing_organisation: user.organisation, + ) + end + let(:completed_case_log) do FactoryBot.create( :case_log, :completed, - status: 1, owning_organisation: user.organisation, managing_organisation: user.organisation, ) @@ -20,15 +27,23 @@ RSpec.describe "Form Review Page" do context "when the user wishes to review their case log" do it "the review page can be visited by URL" do - visit("/logs/#{completed_unsubmitted_case_log.id}/review") + visit("/logs/#{completed_case_log.id}/review") expect(page).to have_content("Review lettings log") end it "the review page allows the user to submit a completed case log" do - visit("/logs/#{completed_unsubmitted_case_log.id}/review") + visit("/logs/#{completed_case_log.id}/review") click_button("Submit lettings log") + expect(page).to have_current_path("/logs") expect(page).to have_content("Success") - expect(page).to have_content("Log #{completed_unsubmitted_case_log.id} has been submitted") - end + expect(page).to have_content("Log #{completed_case_log.id} has been submitted") + end + + it "the review page displays an error message if all mandatory questions have not been completed when submitting" do + visit("/logs/#{case_log.id}/review") + click_button("Submit lettings log") + expect(page).to have_current_path("/logs/#{case_log.id}/review") + expect(page).to have_content("All mandatory fields have not been completed, please refer to section status") + end end end