diff --git a/app/helpers/conditional_questions_helper.rb b/app/helpers/conditional_questions_helper.rb index 2bed19f38..6b0adb536 100644 --- a/app/helpers/conditional_questions_helper.rb +++ b/app/helpers/conditional_questions_helper.rb @@ -3,10 +3,10 @@ module ConditionalQuestionsHelper page.questions.map(&:conditional_for).compact.map(&:keys).flatten end - def find_conditional_question(page, conditional_for, answer_value) - return if conditional_for.nil? + def find_conditional_question(page, question, answer_value) + return if question.conditional_for.nil? - conditional_key = conditional_for.find { |_, conditional_value| conditional_value.include? answer_value }&.first + conditional_key = question.conditional_for.find { |_, conditional_value| conditional_value.include? answer_value }&.first page.questions.find { |q| q.id == conditional_key } end diff --git a/app/models/form/page.rb b/app/models/form/page.rb index 0ebbbbb70..3d9719397 100644 --- a/app/models/form/page.rb +++ b/app/models/form/page.rb @@ -29,14 +29,14 @@ class Form::Page def non_conditional_questions @non_conditional_questions ||= questions.reject do |q| - conditional_questions_ids.include?(q.id) + conditional_question_ids.include?(q.id) end end private - def conditional_questions_ids - @conditional_questions ||= questions.flat_map { |q| + def conditional_question_ids + @conditional_question_ids ||= questions.flat_map { |q| next if q.conditional_for.blank? # TODO: remove this condition once all conditional questions no longer need JS diff --git a/app/views/form/_radio_question.html.erb b/app/views/form/_radio_question.html.erb index dda8f010e..d1fae6416 100644 --- a/app/views/form/_radio_question.html.erb +++ b/app/views/form/_radio_question.html.erb @@ -9,7 +9,7 @@ <% if key.starts_with?("divider") %> <%= f.govuk_radio_divider %> <% else %> - <% conditional_question = find_conditional_question(@page, question.conditional_for, val) %> + <% conditional_question = find_conditional_question(@page, question, val) %> <% if conditional_question.nil? %> <%= f.govuk_radio_button question.id, val, label: { text: val }, **stimulus_html_attributes(question) %> <% else %> diff --git a/spec/helpers/conditional_questions_helper_spec.rb b/spec/helpers/conditional_questions_helper_spec.rb index 5384ff536..b3df41a43 100644 --- a/spec/helpers/conditional_questions_helper_spec.rb +++ b/spec/helpers/conditional_questions_helper_spec.rb @@ -12,6 +12,14 @@ RSpec.describe ConditionalQuestionsHelper do end end + describe "find conditional question" do + let(:question) { page.questions.find { |q| q.id == "armedforces" } } + let(:answer_value) { "A current or former regular in the UK Armed Forces (excluding National Service)" } + it "returns the conditional question for a given answer option" do + expect(find_conditional_question(page, question, answer_value)) + end + end + describe "display question key div" do let(:conditional_question) { page.questions.find { |q| q.id == "leftreg" } }