Browse Source

error and success when submitting

pull/469/head
Dushan Despotovic 3 years ago committed by Kat
parent
commit
7807b74b9b
  1. 17
      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

17
app/controllers/form_controller.rb

@ -6,8 +6,13 @@ 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)
@ -26,12 +31,14 @@ class FormController < ApplicationController
session[:errors] = @case_log.errors.to_json session[:errors] = @case_log.errors.to_json
redirect_to(send(redirect_path, @case_log)) redirect_to(send(redirect_path, @case_log))
end end
end
else else
render_not_found render_not_found
end end
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