Browse Source

Bit of a nasty hack but maybe better than deriving back link?

pull/72/head
baarkerlounger 4 years ago
parent
commit
1cd97da0eb
  1. 13
      app/controllers/case_logs_controller.rb
  2. 1
      app/models/case_log.rb
  3. 10
      app/views/form/page.html.erb
  4. 4
      spec/features/case_log_spec.rb

13
app/controllers/case_logs_controller.rb

@ -59,13 +59,11 @@ class CaseLogsController < ApplicationController
@case_log.page = params[:case_log][:page]
responses_for_page = responses_for_page(@case_log.page)
if @case_log.update(responses_for_page) && (@case_log.soft_errors.empty? || @case_log.soft_errors_overridden?)
@case_log.previous_page = @case_log.page
redirect_path = get_next_page_path(form, @case_log.page, @case_log)
redirect_to(send(redirect_path, @case_log))
else
page_info = form.all_pages[@case_log.page]
back_path = get_previous_page_path(form, @case_log.page, @case_log)
render "form/page", locals: { form: form, back_path: back_path, page_key: @case_log.page, page_info: page_info }, status: :unprocessable_entity
render "form/page", locals: { form: form, page_key: @case_log.page, page_info: page_info }, status: :unprocessable_entity
end
end
@ -93,8 +91,7 @@ class CaseLogsController < ApplicationController
form.all_pages.map do |page_key, page_info|
define_method(page_key) do |_errors = {}|
@case_log = CaseLog.find(params[:case_log_id])
back_path = get_previous_page_path(form, page_key, @case_log)
render "form/page", locals: { form: form, back_path: back_path, page_key: page_key, page_info: page_info }
render "form/page", locals: { form: form, page_key: page_key, page_info: page_info }
end
end
@ -149,10 +146,4 @@ private
end
form.next_page_redirect_path(page)
end
def get_previous_page_path(form, current_page, case_log = {})
return case_log.previous_page if case_log.previous_page
return request.referer.split("/")[-2..-1].join("/") if request.referer&.ends_with?("check_answers")
return form.previous_page(current_page) if current_page
end
end

1
app/models/case_log.rb

@ -44,7 +44,6 @@ class CaseLog < ApplicationRecord
validates_with CaseLogValidator, ({ page: @page } || {})
before_save :update_status!
attr_accessor :previous_page
attr_accessor :page
enum status: { "not_started" => 0, "in_progress" => 1, "completed" => 2 }

10
app/views/form/page.html.erb

@ -1,7 +1,11 @@
<script>
if(performance.navigation.type == 2){
location.reload(true);
}
</script>
<% content_for :before_content do %>
<%= govuk_back_link href: "/case_logs/#{@case_log.id}/#{back_path}" do %>
Back
<% end %>
<%= link_to 'Back', :back, class: "govuk-back-link" %>
<% end %>
<%= turbo_frame_tag "case_log_form", target: "_top" do %>

4
spec/features/case_log_spec.rb

@ -411,7 +411,7 @@ RSpec.describe "Test Features" do
expect(case_log.override_net_income_validation).to be_nil
end
it "clears the confirmation question if the amount was amended and the page is returned to using the back button" do
it "clears the confirmation question if the amount was amended and the page is returned to using the back button", js: true do
visit("/case_logs/#{case_log.id}/net_income")
fill_in("case-log-net-income-field", with: income_over_soft_limit)
choose("case-log-net-income-frequency-weekly-field", allow_label_click: true)
@ -422,7 +422,7 @@ RSpec.describe "Test Features" do
expect(page).not_to have_content("Are you sure this is correct?")
end
it "does not clear the confirmation question if the page is returned to using the back button and the amount is still over the soft limit" do
it "does not clear the confirmation question if the page is returned to using the back button and the amount is still over the soft limit", js: true do
visit("/case_logs/#{case_log.id}/net_income")
fill_in("case-log-net-income-field", with: income_over_soft_limit)
choose("case-log-net-income-frequency-weekly-field", allow_label_click: true)

Loading…
Cancel
Save