From bd1b4c77ad90b949f48f8461629311ec88c3bea1 Mon Sep 17 00:00:00 2001 From: Nat Dean-Lewis Date: Wed, 22 Apr 2026 09:38:24 +0100 Subject: [PATCH] CLDC-4230: add prefers not to say option to ALL age questions --- app/models/form/lettings/questions/age.rb | 5 ++++- app/models/form/lettings/questions/age1.rb | 5 ++++- app/models/form/lettings/questions/age1_known.rb | 12 ++++++++++-- app/models/form/lettings/questions/age_known.rb | 11 ++++++++++- app/models/form/sales/questions/age2.rb | 14 ++++++++++---- .../form/sales/questions/buyer2_age_known.rb | 12 ++++++++++++ app/models/form/sales/questions/person_age.rb | 14 ++++++++++---- .../form/sales/questions/person_age_known.rb | 12 ++++++++++++ .../form/lettings/questions/age1_known_spec.rb | 4 ++++ .../form/lettings/questions/age_known_spec.rb | 7 +++++++ .../form/sales/questions/buyer2_age_known_spec.rb | 10 ++++++---- .../form/sales/questions/person_age_known_spec.rb | 13 +++++++++++++ 12 files changed, 102 insertions(+), 17 deletions(-) diff --git a/app/models/form/lettings/questions/age.rb b/app/models/form/lettings/questions/age.rb index 61e70fe05..98719584b 100644 --- a/app/models/form/lettings/questions/age.rb +++ b/app/models/form/lettings/questions/age.rb @@ -5,7 +5,10 @@ class Form::Lettings::Questions::Age < ::Form::Question @copy_key = "lettings.household_characteristics.age#{person_index}.age#{person_index}" @type = "numeric" @width = 2 - @inferred_check_answers_value = [{ "condition" => { "age#{person_index}_known" => 1 }, "value" => "Not known" }] + @inferred_check_answers_value = [ + { "condition" => { "age#{person_index}_known" => 1 }, "value" => "Not known" }, + { "condition" => { "age#{person_index}_known" => 2 }, "value" => "Prefers not to say" }, + ] @check_answers_card_number = person_index @max = 120 @min = 1 diff --git a/app/models/form/lettings/questions/age1.rb b/app/models/form/lettings/questions/age1.rb index 428fabd42..5bbd4d870 100644 --- a/app/models/form/lettings/questions/age1.rb +++ b/app/models/form/lettings/questions/age1.rb @@ -5,7 +5,10 @@ class Form::Lettings::Questions::Age1 < ::Form::Question @copy_key = "lettings.household_characteristics.age1.age1" @type = "numeric" @width = 2 - @inferred_check_answers_value = [{ "condition" => { "age1_known" => 1 }, "value" => "Not known" }] + @inferred_check_answers_value = [ + { "condition" => { "age1_known" => 1 }, "value" => "Not known" }, + { "condition" => { "age1_known" => 2 }, "value" => "Prefers not to say" }, + ] @check_answers_card_number = 1 @max = 120 @min = 16 diff --git a/app/models/form/lettings/questions/age1_known.rb b/app/models/form/lettings/questions/age1_known.rb index 753fdd2cb..7aebf5d48 100644 --- a/app/models/form/lettings/questions/age1_known.rb +++ b/app/models/form/lettings/questions/age1_known.rb @@ -7,11 +7,19 @@ class Form::Lettings::Questions::Age1Known < ::Form::Question @check_answers_card_number = 1 @answer_options = ANSWER_OPTIONS @conditional_for = { "age1" => [0] } - @hidden_in_check_answers = { "depends_on" => [{ "age1_known" => 0 }, { "age1_known" => 1 }] } + @hidden_in_check_answers = { "depends_on" => [{ "age1_known" => 0 }, { "age1_known" => 1 }, { "age1_known" => 2 }] } @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end - ANSWER_OPTIONS = { "0" => { "value" => "Yes" }, "1" => { "value" => "No" } }.freeze + ANSWER_OPTIONS = { "0" => { "value" => "Yes" }, "1" => { "value" => "No" }, "2" => { "value" => "Tenant prefers not to say" } }.freeze QUESTION_NUMBER_FROM_YEAR = { 2023 => 32, 2024 => 31, 2025 => 31, 2026 => 30 }.freeze + + def label_from_value(value, _log = nil, _user = nil) + return unless value + + return "Prefers not to say" if value.to_i == 2 + + super + end end diff --git a/app/models/form/lettings/questions/age_known.rb b/app/models/form/lettings/questions/age_known.rb index c4bb65c2e..0ae9d8842 100644 --- a/app/models/form/lettings/questions/age_known.rb +++ b/app/models/form/lettings/questions/age_known.rb @@ -11,13 +11,14 @@ class Form::Lettings::Questions::AgeKnown < ::Form::Question "depends_on" => [ { "age#{person_index}_known" => 0 }, { "age#{person_index}_known" => 1 }, + { "age#{person_index}_known" => 2 }, ], } @person_index = person_index @question_number = question_number end - ANSWER_OPTIONS = { "0" => { "value" => "Yes" }, "1" => { "value" => "No" } }.freeze + ANSWER_OPTIONS = { "0" => { "value" => "Yes" }, "1" => { "value" => "No" }, "2" => { "value" => "Person prefers not to say" } }.freeze def question_number base_question_number = case form.start_date.year @@ -35,4 +36,12 @@ class Form::Lettings::Questions::AgeKnown < ::Form::Question base_question_number + (form.person_question_count * @person_index) end + + def label_from_value(value, _log = nil, _user = nil) + return unless value + + return "Prefers not to say" if value.to_i == 2 + + super + end end diff --git a/app/models/form/sales/questions/age2.rb b/app/models/form/sales/questions/age2.rb index ecdaada48..de8afb472 100644 --- a/app/models/form/sales/questions/age2.rb +++ b/app/models/form/sales/questions/age2.rb @@ -5,10 +5,16 @@ class Form::Sales::Questions::Age2 < ::Form::Question @copy_key = "sales.household_characteristics.age2.buyer.age2" @type = "numeric" @width = 2 - @inferred_check_answers_value = [{ - "condition" => { "age2_known" => 1 }, - "value" => "Not known", - }] + @inferred_check_answers_value = [ + { + "condition" => { "age2_known" => 1 }, + "value" => "Not known", + }, + { + "condition" => { "age2_known" => 2 }, + "value" => "Prefers not to say", + }, + ] @check_answers_card_number = 2 @max = 110 @min = 16 diff --git a/app/models/form/sales/questions/buyer2_age_known.rb b/app/models/form/sales/questions/buyer2_age_known.rb index 1aac63734..c7d7995ee 100644 --- a/app/models/form/sales/questions/buyer2_age_known.rb +++ b/app/models/form/sales/questions/buyer2_age_known.rb @@ -16,6 +16,9 @@ class Form::Sales::Questions::Buyer2AgeKnown < ::Form::Question { "age2_known" => 1, }, + { + "age2_known" => 2, + }, ], } @check_answers_card_number = 2 @@ -25,7 +28,16 @@ class Form::Sales::Questions::Buyer2AgeKnown < ::Form::Question ANSWER_OPTIONS = { "0" => { "value" => "Yes" }, "1" => { "value" => "No" }, + "2" => { "value" => "Buyer prefers not to say" }, }.freeze QUESTION_NUMBER_FROM_YEAR = { 2023 => 28, 2024 => 30, 2025 => 28, 2026 => 30 }.freeze + + def label_from_value(value, _log = nil, _user = nil) + return unless value + + return "Prefers not to say" if value.to_i == 2 + + super + end end diff --git a/app/models/form/sales/questions/person_age.rb b/app/models/form/sales/questions/person_age.rb index fe38d38e3..d7302b9df 100644 --- a/app/models/form/sales/questions/person_age.rb +++ b/app/models/form/sales/questions/person_age.rb @@ -4,10 +4,16 @@ class Form::Sales::Questions::PersonAge < ::Form::Question @type = "numeric" @copy_key = person_index == 2 ? "sales.household_characteristics.age2.person.age2" : "sales.household_characteristics.age#{person_index}.age#{person_index}" @width = 3 - @inferred_check_answers_value = [{ - "condition" => { "age#{person_index}_known" => 1 }, - "value" => "Not known", - }] + @inferred_check_answers_value = [ + { + "condition" => { "age#{person_index}_known" => 1 }, + "value" => "Not known", + }, + { + "condition" => { "age#{person_index}_known" => 2 }, + "value" => "Prefers not to say", + }, + ] @check_answers_card_number = person_index @min = 0 @max = 110 diff --git a/app/models/form/sales/questions/person_age_known.rb b/app/models/form/sales/questions/person_age_known.rb index 18c0a5455..dc9517ce5 100644 --- a/app/models/form/sales/questions/person_age_known.rb +++ b/app/models/form/sales/questions/person_age_known.rb @@ -15,6 +15,9 @@ class Form::Sales::Questions::PersonAgeKnown < ::Form::Question { "age#{person_index}_known" => 1, }, + { + "age#{person_index}_known" => 2, + }, ], } @check_answers_card_number = person_index @@ -25,6 +28,7 @@ class Form::Sales::Questions::PersonAgeKnown < ::Form::Question ANSWER_OPTIONS = { "0" => { "value" => "Yes" }, "1" => { "value" => "No" }, + "2" => { "value" => "Person prefers not to say" }, }.freeze BASE_QUESTION_NUMBERS = { 2023 => 29, 2024 => 31, 2025 => 29, 2026 => 30 }.freeze @@ -33,4 +37,12 @@ class Form::Sales::Questions::PersonAgeKnown < ::Form::Question base_question_number + (form.person_question_count * @person_index) end + + def label_from_value(value, _log = nil, _user = nil) + return unless value + + return "Prefers not to say" if value.to_i == 2 + + super + end end diff --git a/spec/models/form/lettings/questions/age1_known_spec.rb b/spec/models/form/lettings/questions/age1_known_spec.rb index 94c36d3d5..e05810842 100644 --- a/spec/models/form/lettings/questions/age1_known_spec.rb +++ b/spec/models/form/lettings/questions/age1_known_spec.rb @@ -30,6 +30,7 @@ RSpec.describe Form::Lettings::Questions::Age1Known, type: :model do expect(question.answer_options).to eq({ "0" => { "value" => "Yes" }, "1" => { "value" => "No" }, + "2" => { "value" => "Tenant prefers not to say" }, }) end @@ -53,6 +54,9 @@ RSpec.describe Form::Lettings::Questions::Age1Known, type: :model do { "age1_known" => 1, }, + { + "age1_known" => 2, + }, ], }, ) diff --git a/spec/models/form/lettings/questions/age_known_spec.rb b/spec/models/form/lettings/questions/age_known_spec.rb index 7a1835628..6c2a2d1af 100644 --- a/spec/models/form/lettings/questions/age_known_spec.rb +++ b/spec/models/form/lettings/questions/age_known_spec.rb @@ -23,6 +23,7 @@ RSpec.describe Form::Lettings::Questions::AgeKnown, type: :model do expect(question.answer_options).to eq({ "0" => { "value" => "Yes" }, "1" => { "value" => "No" }, + "2" => { "value" => "Person prefers not to say" }, }) end @@ -47,6 +48,9 @@ RSpec.describe Form::Lettings::Questions::AgeKnown, type: :model do { "age2_known" => 1, }, + { + "age2_known" => 2, + }, ], }, ) @@ -80,6 +84,9 @@ RSpec.describe Form::Lettings::Questions::AgeKnown, type: :model do { "age3_known" => 1, }, + { + "age3_known" => 2, + }, ], }, ) diff --git a/spec/models/form/sales/questions/buyer2_age_known_spec.rb b/spec/models/form/sales/questions/buyer2_age_known_spec.rb index 2f62bce95..a841c6722 100644 --- a/spec/models/form/sales/questions/buyer2_age_known_spec.rb +++ b/spec/models/form/sales/questions/buyer2_age_known_spec.rb @@ -27,6 +27,7 @@ RSpec.describe Form::Sales::Questions::Buyer2AgeKnown, type: :model do expect(question.answer_options).to eq({ "0" => { "value" => "Yes" }, "1" => { "value" => "No" }, + "2" => { "value" => "Buyer prefers not to say" }, }) end @@ -38,10 +39,11 @@ RSpec.describe Form::Sales::Questions::Buyer2AgeKnown, type: :model do it "has correct hidden in check answers" do expect(question.hidden_in_check_answers).to eq({ - "depends_on" => [{ - "age2_known" => 0, - }, - { "age2_known" => 1 }], + "depends_on" => [ + { "age2_known" => 0 }, + { "age2_known" => 1 }, + { "age2_known" => 2 }, + ], }) end diff --git a/spec/models/form/sales/questions/person_age_known_spec.rb b/spec/models/form/sales/questions/person_age_known_spec.rb index 610932296..5881174ff 100644 --- a/spec/models/form/sales/questions/person_age_known_spec.rb +++ b/spec/models/form/sales/questions/person_age_known_spec.rb @@ -24,6 +24,7 @@ RSpec.describe Form::Sales::Questions::PersonAgeKnown, type: :model do expect(question.answer_options).to eq({ "0" => { "value" => "Yes" }, "1" => { "value" => "No" }, + "2" => { "value" => "Person prefers not to say" }, }) end @@ -51,6 +52,9 @@ RSpec.describe Form::Sales::Questions::PersonAgeKnown, type: :model do { "age2_known" => 1, }, + { + "age2_known" => 2, + }, ], }, ) @@ -85,6 +89,9 @@ RSpec.describe Form::Sales::Questions::PersonAgeKnown, type: :model do { "age3_known" => 1, }, + { + "age3_known" => 2, + }, ], }, ) @@ -119,6 +126,9 @@ RSpec.describe Form::Sales::Questions::PersonAgeKnown, type: :model do { "age4_known" => 1, }, + { + "age4_known" => 2, + }, ], }, ) @@ -153,6 +163,9 @@ RSpec.describe Form::Sales::Questions::PersonAgeKnown, type: :model do { "age5_known" => 1, }, + { + "age5_known" => 2, + }, ], }, )