Browse Source

Add helper unit test

pull/235/head
baarkerlounger 3 years ago
parent
commit
5e1c7b7d91
  1. 6
      app/helpers/conditional_questions_helper.rb
  2. 6
      app/models/form/page.rb
  3. 2
      app/views/form/_radio_question.html.erb
  4. 8
      spec/helpers/conditional_questions_helper_spec.rb

6
app/helpers/conditional_questions_helper.rb

@ -3,10 +3,10 @@ module ConditionalQuestionsHelper
page.questions.map(&:conditional_for).compact.map(&:keys).flatten page.questions.map(&:conditional_for).compact.map(&:keys).flatten
end end
def find_conditional_question(page, conditional_for, answer_value) def find_conditional_question(page, question, answer_value)
return if conditional_for.nil? 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 } page.questions.find { |q| q.id == conditional_key }
end end

6
app/models/form/page.rb

@ -29,14 +29,14 @@ class Form::Page
def non_conditional_questions def non_conditional_questions
@non_conditional_questions ||= questions.reject do |q| @non_conditional_questions ||= questions.reject do |q|
conditional_questions_ids.include?(q.id) conditional_question_ids.include?(q.id)
end end
end end
private private
def conditional_questions_ids def conditional_question_ids
@conditional_questions ||= questions.flat_map { |q| @conditional_question_ids ||= questions.flat_map { |q|
next if q.conditional_for.blank? next if q.conditional_for.blank?
# TODO: remove this condition once all conditional questions no longer need JS # TODO: remove this condition once all conditional questions no longer need JS

2
app/views/form/_radio_question.html.erb

@ -9,7 +9,7 @@
<% if key.starts_with?("divider") %> <% if key.starts_with?("divider") %>
<%= f.govuk_radio_divider %> <%= f.govuk_radio_divider %>
<% else %> <% else %>
<% conditional_question = find_conditional_question(@page, question.conditional_for, val) %> <% conditional_question = find_conditional_question(@page, question, val) %>
<% if conditional_question.nil? %> <% if conditional_question.nil? %>
<%= f.govuk_radio_button question.id, val, label: { text: val }, **stimulus_html_attributes(question) %> <%= f.govuk_radio_button question.id, val, label: { text: val }, **stimulus_html_attributes(question) %>
<% else %> <% else %>

8
spec/helpers/conditional_questions_helper_spec.rb

@ -12,6 +12,14 @@ RSpec.describe ConditionalQuestionsHelper do
end end
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 describe "display question key div" do
let(:conditional_question) { page.questions.find { |q| q.id == "leftreg" } } let(:conditional_question) { page.questions.find { |q| q.id == "leftreg" } }

Loading…
Cancel
Save