Browse Source

error and success when submitting

pull/469/head
Dushan Despotovic 3 years ago committed by Kat
parent
commit
7807b74b9b
  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. 27
      spec/features/form/review_page_spec.rb

43
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|

4
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 %>
<h1 class="govuk-heading-l">
<%= content_for(:title) %>
</h1>

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

27
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

Loading…
Cancel
Save