Browse Source

Check multiple conditions

pull/61/head
Kat 4 years ago
parent
commit
444a6e2b91
  1. 6
      app/controllers/case_logs_controller.rb
  2. 2
      app/helpers/check_answers_helper.rb
  3. 2
      spec/features/case_log_spec.rb
  4. 4
      spec/fixtures/forms/test_form.json

6
app/controllers/case_logs_controller.rb

@ -61,7 +61,7 @@ class CaseLogsController < ApplicationController
responses_for_page = question_responses(questions_for_page)
@case_log.previous_page = previous_page
if @case_log.update(responses_for_page)
redirect_path = get_next_page_path(form, previous_page, responses_for_page)
redirect_path = get_next_page_path(form, previous_page, @case_log)
redirect_to(send(redirect_path, @case_log))
else
page_info = form.all_pages[previous_page]
@ -129,13 +129,13 @@ private
params.require(:case_log).permit(CaseLog.editable_fields)
end
def get_next_page_path(form, previous_page, responses_for_page = {})
def get_next_page_path(form, previous_page, case_log = {})
questions_for_page = form.questions_for_page(previous_page)
questions_for_page.each do |_question, content|
next unless content.key?("conditional_route_to")
content["conditional_route_to"].each do |route, conditions|
if responses_for_page[conditions.keys[0]].present? && conditions.values[0].include?(responses_for_page[conditions.keys[0]])
if conditions.keys.all? { |x| case_log[x].present? } && conditions.all? { |k, v| v.include?(case_log[k]) }
return "case_log_#{route}_path"
end
end

2
app/helpers/check_answers_helper.rb

@ -43,7 +43,7 @@ module CheckAnswersHelper
def get_next_page_name(form, page_name, applicable_questions, question_key, case_log, question_value)
if applicable_questions[question_key].key?("conditional_route_to")
applicable_questions[question_key]["conditional_route_to"].each do |conditional_page_key, condition|
unless condition_not_met(case_log, condition.keys[0], question_value, condition.values[0])
unless condition.any? { |k, v| condition_not_met(case_log, k, question_value, v) }
return conditional_page_key
end
end

2
spec/features/case_log_spec.rb

@ -369,7 +369,7 @@ RSpec.describe "Test Features" do
visit("/case_logs/#{id}/conditional_question")
choose("case-log-pregnancy-yes-field", allow_label_click: true)
click_button("Save and continue")
expect(page).to have_current_path("/case_logs/#{id}/basic_rent")
expect(page).to have_current_path("/case_logs/#{id}/rent")
end
end
end

4
spec/fixtures/forms/test_form.json vendored

@ -250,9 +250,9 @@
"1": "No"
},
"conditional_route_to": {
"rent": { "pregnancy": "Yes", "tenant_gender": "Female" },
"conditional_question_yes_page": { "pregnancy": "Yes" },
"conditional_question_no_page": { "pregnancy": "No" },
"basic_rent": { "pregnancy": "Yes", "tenant_gender": "Female" }
"conditional_question_no_page": { "pregnancy": "No" }
}
}
},

Loading…
Cancel
Save