Browse Source

Refactor out the need to get list of checkbox questions

pull/40/head
baarkerlounger 4 years ago
parent
commit
bc31b0fb7b
  1. 37
      app/controllers/case_logs_controller.rb
  2. 8
      app/models/form.rb
  3. 13
      db/migrate/20211011115946_rename_economic_status_fields.rb
  4. 17
      db/schema.rb
  5. 15
      spec/controllers/case_logs_controller_spec.rb

37
app/controllers/case_logs_controller.rb

@ -20,33 +20,14 @@ class CaseLogsController < ApplicationController
render :edit
end
def update_checkbox_responses(case_log, questions_for_page)
result = {}
case_log.each do |question, answer|
if question == "previous_page"
result[question] = answer
elsif questions_for_page[question]["type"] == "checkbox"
questions_for_page[question]["answer_options"].keys.reject { |x| x.match(/divider/) }.each do |option|
result[option] = case_log[question].include?(option) ? true : false
end
else
result[question] = answer
end
end
result
end
def submit_form
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)
checkbox_questions_for_page = form.checkbox_questions_for_page(previous_page)
all_question_keys = questions_for_page.keys + checkbox_questions_for_page
params[:case_log] = update_checkbox_responses(params[:case_log], questions_for_page)
responses_for_page = question_responses(questions_for_page)
answers_for_page = page_params(all_question_keys).select { |k, _v| all_question_keys.include?(k) }
if @case_log.update(answers_for_page)
if @case_log.update(responses_for_page)
redirect_path = form.next_page_redirect_path(previous_page)
redirect_to(send(redirect_path, @case_log))
else
@ -72,7 +53,17 @@ class CaseLogsController < ApplicationController
private
def page_params(questions_for_page)
params.require(:case_log).permit(questions_for_page)
def question_responses(questions_for_page)
questions_for_page.each_with_object({}) do |(question_key, question_info), result|
question_params = params["case_log"][question_key]
if question_info["type"] == "checkbox"
question_info["answer_options"].keys.reject { |x| x.match(/divider/) }.each do |option|
result[option] = question_params.include?(option)
end
else
result[question_key] = question_params
end
result
end
end
end

8
app/models/form.rb

@ -75,12 +75,4 @@ class Form
pages_for_subsection(subsection).keys[current_page_idx - 1]
end
def checkbox_questions_for_page(page)
checkbox_questions = questions_for_page(page).select { |_title, question| question["type"] == "checkbox" }
checkbox_questions.flat_map do |title, question|
question["answer_options"].keys.reject { |key, _value| key.match?(/divider/) }
end
end
end

13
db/migrate/20211011115946_rename_economic_status_fields.rb

@ -0,0 +1,13 @@
class RenameEconomicStatusFields < ActiveRecord::Migration[6.1]
def change
change_table :case_logs, bulk: true do |t|
t.rename :person_2_economic, :person_2_economic_status
t.rename :person_3_economic, :person_3_economic_status
t.rename :person_4_economic, :person_4_economic_status
t.rename :person_5_economic, :person_5_economic_status
t.rename :person_6_economic, :person_6_economic_status
t.rename :person_7_economic, :person_7_economic_status
t.rename :person_8_economic, :person_8_economic_status
end
end
end

17
db/schema.rb

@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 2021_10_08_130208) do
ActiveRecord::Schema.define(version: 2021_10_11_115946) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@ -33,31 +33,31 @@ ActiveRecord::Schema.define(version: 2021_10_08_130208) do
t.string "person_2_relationship"
t.integer "person_2_age"
t.string "person_2_gender"
t.string "person_2_economic"
t.string "person_2_economic_status"
t.string "person_3_relationship"
t.integer "person_3_age"
t.string "person_3_gender"
t.string "person_3_economic"
t.string "person_3_economic_status"
t.string "person_4_relationship"
t.integer "person_4_age"
t.string "person_4_gender"
t.string "person_4_economic"
t.string "person_4_economic_status"
t.string "person_5_relationship"
t.integer "person_5_age"
t.string "person_5_gender"
t.string "person_5_economic"
t.string "person_5_economic_status"
t.string "person_6_relationship"
t.integer "person_6_age"
t.string "person_6_gender"
t.string "person_6_economic"
t.string "person_6_economic_status"
t.string "person_7_relationship"
t.integer "person_7_age"
t.string "person_7_gender"
t.string "person_7_economic"
t.string "person_7_economic_status"
t.string "person_8_relationship"
t.integer "person_8_age"
t.string "person_8_gender"
t.string "person_8_economic"
t.string "person_8_economic_status"
t.string "homelessness"
t.string "reason_for_leaving_last_settled_home"
t.string "benefit_cap_spare_room_subsidy"
@ -109,7 +109,6 @@ ActiveRecord::Schema.define(version: 2021_10_08_130208) do
t.string "chr_letting"
t.string "cap_letting"
t.string "outstanding_rent_or_charges"
t.string "other_reason_for_leaving_last_settled_home"
t.boolean "accessibility_requirements_fully_wheelchair_accessible_housing"
t.boolean "accessibility_requirements_wheelchair_access_to_essential_rooms"
t.boolean "accessibility_requirements_level_access_housing"

15
spec/controllers/case_logs_controller_spec.rb

@ -48,11 +48,18 @@ RSpec.describe CaseLogsController, type: :controller do
let!(:case_log) { FactoryBot.create(:case_log) }
let(:id) { case_log.id }
let(:case_log_form_params) do
{ "accessibility_requirements" =>
{ accessibility_requirements:
%w[ accessibility_requirements_fully_wheelchair_accessible_housing
accessibility_requirements_wheelchair_access_to_essential_rooms
accessibility_requirements_level_access_housing],
"previous_page" => "accessibility_requirements" }
previous_page: "accessibility_requirements" }
end
let(:new_case_log_form_params) do
{
accessibility_requirements: %w[accessibility_requirements_level_access_housing],
previous_page: "accessibility_requirements",
}
end
it "sets checked items to true" do
@ -67,10 +74,6 @@ RSpec.describe CaseLogsController, type: :controller do
it "sets previously submitted items to false when resubmitted with new values" do
post :submit_form, params: { id: id, case_log: case_log_form_params }
new_case_log_form_params = { "accessibility_requirements" =>
%w[accessibility_requirements_level_access_housing],
"previous_page" => "accessibility_requirements" }
get :submit_form, params: { id: id, case_log: new_case_log_form_params }
case_log.reload

Loading…
Cancel
Save