Browse Source

Allow changing/unticking saved checkbox values

pull/40/head
Kat 4 years ago
parent
commit
5705aec46a
  1. 20
      app/controllers/case_logs_controller.rb
  2. 25
      spec/controllers/case_logs_controller_spec.rb

20
app/controllers/case_logs_controller.rb

@ -24,10 +24,10 @@ class CaseLogsController < ApplicationController
form = Form.new(2021, 2022) form = Form.new(2021, 2022)
@case_log = CaseLog.find(params[:id]) @case_log = CaseLog.find(params[:id])
previous_page = params[:case_log][:previous_page] previous_page = params[:case_log][:previous_page]
questions_for_page = form.questions_for_page(previous_page).keys questions_for_page = form.questions_for_page(previous_page)
checked_answers = get_checked_answers(questions_for_page, params[:case_log]) 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) if @case_log.update(checked_answers) && @case_log.update(answers_for_page)
redirect_path = form.next_page_redirect_path(previous_page) redirect_path = form.next_page_redirect_path(previous_page)
redirect_to(send(redirect_path, @case_log)) redirect_to(send(redirect_path, @case_log))
@ -37,16 +37,18 @@ class CaseLogsController < ApplicationController
end end
end end
def get_checked_answers(questions_for_page, case_log_params) def get_checked_answers(case_log_params, questions_for_page)
checked_questions = questions_for_page.map do |question| checked_questions = {}
if case_log_params[question].is_a?(Array) checkbox_questions = questions_for_page.select {|_title, question| question["type"] == "checkbox" }
case_log_params[question].reject(&:empty?).map { |answer| { "#{question}_#{answer.parameterize(separator: '_')}" => true } } 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
end end
checked_questions.flatten.reject(&:nil?).reduce({}, :merge) checked_questions
end end
def check_answers def check_answers
@case_log = CaseLog.find(params[:case_log_id]) @case_log = CaseLog.find(params[:case_log_id])
form = Form.new(2021, 2022) form = Form.new(2021, 2022)

25
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!(:case_log) { FactoryBot.create(:case_log) }
let(:id) { case_log.id } let(:id) { case_log.id }
it "returns a success response" do it "sets checked items to true" do
case_log_to_submit = { "accessibility_requirements" => case_log_to_submit = { "accessibility_requirements" =>
["Fully wheelchair accessible housing", "Wheelchair access to essential rooms", "Level access housing"], ["Fully wheelchair accessible housing", "Wheelchair access to essential rooms", "Level access housing"],
"previous_page" => "accessibility_requirements" } "previous_page" => "accessibility_requirements" }
@ -56,8 +56,27 @@ RSpec.describe CaseLogsController, type: :controller do
CaseLog.find(id) 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_fully_wheelchair_accessible_housing"]).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 end
end end

Loading…
Cancel
Save