From 444a6e2b9156699270f14769c686eddc0f3b0414 Mon Sep 17 00:00:00 2001 From: Kat Date: Fri, 22 Oct 2021 13:57:17 +0100 Subject: [PATCH] Check multiple conditions --- app/controllers/case_logs_controller.rb | 6 +++--- app/helpers/check_answers_helper.rb | 2 +- spec/features/case_log_spec.rb | 2 +- spec/fixtures/forms/test_form.json | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/controllers/case_logs_controller.rb b/app/controllers/case_logs_controller.rb index 290d1d9e6..49e9a0bdf 100644 --- a/app/controllers/case_logs_controller.rb +++ b/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 diff --git a/app/helpers/check_answers_helper.rb b/app/helpers/check_answers_helper.rb index 1607fe36e..9ebeba40e 100644 --- a/app/helpers/check_answers_helper.rb +++ b/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 diff --git a/spec/features/case_log_spec.rb b/spec/features/case_log_spec.rb index 186aa9f4f..3e16f8530 100644 --- a/spec/features/case_log_spec.rb +++ b/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 diff --git a/spec/fixtures/forms/test_form.json b/spec/fixtures/forms/test_form.json index 8cf7ee4ce..b4de71970 100644 --- a/spec/fixtures/forms/test_form.json +++ b/spec/fixtures/forms/test_form.json @@ -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" } } } },