From 5705aec46a571cabd93ae2c12788af5c6c407dc4 Mon Sep 17 00:00:00 2001 From: Kat Date: Fri, 8 Oct 2021 10:13:19 +0100 Subject: [PATCH] Allow changing/unticking saved checkbox values --- app/controllers/case_logs_controller.rb | 20 ++++++++------- spec/controllers/case_logs_controller_spec.rb | 25 ++++++++++++++++--- 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/app/controllers/case_logs_controller.rb b/app/controllers/case_logs_controller.rb index 12eb11418..dec123823 100644 --- a/app/controllers/case_logs_controller.rb +++ b/app/controllers/case_logs_controller.rb @@ -24,10 +24,10 @@ class CaseLogsController < ApplicationController form = Form.new(2021, 2022) @case_log = CaseLog.find(params[:id]) previous_page = params[:case_log][:previous_page] - questions_for_page = form.questions_for_page(previous_page).keys - checked_answers = get_checked_answers(questions_for_page, params[:case_log]) + questions_for_page = form.questions_for_page(previous_page) + checked_answers = get_checked_answers(params[:case_log], questions_for_page) - answers_for_page = page_params(questions_for_page).select { |k, _v| questions_for_page.include?(k) } + answers_for_page = page_params(questions_for_page.keys).select { |k, _v| questions_for_page.keys.include?(k) } if @case_log.update(checked_answers) && @case_log.update(answers_for_page) redirect_path = form.next_page_redirect_path(previous_page) redirect_to(send(redirect_path, @case_log)) @@ -37,16 +37,18 @@ class CaseLogsController < ApplicationController end end - def get_checked_answers(questions_for_page, case_log_params) - checked_questions = questions_for_page.map do |question| - if case_log_params[question].is_a?(Array) - case_log_params[question].reject(&:empty?).map { |answer| { "#{question}_#{answer.parameterize(separator: '_')}" => true } } + def get_checked_answers(case_log_params, questions_for_page) + checked_questions = {} + checkbox_questions = questions_for_page.select {|_title, question| question["type"] == "checkbox" } + checkbox_questions.each do |title, question| + valid_answer_options = question["answer_options"].select {|key, _value| !key.match?(/divider/) } + valid_answer_options.each do |_key, value| + checked_questions["#{title}_#{value.parameterize(separator: '_')}"] = case_log_params[title].include?(value) ? true : false end end - checked_questions.flatten.reject(&:nil?).reduce({}, :merge) + checked_questions end - def check_answers @case_log = CaseLog.find(params[:case_log_id]) form = Form.new(2021, 2022) diff --git a/spec/controllers/case_logs_controller_spec.rb b/spec/controllers/case_logs_controller_spec.rb index 2240272cb..38792d792 100644 --- a/spec/controllers/case_logs_controller_spec.rb +++ b/spec/controllers/case_logs_controller_spec.rb @@ -48,7 +48,7 @@ RSpec.describe CaseLogsController, type: :controller do let!(:case_log) { FactoryBot.create(:case_log) } let(:id) { case_log.id } - it "returns a success response" do + it "sets checked items to true" do case_log_to_submit = { "accessibility_requirements" => ["Fully wheelchair accessible housing", "Wheelchair access to essential rooms", "Level access housing"], "previous_page" => "accessibility_requirements" } @@ -56,8 +56,27 @@ RSpec.describe CaseLogsController, type: :controller do CaseLog.find(id) expect(CaseLog.find(id)["accessibility_requirements_fully_wheelchair_accessible_housing"]).to eq(true) - expect(CaseLog.find(id)["accessibility_requirements_fully_wheelchair_accessible_housing"]).to eq(true) - expect(CaseLog.find(id)["accessibility_requirements_fully_wheelchair_accessible_housing"]).to eq(true) + expect(CaseLog.find(id)["accessibility_requirements_wheelchair_access_to_essential_rooms"]).to eq(true) + expect(CaseLog.find(id)["accessibility_requirements_level_access_housing"]).to eq(true) + end + + it "sets previously submitted items to false when resubmitted with new values" do + case_log_to_submit = { "accessibility_requirements" => + ["Fully wheelchair accessible housing", "Wheelchair access to essential rooms", "Level access housing"], + "previous_page" => "accessibility_requirements" } + post :submit_form, params: { id: id, case_log: case_log_to_submit } + CaseLog.find(id) + + new_case_log_to_submit = { "accessibility_requirements" => + ["Level access housing"], + "previous_page" => "accessibility_requirements" } + + post :submit_form, params: { id: id, case_log: new_case_log_to_submit } + CaseLog.find(id) + + expect(CaseLog.find(id)["accessibility_requirements_fully_wheelchair_accessible_housing"]).to eq(false) + expect(CaseLog.find(id)["accessibility_requirements_wheelchair_access_to_essential_rooms"]).to eq(false) + expect(CaseLog.find(id)["accessibility_requirements_level_access_housing"]).to eq(true) end end end