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] @case_log.page = params[:case_log][:page]
responses_for_page = responses_for_page(@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?) 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_path = get_next_page_path(form, @case_log.page, @case_log)
redirect_to(send(redirect_path, @case_log)) redirect_to(send(redirect_path, @case_log))
else else
page_info = form.all_pages[@case_log.page] 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, page_key: @case_log.page, page_info: page_info }, status: :unprocessable_entity
render "form/page", locals: { form: form, back_path: back_path, page_key: @case_log.page, page_info: page_info }, status: :unprocessable_entity
end end
end end
@ -93,8 +91,7 @@ class CaseLogsController < ApplicationController
form.all_pages.map do |page_key, page_info| form.all_pages.map do |page_key, page_info|
define_method(page_key) do |_errors = {}| define_method(page_key) do |_errors = {}|
@case_log = CaseLog.find(params[:case_log_id]) @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, page_key: page_key, page_info: page_info }
render "form/page", locals: { form: form, back_path: back_path, page_key: page_key, page_info: page_info }
end end
end end
@ -149,10 +146,4 @@ private
end end
form.next_page_redirect_path(page) form.next_page_redirect_path(page)
end 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 end

1
app/models/case_log.rb

@ -44,7 +44,6 @@ class CaseLog < ApplicationRecord
validates_with CaseLogValidator, ({ page: @page } || {}) validates_with CaseLogValidator, ({ page: @page } || {})
before_save :update_status! before_save :update_status!
attr_accessor :previous_page
attr_accessor :page attr_accessor :page
enum status: { "not_started" => 0, "in_progress" => 1, "completed" => 2 } 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 %> <% content_for :before_content do %>
<%= govuk_back_link href: "/case_logs/#{@case_log.id}/#{back_path}" do %> <%= link_to 'Back', :back, class: "govuk-back-link" %>
Back
<% end %>
<% end %> <% end %>
<%= turbo_frame_tag "case_log_form", target: "_top" do %> <%= 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 expect(case_log.override_net_income_validation).to be_nil
end 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") visit("/case_logs/#{case_log.id}/net_income")
fill_in("case-log-net-income-field", with: income_over_soft_limit) fill_in("case-log-net-income-field", with: income_over_soft_limit)
choose("case-log-net-income-frequency-weekly-field", allow_label_click: true) 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?") expect(page).not_to have_content("Are you sure this is correct?")
end 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") visit("/case_logs/#{case_log.id}/net_income")
fill_in("case-log-net-income-field", with: income_over_soft_limit) fill_in("case-log-net-income-field", with: income_over_soft_limit)
choose("case-log-net-income-frequency-weekly-field", allow_label_click: true) choose("case-log-net-income-frequency-weekly-field", allow_label_click: true)

Loading…
Cancel
Save