Browse Source

error and success when submitting

pull/469/head
Dushan Despotovic 3 years ago
parent
commit
3c8c196aec
  1. 43
      app/controllers/form_controller.rb
  2. 4
      app/views/case_logs/index.html.erb
  3. 7
      app/views/form/review.html.erb
  4. 25
      spec/features/form/review_page_spec.rb

43
app/controllers/form_controller.rb

@ -6,25 +6,31 @@ class FormController < ApplicationController
def submit_form def submit_form
if @case_log if @case_log
if is_referrer_review? if is_referrer_review?
@case_log.update!(@case_log.attributes) if @case_log.completed?
redirect_to(send(case_logs_path, @case_log)) 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 else
@page = @case_log.form.get_page(params[:case_log][:page]) @page = @case_log.form.get_page(params[:case_log][:page])
responses_for_page = responses_for_page(@page) responses_for_page = responses_for_page(@page)
if @case_log.update(responses_for_page) if @case_log.update(responses_for_page)
session[:errors] = nil session[:errors] = nil
if is_referrer_check_answers? && !@case_log.form.next_page(@page, @case_log).to_s.include?("value_check") 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)) 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) elsif @case_log.form.is_last_question?(@page, @case_log.form.subsection_for_page(@page), @case_log)
redirect_to(case_logs_path) 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 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)) redirect_to(send(redirect_path, @case_log))
end end
else
redirect_path = "case_log_#{@page.id}_path"
session[:errors] = @case_log.errors.to_json
redirect_to(send(redirect_path, @case_log))
end end
else else
render_not_found render_not_found
@ -32,6 +38,7 @@ class FormController < ApplicationController
end end
def check_answers def check_answers
session[:review_errors] = nil
if @case_log if @case_log
current_url = request.env["PATH_INFO"] current_url = request.env["PATH_INFO"]
subsection = @case_log.form.get_subsection(current_url.split("/")[-2]) subsection = @case_log.form.get_subsection(current_url.split("/")[-2])
@ -43,6 +50,11 @@ class FormController < ApplicationController
def review def review
if @case_log 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" render "form/review"
else else
render_not_found render_not_found
@ -52,6 +64,7 @@ class FormController < ApplicationController
FormHandler.instance.forms.each do |_key, form| FormHandler.instance.forms.each do |_key, form|
form.pages.map do |page| form.pages.map do |page|
define_method(page.id) do |_errors = {}| define_method(page.id) do |_errors = {}|
session[:review_errors] = nil
if @case_log if @case_log
if session["errors"] if session["errors"]
JSON(session["errors"]).each do |field, messages| JSON(session["errors"]).each do |field, messages|

4
app/views/case_logs/index.html.erb

@ -1,9 +1,5 @@
<% content_for :title, "Logs" %> <% content_for :title, "Logs" %>
<% if @case_log.present? %>
<%= render partial: "success", locals: { case_log: @case_log } %>
<% end %>
<h1 class="govuk-heading-l"> <h1 class="govuk-heading-l">
<%= content_for(:title) %> <%= content_for(:title) %>
</h1> </h1>

7
app/views/form/review.html.erb

@ -5,7 +5,8 @@
"Review lettings log" => "" "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 %>
<div class="govuk-grid-row"> <div class="govuk-grid-row">
<div class="govuk-grid-column-two-thirds-from-desktop"> <div class="govuk-grid-column-two-thirds-from-desktop">
<h1 class="govuk-heading-xl"> <h1 class="govuk-heading-xl">
@ -31,9 +32,7 @@
<div class="govuk-inset-text"> <div class="govuk-inset-text">
You can submit changes to this log until the close of the current collection year, 31 March 2022. You can submit changes to this log until the close of the current collection year, 31 March 2022.
</div> </div>
<%= 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 %>
</div> </div>
</div> </div>
<%= f.govuk_submit "Submit lettings log", accesskey: "s" %>
<% end %> <% end %>

25
spec/features/form/review_page_spec.rb

@ -4,11 +4,18 @@ require_relative "helpers"
RSpec.describe "Form Review Page" do RSpec.describe "Form Review Page" do
include Helpers include Helpers
let(:user) { FactoryBot.create(:user) } 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( FactoryBot.create(
:case_log, :case_log,
:completed, :completed,
status: 1,
owning_organisation: user.organisation, owning_organisation: user.organisation,
managing_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 context "when the user wishes to review their case log" do
it "the review page can be visited by URL" 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") expect(page).to have_content("Review lettings log")
end end
it "the review page allows the user to submit a completed case log" do 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") click_button("Submit lettings log")
expect(page).to have_current_path("/logs")
expect(page).to have_content("Success") expect(page).to have_content("Success")
expect(page).to have_content("Log #{completed_unsubmitted_case_log.id} has been submitted") 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 end
end end

Loading…
Cancel
Save