From 76030fb1f61fb86f4a6b16a81e8ff438e3f613ac Mon Sep 17 00:00:00 2001 From: Kat Date: Fri, 9 Dec 2022 17:07:16 +0000 Subject: [PATCH] Enable multiple inferred check answers values --- app/models/form/question.rb | 13 ++++-- app/models/form/sales/questions/age1.rb | 4 +- app/models/form/sales/questions/age2.rb | 4 +- .../sales/questions/buyer1_ethnic_group.rb | 4 +- config/forms/2021_2022.json | 44 +++++++++---------- config/forms/2022_2023.json | 44 +++++++++---------- config/forms/schema/generic.json | 4 +- docs/form/builder.md | 4 +- docs/form/question.md | 4 +- spec/fixtures/forms/2021_2022.json | 8 ++-- spec/models/form/sales/questions/age1_spec.rb | 4 +- spec/models/form/sales/questions/age2_spec.rb | 4 +- 12 files changed, 74 insertions(+), 67 deletions(-) diff --git a/app/models/form/question.rb b/app/models/form/question.rb index aa9689295..b415a499c 100644 --- a/app/models/form/question.rb +++ b/app/models/form/question.rb @@ -53,7 +53,7 @@ class Form::Question answer = label_from_value(log[id]) if log[id].present? answer_label = [prefix, format_value(answer), suffix_label(log)].join("") if answer - inferred = inferred_check_answers_value["value"] if inferred_check_answers_value && has_inferred_check_answers_value?(log) + inferred = get_inferred_answer_value(log) return inferred if inferred.present? answer_label @@ -104,11 +104,18 @@ class Form::Question def has_inferred_check_answers_value?(log) return true if selected_answer_option_is_derived?(log) - return inferred_check_answers_value["condition"].values[0] == log[inferred_check_answers_value["condition"].keys[0]] if inferred_check_answers_value.present? + return inferred_check_answers_value&.any? { |inferred_value| inferred_value["condition"].values[0] == log[inferred_value["condition"].keys[0]] } if inferred_check_answers_value.present? false end + def get_inferred_answer_value(log) + return unless inferred_check_answers_value + + inferred_answer = inferred_check_answers_value.find { |inferred_value| inferred_value["condition"].values[0] == log[inferred_value["condition"].keys[0]] } + inferred_answer.present?? inferred_answer["value"] : "" + end + def displayed_answer_options(log, _current_user = nil) answer_options.select do |_key, val| !val.is_a?(Hash) || !val["depends_on"] || form.depends_on_met(val["depends_on"], log) @@ -271,7 +278,7 @@ private end def has_inferred_display_value?(log) - inferred_check_answers_value.present? && log[inferred_check_answers_value["condition"].keys.first] == inferred_check_answers_value["condition"].values.first + inferred_check_answers_value.present? && inferred_check_answers_value.any? { |inferred_value| log[inferred_value["condition"].keys.first] == inferred_value["condition"].values.first} end def checkbox_answer_label(log) diff --git a/app/models/form/sales/questions/age1.rb b/app/models/form/sales/questions/age1.rb index e38224b17..6dd500caa 100644 --- a/app/models/form/sales/questions/age1.rb +++ b/app/models/form/sales/questions/age1.rb @@ -6,12 +6,12 @@ class Form::Sales::Questions::Age1 < ::Form::Question @header = "Age" @type = "numeric" @width = 2 - @inferred_check_answers_value = { + @inferred_check_answers_value = [{ "condition" => { "age1_known" => 1, }, "value" => "Not known", - } + }] @check_answers_card_number = 1 end end diff --git a/app/models/form/sales/questions/age2.rb b/app/models/form/sales/questions/age2.rb index 9696679a8..2ef19beab 100644 --- a/app/models/form/sales/questions/age2.rb +++ b/app/models/form/sales/questions/age2.rb @@ -6,10 +6,10 @@ class Form::Sales::Questions::Age2 < ::Form::Question @header = "Age" @type = "numeric" @width = 2 - @inferred_check_answers_value = { + @inferred_check_answers_value = [{ "condition" => { "age2_known" => 1 }, "value" => "Not known", - } + }] @check_answers_card_number = 2 end end diff --git a/app/models/form/sales/questions/buyer1_ethnic_group.rb b/app/models/form/sales/questions/buyer1_ethnic_group.rb index a9c52dbed..ab151d84d 100644 --- a/app/models/form/sales/questions/buyer1_ethnic_group.rb +++ b/app/models/form/sales/questions/buyer1_ethnic_group.rb @@ -7,12 +7,12 @@ class Form::Sales::Questions::Buyer1EthnicGroup < ::Form::Question @type = "radio" @answer_options = ANSWER_OPTIONS @hint_text = "Buyer 1 is the person in the household who does the most paid work. If it’s a joint purchase and the buyers do the same amount of paid work, buyer 1 is whoever is the oldest." - @inferred_check_answers_value = { + @inferred_check_answers_value = [{ "condition" => { "ethnic_group" => 17, }, "value" => "Prefers not to say", - } + }] @check_answers_card_number = 1 end diff --git a/config/forms/2021_2022.json b/config/forms/2021_2022.json index 3e009fb64..f586b3069 100644 --- a/config/forms/2021_2022.json +++ b/config/forms/2021_2022.json @@ -59,12 +59,12 @@ "is_la_inferred": true } }, - "inferred_check_answers_value": { + "inferred_check_answers_value": [{ "condition": { "postcode_known": 0 }, "value": "Not known" - } + }] } }, "depends_on": [ @@ -1298,12 +1298,12 @@ "max": 120, "step": 1, "width": 2, - "inferred_check_answers_value": { + "inferred_check_answers_value": [{ "condition": { "age1_known": 1 }, "value": "Not known" - } + }] } }, "depends_on": [ @@ -2077,12 +2077,12 @@ "max": 120, "step": 1, "width": 2, - "inferred_check_answers_value": { + "inferred_check_answers_value": [{ "condition": { "age2_known": 1 }, "value": "Not known" - } + }] } }, "depends_on": [ @@ -2612,12 +2612,12 @@ "max": 120, "step": 1, "width": 2, - "inferred_check_answers_value": { + "inferred_check_answers_value": [{ "condition": { "age3_known": 1 }, "value": "Not known" - } + }] } }, "depends_on": [ @@ -3144,12 +3144,12 @@ "max": 120, "step": 1, "width": 2, - "inferred_check_answers_value": { + "inferred_check_answers_value": [{ "condition": { "age4_known": 1 }, "value": "Not known" - } + }] } }, "depends_on": [ @@ -3673,12 +3673,12 @@ "max": 120, "step": 1, "width": 2, - "inferred_check_answers_value": { + "inferred_check_answers_value": [{ "condition": { "age5_known": 1 }, "value": "Not known" - } + }] } }, "depends_on": [ @@ -4199,12 +4199,12 @@ "max": 120, "step": 1, "width": 2, - "inferred_check_answers_value": { + "inferred_check_answers_value": [{ "condition": { "age6_known": 1 }, "value": "Not known" - } + }] } }, "depends_on": [ @@ -4722,12 +4722,12 @@ "max": 120, "step": 1, "width": 2, - "inferred_check_answers_value": { + "inferred_check_answers_value": [{ "condition": { "age7_known": 1 }, "value": "Not known" - } + }] } }, "depends_on": [ @@ -5242,12 +5242,12 @@ "max": 120, "step": 1, "width": 2, - "inferred_check_answers_value": { + "inferred_check_answers_value": [{ "condition": { "age8_known": 1 }, "value": "Not known" - } + }] } }, "depends_on": [ @@ -6517,12 +6517,12 @@ "is_previous_la_inferred": true } }, - "inferred_check_answers_value": { + "inferred_check_answers_value": [{ "condition": { "ppcodenk": 0 }, "value": "Not known" - } + }] } } }, @@ -6950,12 +6950,12 @@ "W92000004": "Wales", "9300000XX": "Outside UK" }, - "inferred_check_answers_value": { + "inferred_check_answers_value": [{ "condition": { "previous_la_known": 0 }, "value": "Not known" - } + }] } }, "depends_on": [ diff --git a/config/forms/2022_2023.json b/config/forms/2022_2023.json index 2edc3e58f..a5048b958 100644 --- a/config/forms/2022_2023.json +++ b/config/forms/2022_2023.json @@ -59,12 +59,12 @@ "is_la_inferred": true } }, - "inferred_check_answers_value": { + "inferred_check_answers_value": [{ "condition": { "postcode_known": 0 }, "value": "Not known" - } + }] } }, "depends_on": [ @@ -1333,12 +1333,12 @@ "max": 120, "step": 1, "width": 2, - "inferred_check_answers_value": { + "inferred_check_answers_value": [{ "condition": { "age1_known": 1 }, "value": "Not known" - } + }] } }, "depends_on": [ @@ -2076,12 +2076,12 @@ "max": 120, "step": 1, "width": 2, - "inferred_check_answers_value": { + "inferred_check_answers_value": [{ "condition": { "age2_known": 1 }, "value": "Not known" - } + }] } }, "depends_on": [ @@ -2611,12 +2611,12 @@ "max": 120, "step": 1, "width": 2, - "inferred_check_answers_value": { + "inferred_check_answers_value": [{ "condition": { "age3_known": 1 }, "value": "Not known" - } + }] } }, "depends_on": [ @@ -3143,12 +3143,12 @@ "max": 120, "step": 1, "width": 2, - "inferred_check_answers_value": { + "inferred_check_answers_value": [{ "condition": { "age4_known": 1 }, "value": "Not known" - } + }] } }, "depends_on": [ @@ -3672,12 +3672,12 @@ "max": 120, "step": 1, "width": 2, - "inferred_check_answers_value": { + "inferred_check_answers_value": [{ "condition": { "age5_known": 1 }, "value": "Not known" - } + }] } }, "depends_on": [ @@ -4198,12 +4198,12 @@ "max": 120, "step": 1, "width": 2, - "inferred_check_answers_value": { + "inferred_check_answers_value": [{ "condition": { "age6_known": 1 }, "value": "Not known" - } + }] } }, "depends_on": [ @@ -4721,12 +4721,12 @@ "max": 120, "step": 1, "width": 2, - "inferred_check_answers_value": { + "inferred_check_answers_value": [{ "condition": { "age7_known": 1 }, "value": "Not known" - } + }] } }, "depends_on": [ @@ -5241,12 +5241,12 @@ "max": 120, "step": 1, "width": 2, - "inferred_check_answers_value": { + "inferred_check_answers_value": [{ "condition": { "age8_known": 1 }, "value": "Not known" - } + }] } }, "depends_on": [ @@ -6482,12 +6482,12 @@ "is_previous_la_inferred": true } }, - "inferred_check_answers_value": { + "inferred_check_answers_value": [{ "condition": { "ppcodenk": 0 }, "value": "Not known" - } + }] } } }, @@ -6915,12 +6915,12 @@ "W92000004": "Wales", "9300000XX": "Outside UK" }, - "inferred_check_answers_value": { + "inferred_check_answers_value": [{ "condition": { "previous_la_known": 0 }, "value": "Not known" - } + }] } }, "depends_on": [ diff --git a/config/forms/schema/generic.json b/config/forms/schema/generic.json index 97552a5f4..e81810052 100644 --- a/config/forms/schema/generic.json +++ b/config/forms/schema/generic.json @@ -115,7 +115,7 @@ "description": "fields that get inferred based on the value of the current field", "type": "object" }, - "inferred_check_answers_value": { + "inferred_check_answers_value": [{ "description": "value that gets displayed in the check answers for this field if the given condition is met", "type": "object", "properties": { @@ -128,7 +128,7 @@ "type": "object" } } - } + }] }, "minProperties": 1 } diff --git a/docs/form/builder.md b/docs/form/builder.md index 97d1e67a9..9b5826e2b 100644 --- a/docs/form/builder.md +++ b/docs/form/builder.md @@ -82,10 +82,10 @@ The JSON should follow the structure: "[snake_case_question_to_enable_2_name_string]": ["condition-that-enables"] }, "inferred_answers": { "field_that_gets_inferred_from_current_field": { "is_that_field_inferred": true } }, - "inferred_check_answers_value": { + "inferred_check_answers_value": [{ "condition": { "field_name_for_inferred_check_answers_condition": "field_value_for_inferred_check_answers_condition" }, "value": "Inferred value that gets displayed if condition is met" - } + }] } }, "depends_on": [{ "question_key": "answer_value_required_for_this_page_to_be_shown" }] diff --git a/docs/form/question.md b/docs/form/question.md index 892952ff6..096fa62d8 100644 --- a/docs/form/question.md +++ b/docs/form/question.md @@ -74,12 +74,12 @@ The answer the data inputter provides to some questions allows us to infer the v "is_la_inferred": true } }, - "inferred_check_answers_value": { + "inferred_check_answers_value": [{ "condition": { "postcode_known": 0 }, "value": "Not known" - } + }] } ``` diff --git a/spec/fixtures/forms/2021_2022.json b/spec/fixtures/forms/2021_2022.json index ce01a82aa..486bc126c 100644 --- a/spec/fixtures/forms/2021_2022.json +++ b/spec/fixtures/forms/2021_2022.json @@ -342,12 +342,12 @@ 1 ] }, - "inferred_check_answers_value": { + "inferred_check_answers_value": [{ "condition": { "armedforces": 3 }, "value": "Prefers not to say" - } + }] }, "leftreg": { "header": "Are they still serving?", @@ -526,12 +526,12 @@ "is_la_inferred": true } }, - "inferred_check_answers_value": { + "inferred_check_answers_value": [{ "condition": { "postcode_known": 0 }, "value": "Not known" - } + }] } } }, diff --git a/spec/models/form/sales/questions/age1_spec.rb b/spec/models/form/sales/questions/age1_spec.rb index 561805c1d..6ff571f69 100644 --- a/spec/models/form/sales/questions/age1_spec.rb +++ b/spec/models/form/sales/questions/age1_spec.rb @@ -40,10 +40,10 @@ RSpec.describe Form::Sales::Questions::Age1, type: :model do end it "has the correct inferred check answers value" do - expect(question.inferred_check_answers_value).to eq({ + expect(question.inferred_check_answers_value).to eq([{ "condition" => { "age1_known" => 1 }, "value" => "Not known", - }) + }]) end it "has the correct check_answers_card_number" do diff --git a/spec/models/form/sales/questions/age2_spec.rb b/spec/models/form/sales/questions/age2_spec.rb index ec1219f47..b9e50debf 100644 --- a/spec/models/form/sales/questions/age2_spec.rb +++ b/spec/models/form/sales/questions/age2_spec.rb @@ -40,12 +40,12 @@ RSpec.describe Form::Sales::Questions::Age2, type: :model do end it "has the correct inferred check answers value" do - expect(question.inferred_check_answers_value).to eq({ + expect(question.inferred_check_answers_value).to eq([{ "condition" => { "age2_known" => 1, }, "value" => "Not known", - }) + }]) end it "has the correct check_answers_card_number" do