Browse Source

Spec question counting behaviour

pull/31/head
baarkerlounger 4 years ago
parent
commit
3b580e4434
  1. 13
      app/helpers/check_answers_helper.rb
  2. 85
      spec/helpers/check_answers_helper_spec.rb

13
app/helpers/check_answers_helper.rb

@ -15,7 +15,7 @@ module CheckAnswersHelper
questions_not_applicable = []
questions.reject do |question_key, question|
question.fetch("conditional_for", []).map do |conditional_question_key, condition|
if condition_not_met(case_log, question_key, condition)
if condition_not_met(case_log, question_key, question, condition)
questions_not_applicable << conditional_question_key
end
end
@ -23,8 +23,15 @@ module CheckAnswersHelper
end
end
def condition_not_met(case_log, question_key, condition)
case_log[question_key].blank? || !eval(case_log[question_key].to_s + condition)
def condition_not_met(case_log, question_key, question, condition)
case question["type"]
when "numeric"
case_log[question_key].blank? || !eval(case_log[question_key].to_s + condition)
when "radio"
case_log[question_key].blank? || !condition.include?(case_log[question_key])
else
raise "Not implemented yet"
end
end
def subsection_pages(subsection)

85
spec/helpers/check_answers_helper_spec.rb

@ -2,8 +2,20 @@ require "rails_helper"
RSpec.describe CheckAnswersHelper do
let(:case_log) { FactoryBot.create(:case_log) }
let(:form) { Form.new(2021, 2022) }
let(:case_log_with_met_numeric_condition) do
FactoryBot.create(
:case_log,
:in_progress,
household_number_of_other_members: 2,
person_2_relationship: "Partner"
)
end
let(:case_log_with_met_radio_condition) do
FactoryBot.create(:case_log, armed_forces: "Yes - a regular")
end
let(:subsection) { "income_and_benefits" }
let(:subsection_with_numeric_conditionals) { "household_characteristics" }
let(:subsection_with_radio_conditionals) { "household_needs" }
describe "Get answered questions total" do
it "returns 0 if no questions are answered" do
@ -14,11 +26,82 @@ RSpec.describe CheckAnswersHelper do
case_log["net_income"] = "123"
expect(total_answered_questions(subsection, case_log)).to equal(1)
end
it "ignores questions with unmet numeric conditions" do
case_log["tenant_code"] = "T1234"
expect(total_answered_questions(subsection_with_numeric_conditionals, case_log)).to equal(1)
end
it "includes conditional questions with met numeric conditions" do
expect(total_answered_questions(
subsection_with_numeric_conditionals,
case_log_with_met_numeric_condition,
)).to equal(4)
end
it "ignores questions with unmet radio conditions" do
case_log["armed_forces"] = "No"
expect(total_answered_questions(subsection_with_radio_conditionals, case_log)).to equal(1)
end
it "includes conditional questions with met radio conditions" do
case_log_with_met_radio_condition["armed_forces_injured"] = "No"
case_log_with_met_radio_condition["medical_conditions"] = "No"
expect(total_answered_questions(
subsection_with_radio_conditionals,
case_log_with_met_radio_condition,
)).to equal(3)
end
end
describe "Get total number of questions" do
it "returns the total number of questions for a subsection" do
expect(total_number_of_questions(subsection, case_log)).to eq(4)
end
it "ignores questions with unmet numeric conditions" do
expect(total_number_of_questions(subsection_with_numeric_conditionals, case_log)).to eq(7)
end
it "includes conditional questions with met numeric conditions" do
expect(total_number_of_questions(
subsection_with_numeric_conditionals,
case_log_with_met_numeric_condition,
)).to eq(15)
end
it "ignores questions with unmet radio conditions" do
expect(total_number_of_questions(subsection_with_radio_conditionals, case_log)).to eq(6)
end
it "includes conditional questions with met radio conditions" do
expect(total_number_of_questions(
subsection_with_radio_conditionals,
case_log_with_met_radio_condition,
)).to eq(8)
end
context "conditional questions with type that hasn't been implemented yet" do
let(:unimplemented_conditional) do
{"question_1"=>
{"header"=>"The actual question?",
"hint_text"=>"",
"type"=>"date",
"check_answer_label"=>"Question Label",
"conditional_for"=>{"question_2"=>["12-12-2021"]}},
"question_2"=>
{"header"=>"The second actual question?",
"hint_text"=>"",
"type"=>"radio",
"check_answer_label"=>"The second question label",
"answer_options"=>{"0"=>"Yes", "1"=>"No"}}
}
end
it "raises an error" do
allow_any_instance_of(Form).to receive(:questions_for_subsection).and_return(unimplemented_conditional)
expect { total_number_of_questions(subsection, case_log) }.to raise_error(RuntimeError, "Not implemented yet")
end
end
end
end

Loading…
Cancel
Save