From 5e201d35534a3f050bd733c14225f6b42fdcdabb Mon Sep 17 00:00:00 2001 From: Daniel Baark <5101747+baarkerlounger@users.noreply.github.com> Date: Thu, 7 Oct 2021 09:16:00 +0100 Subject: [PATCH] CLDC-344: Validations (#36) * Form with model so that we can validate (hypothetically) * Put turbo frame back * Turbo can update form errors if submitting returns 422 * Refactor and fix specs * String interpolation over concatenation --- Gemfile.lock | 10 ++--- app/controllers/case_logs_controller.rb | 27 ++++++------ app/helpers/conditional_questions_helper.rb | 6 +-- .../conditional_question_controller.js | 2 +- app/models/case_log.rb | 2 + app/models/form.rb | 10 +++++ app/views/form/page.html.erb | 9 ++-- config/routes.rb | 3 +- spec/features/case_log_spec.rb | 42 +++++++++---------- 9 files changed, 58 insertions(+), 53 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 1e4ad2c71..b21879881 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -26,7 +26,7 @@ GIT GIT remote: https://github.com/rspec/rspec-rails.git - revision: 211d7d990e9762e229d8a86249b88c2a7604e8b0 + revision: fdcd1df0b13f9b6547336b4d37dffb66f70f7228 branch: main specs: rspec-rails (5.1.0.pre) @@ -143,7 +143,7 @@ GEM ffi (1.15.4) globalid (0.5.2) activesupport (>= 5.0) - govuk-components (2.1.1) + govuk-components (2.1.2) activemodel (>= 6.0) railties (>= 6.0) view_component (~> 2.39.0) @@ -175,9 +175,9 @@ GEM minitest (5.14.4) msgpack (1.4.2) nio4r (2.5.8) - nokogiri (1.12.4-x86_64-darwin) + nokogiri (1.12.5-x86_64-darwin) racc (~> 1.4) - nokogiri (1.12.4-x86_64-linux) + nokogiri (1.12.5-x86_64-linux) racc (~> 1.4) overcommit (0.58.0) childprocess (>= 0.6.3, < 5) @@ -294,7 +294,7 @@ GEM actionpack (>= 4.0) activesupport (>= 4.0) sprockets (>= 3.0.0) - stimulus-rails (0.6.0) + stimulus-rails (0.6.1) rails (>= 6.0.0) thor (1.1.0) turbo-rails (0.8.1) diff --git a/app/controllers/case_logs_controller.rb b/app/controllers/case_logs_controller.rb index d84e6187e..45bc05ee4 100644 --- a/app/controllers/case_logs_controller.rb +++ b/app/controllers/case_logs_controller.rb @@ -20,22 +20,19 @@ class CaseLogsController < ApplicationController render :edit end - def next_page + def submit_form form = Form.new(2021, 2022) - @case_log = CaseLog.find(params[:case_log_id]) - previous_page = params[:previous_page] + @case_log = CaseLog.find(params[:id]) + previous_page = params[:case_log][:previous_page] questions_for_page = form.questions_for_page(previous_page).keys answers_for_page = page_params(questions_for_page).select { |k, _v| questions_for_page.include?(k) } - @case_log.update!(answers_for_page) - next_page = form.next_page(previous_page) - redirect_path = if next_page == :check_answers - subsection = form.subsection_for_page(previous_page) - "case_log_#{subsection}_check_answers_path" - else - "case_log_#{next_page}_path" - end - - redirect_to(send(redirect_path, @case_log)) + if @case_log.update(answers_for_page) + redirect_path = form.next_page_redirect_path(previous_page) + redirect_to(send(redirect_path, @case_log)) + else + page_info = form.all_pages[previous_page] + render "form/page", locals: { form: form, page_key: previous_page, page_info: page_info }, status: :unprocessable_entity + end end def check_answers @@ -51,13 +48,13 @@ class CaseLogsController < ApplicationController form.all_pages.map do |page_key, page_info| define_method(page_key) do @case_log = CaseLog.find(params[:case_log_id]) - render "form/page", locals: { case_log_id: @case_log.id, form: form, page_key: page_key, page_info: page_info } + render "form/page", locals: { form: form, page_key: page_key, page_info: page_info } end end private def page_params(questions_for_page) - params.permit(questions_for_page) + params.require(:case_log).permit(questions_for_page) end end diff --git a/app/helpers/conditional_questions_helper.rb b/app/helpers/conditional_questions_helper.rb index 8967207f4..c77119243 100644 --- a/app/helpers/conditional_questions_helper.rb +++ b/app/helpers/conditional_questions_helper.rb @@ -6,10 +6,6 @@ module ConditionalQuestionsHelper end def display_question_key_div(page_info, question_key) - if conditional_questions_for_page(page_info).include?(question_key) - "