Browse Source

Merge branch 'main' into CLDC-1482-sales-log-buyer-company

# Conflicts:
#	app/models/form/sales/pages/buyer_company.rb
#	spec/models/form/sales/pages/buyer_company_spec.rb
#	spec/models/form/sales/subsections/setup_spec.rb
#	spec/models/form_handler_spec.rb
CLDC-1482-sales-log-buyer-company^2
natdeanlewissoftwire 2 years ago
parent
commit
98c326664c
  1. 8
      app/frontend/controllers/conditional_question_controller.js
  2. 2
      app/helpers/question_attribute_helper.rb
  3. 5
      app/models/derived_variables/sales_log_variables.rb
  4. 6
      app/models/form/question.rb
  5. 18
      app/models/form/sales/pages/buyer1_ethnic_background_arab.rb
  6. 18
      app/models/form/sales/pages/buyer1_ethnic_background_asian.rb
  7. 18
      app/models/form/sales/pages/buyer1_ethnic_background_black.rb
  8. 18
      app/models/form/sales/pages/buyer1_ethnic_background_mixed.rb
  9. 18
      app/models/form/sales/pages/buyer1_ethnic_background_white.rb
  10. 15
      app/models/form/sales/pages/buyer1_ethnic_group.rb
  11. 15
      app/models/form/sales/pages/buyer1_working_situation.rb
  12. 15
      app/models/form/sales/pages/buyer2_live_in_property.rb
  13. 1
      app/models/form/sales/pages/buyer2_relationship_to_buyer1.rb
  14. 15
      app/models/form/sales/pages/buyer2_working_situation.rb
  15. 15
      app/models/form/sales/pages/buyer_interview.rb
  16. 18
      app/models/form/sales/pages/gender_identity2.rb
  17. 15
      app/models/form/sales/pages/household_wheelchair.rb
  18. 16
      app/models/form/sales/pages/nationality1.rb
  19. 15
      app/models/form/sales/pages/number_of_others_in_property.rb
  20. 18
      app/models/form/sales/pages/privacy_notice.rb
  21. 4
      app/models/form/sales/pages/property_building_type.rb
  22. 17
      app/models/form/sales/questions/buyer1_ethnic_background_arab.rb
  23. 20
      app/models/form/sales/questions/buyer1_ethnic_background_asian.rb
  24. 18
      app/models/form/sales/questions/buyer1_ethnic_background_black.rb
  25. 19
      app/models/form/sales/questions/buyer1_ethnic_background_mixed.rb
  26. 19
      app/models/form/sales/questions/buyer1_ethnic_background_white.rb
  27. 28
      app/models/form/sales/questions/buyer1_ethnic_group.rb
  28. 26
      app/models/form/sales/questions/buyer1_working_situation.rb
  29. 17
      app/models/form/sales/questions/buyer2_live_in_property.rb
  30. 10
      app/models/form/sales/questions/buyer2_relationship_to_buyer1.rb
  31. 26
      app/models/form/sales/questions/buyer2_working_situation.rb
  32. 17
      app/models/form/sales/questions/buyer_interview.rb
  33. 18
      app/models/form/sales/questions/gender_identity2.rb
  34. 17
      app/models/form/sales/questions/household_wheelchair.rb
  35. 30
      app/models/form/sales/questions/nationality1.rb
  36. 12
      app/models/form/sales/questions/number_of_others_in_property.rb
  37. 10
      app/models/form/sales/questions/other_buyer2_relationship_to_buyer1.rb
  38. 10
      app/models/form/sales/questions/other_nationality1.rb
  39. 18
      app/models/form/sales/questions/privacy_notice.rb
  40. 2
      app/models/form/sales/questions/property_building_type.rb
  41. 5
      app/models/form/sales/sections/household.rb
  42. 14
      app/models/form/sales/subsections/household_characteristics.rb
  43. 15
      app/models/form/sales/subsections/household_needs.rb
  44. 1
      app/models/form/sales/subsections/property_information.rb
  45. 4
      app/models/lettings_log.rb
  46. 4
      app/models/log.rb
  47. 5
      app/models/sales_log.rb
  48. 1
      app/views/form/guidance/_privacy_notice_buyer.erb
  49. 2
      app/views/form/guidance/_privacy_notice_tenant.erb
  50. 587
      config/forms/2021_2022.json
  51. 591
      config/forms/2022_2023.json
  52. 16
      config/forms/schema/2021_2022.json
  53. 21
      config/forms/schema/generic.json
  54. 8
      db/migrate/20220927082602_add_national_column.rb
  55. 6
      db/migrate/20220927100350_add_background_to_sales_log.rb
  56. 5
      db/migrate/20220930134358_add_buyer2_sex_to_sales_log.rb
  57. 7
      db/migrate/20221003092048_add_noint_to_sales_log.rb
  58. 7
      db/migrate/20221003134554_add_buy2livein_to_sales_log.rb
  59. 7
      db/migrate/20221003150610_add_ecstat2_to_sales_log.rb
  60. 7
      db/migrate/20221004095132_add_privacy_notice_to_sales_log.rb
  61. 7
      db/migrate/20221004184301_add_ecstat1_to_sales_log.rb
  62. 7
      db/migrate/20221005090129_add_wheel_to_sales_log.rb
  63. 7
      db/migrate/20221005125543_add_hholdcount_to_sales_log.rb
  64. 5
      db/migrate/20221005150022_remove_otherrelat2_from_sales_log.rb
  65. 18
      db/schema.rb
  66. 10
      spec/factories/sales_log.rb
  67. 18
      spec/features/form/conditional_questions_spec.rb
  68. 1257
      spec/fixtures/forms/2021_2022.json
  69. 96
      spec/fixtures/forms/2022_2023.json
  70. 6
      spec/fixtures/forms/test_validator.json
  71. 4
      spec/helpers/question_attribute_helper_spec.rb
  72. 23
      spec/models/form/question_spec.rb
  73. 33
      spec/models/form/sales/pages/buyer1_ethnic_background_arab_spec.rb
  74. 33
      spec/models/form/sales/pages/buyer1_ethnic_background_asian_spec.rb
  75. 33
      spec/models/form/sales/pages/buyer1_ethnic_background_black_spec.rb
  76. 33
      spec/models/form/sales/pages/buyer1_ethnic_background_mixed_spec.rb
  77. 29
      spec/models/form/sales/pages/buyer1_ethnic_background_white_spec.rb
  78. 33
      spec/models/form/sales/pages/buyer1_ethnic_group_spec.rb
  79. 25
      spec/models/form/sales/pages/buyer1_working_situation_spec.rb
  80. 29
      spec/models/form/sales/pages/buyer2_live_in_property_spec.rb
  81. 2
      spec/models/form/sales/pages/buyer2_relationship_to_buyer1_spec.rb
  82. 29
      spec/models/form/sales/pages/buyer2_working_situation_spec.rb
  83. 29
      spec/models/form/sales/pages/buyer_interview_spec.rb
  84. 35
      spec/models/form/sales/pages/gender_identity2_spec.rb
  85. 33
      spec/models/form/sales/pages/nationality1_spec.rb
  86. 29
      spec/models/form/sales/pages/number_of_others_in_property_spec.rb
  87. 33
      spec/models/form/sales/pages/privacy_notice_spec.rb
  88. 4
      spec/models/form/sales/pages/property_building_type_spec.rb
  89. 44
      spec/models/form/sales/questions/buyer1_ethnic_background_arab_spec.rb
  90. 47
      spec/models/form/sales/questions/buyer1_ethnic_background_asian_spec.rb
  91. 45
      spec/models/form/sales/questions/buyer1_ethnic_background_black_spec.rb
  92. 46
      spec/models/form/sales/questions/buyer1_ethnic_background_mixed_spec.rb
  93. 46
      spec/models/form/sales/questions/buyer1_ethnic_background_white_spec.rb
  94. 49
      spec/models/form/sales/questions/buyer1_ethnic_group_spec.rb
  95. 49
      spec/models/form/sales/questions/buyer1_working_situation_spec.rb
  96. 44
      spec/models/form/sales/questions/buyer2_live_in_property_spec.rb
  97. 16
      spec/models/form/sales/questions/buyer2_relationship_to_buyer1_spec.rb
  98. 53
      spec/models/form/sales/questions/buyer2_working_situation_spec.rb
  99. 44
      spec/models/form/sales/questions/buyer_interview_spec.rb
  100. 42
      spec/models/form/sales/questions/gender_identity2_spec.rb
  101. Some files were not shown because too many files have changed in this diff Show More

8
app/frontend/controllers/conditional_question_controller.js

@ -8,14 +8,16 @@ export default class extends Controller {
displayConditional () {
if (this.element.checked) {
const selectedValue = this.element.value
const conditionalFor = JSON.parse(this.element.dataset.info)
const dataInfo = JSON.parse(this.element.dataset.info)
const conditionalFor = dataInfo.conditional_questions
const logType = dataInfo.log_type
Object.entries(conditionalFor).forEach(([targetQuestion, conditions]) => {
if (!conditions.map(String).includes(String(selectedValue))) {
const textNumericInput = document.getElementById(`lettings-log-${targetQuestion.replaceAll('_', '-')}-field`)
const textNumericInput = document.getElementById(`${logType}-log-${targetQuestion.replaceAll('_', '-')}-field`)
if (textNumericInput == null) {
const dateInputs = [1, 2, 3].map((idx) => {
return document.getElementById(`lettings_log_${targetQuestion}_${idx}i`)
return document.getElementById(`${logType}_log_${targetQuestion}_${idx}i`)
})
this.clearDateInputs(dateInputs)
} else {

2
app/helpers/question_attribute_helper.rb

@ -27,7 +27,7 @@ private
{
"data-controller": "conditional-question",
"data-action": "click->conditional-question#displayConditional",
"data-info": question.conditional_for.to_json,
"data-info": { conditional_questions: question.conditional_for, log_type: question.form.type }.to_json,
}
end
end

5
app/models/derived_variables/sales_log_variables.rb

@ -0,0 +1,5 @@
module DerivedVariables::SalesLogVariables
def set_derived_fields!
self.ethnic = 17 if ethnic_refused?
end
end

6
app/models/form/question.rb

@ -50,9 +50,11 @@ 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
return answer_label if answer_label
has_inferred_check_answers_value?(log) ? inferred_check_answers_value["value"] : ""
inferred = inferred_check_answers_value["value"] if inferred_check_answers_value && has_inferred_check_answers_value?(log)
return inferred if inferred.present?
answer_label
end
def get_inferred_answers(log)

18
app/models/form/sales/pages/buyer1_ethnic_background_arab.rb

@ -0,0 +1,18 @@
class Form::Sales::Pages::Buyer1EthnicBackgroundArab < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "buyer_1_ethnic_background_arab"
@header = ""
@description = ""
@subsection = subsection
@depends_on = [{
"ethnic_group" => 4,
}]
end
def questions
@questions ||= [
Form::Sales::Questions::Buyer1EthnicBackgroundArab.new(nil, nil, self),
]
end
end

18
app/models/form/sales/pages/buyer1_ethnic_background_asian.rb

@ -0,0 +1,18 @@
class Form::Sales::Pages::Buyer1EthnicBackgroundAsian < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "buyer_1_ethnic_background_asian"
@header = ""
@description = ""
@subsection = subsection
@depends_on = [{
"ethnic_group" => 2,
}]
end
def questions
@questions ||= [
Form::Sales::Questions::Buyer1EthnicBackgroundAsian.new(nil, nil, self),
]
end
end

18
app/models/form/sales/pages/buyer1_ethnic_background_black.rb

@ -0,0 +1,18 @@
class Form::Sales::Pages::Buyer1EthnicBackgroundBlack < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "buyer_1_ethnic_background_black"
@header = ""
@description = ""
@subsection = subsection
@depends_on = [{
"ethnic_group" => 3,
}]
end
def questions
@questions ||= [
Form::Sales::Questions::Buyer1EthnicBackgroundBlack.new(nil, nil, self),
]
end
end

18
app/models/form/sales/pages/buyer1_ethnic_background_mixed.rb

@ -0,0 +1,18 @@
class Form::Sales::Pages::Buyer1EthnicBackgroundMixed < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "buyer_1_ethnic_background_mixed"
@header = ""
@description = ""
@subsection = subsection
@depends_on = [{
"ethnic_group" => 1,
}]
end
def questions
@questions ||= [
Form::Sales::Questions::Buyer1EthnicBackgroundMixed.new(nil, nil, self),
]
end
end

18
app/models/form/sales/pages/buyer1_ethnic_background_white.rb

@ -0,0 +1,18 @@
class Form::Sales::Pages::Buyer1EthnicBackgroundWhite < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "buyer_1_ethnic_background_white"
@header = ""
@description = ""
@subsection = subsection
@depends_on = [{
"ethnic_group" => 0,
}]
end
def questions
@questions ||= [
Form::Sales::Questions::Buyer1EthnicBackgroundWhite.new(nil, nil, self),
]
end
end

15
app/models/form/sales/pages/buyer1_ethnic_group.rb

@ -0,0 +1,15 @@
class Form::Sales::Pages::Buyer1EthnicGroup < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "buyer_1_ethnic_group"
@header = ""
@description = ""
@subsection = subsection
end
def questions
@questions ||= [
Form::Sales::Questions::Buyer1EthnicGroup.new(nil, nil, self),
]
end
end

15
app/models/form/sales/pages/buyer1_working_situation.rb

@ -0,0 +1,15 @@
class Form::Sales::Pages::Buyer1WorkingSituation < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "buyer_1_working_situation"
@header = "Which of these best describes buyer 1's working situation?"
@description = ""
@subsection = subsection
end
def questions
@questions ||= [
Form::Sales::Questions::Buyer1WorkingSituation.new(nil, nil, self),
]
end
end

15
app/models/form/sales/pages/buyer2_live_in_property.rb

@ -0,0 +1,15 @@
class Form::Sales::Pages::Buyer2LiveInProperty < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "buyer_2_live_in_property"
@header = ""
@description = ""
@subsection = subsection
end
def questions
@questions ||= [
Form::Sales::Questions::Buyer2LiveInProperty.new(nil, nil, self),
]
end
end

1
app/models/form/sales/pages/buyer2_relationship_to_buyer1.rb

@ -13,7 +13,6 @@ class Form::Sales::Pages::Buyer2RelationshipToBuyer1 < ::Form::Page
def questions
@questions ||= [
Form::Sales::Questions::Buyer2RelationshipToBuyer1.new(nil, nil, self),
Form::Sales::Questions::OtherBuyer2RelationshipToBuyer1.new(nil, nil, self),
]
end
end

15
app/models/form/sales/pages/buyer2_working_situation.rb

@ -0,0 +1,15 @@
class Form::Sales::Pages::Buyer2WorkingSituation < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "buyer_2_working_situation"
@header = ""
@description = ""
@subsection = subsection
end
def questions
@questions ||= [
Form::Sales::Questions::Buyer2WorkingSituation.new(nil, nil, self),
]
end
end

15
app/models/form/sales/pages/buyer_interview.rb

@ -0,0 +1,15 @@
class Form::Sales::Pages::BuyerInterview < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "buyer_interview"
@header = ""
@description = ""
@subsection = subsection
end
def questions
@questions ||= [
Form::Sales::Questions::BuyerInterview.new(nil, nil, self),
]
end
end

18
app/models/form/sales/pages/gender_identity2.rb

@ -0,0 +1,18 @@
class Form::Sales::Pages::GenderIdentity2 < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "buyer_2_gender_identity"
@header = ""
@description = ""
@subsection = subsection
@depends_on = [{
"jointpur" => 1,
}]
end
def questions
@questions ||= [
Form::Sales::Questions::GenderIdentity2.new(nil, nil, self),
]
end
end

15
app/models/form/sales/pages/household_wheelchair.rb

@ -0,0 +1,15 @@
class Form::Sales::Pages::HouseholdWheelchair < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "household_wheelchair"
@header = ""
@description = ""
@subsection = subsection
end
def questions
@questions ||= [
Form::Sales::Questions::HouseholdWheelchair.new(nil, nil, self),
]
end
end

16
app/models/form/sales/pages/nationality1.rb

@ -0,0 +1,16 @@
class Form::Sales::Pages::Nationality1 < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "buyer_1_nationality"
@header = ""
@description = ""
@subsection = subsection
end
def questions
@questions ||= [
Form::Sales::Questions::Nationality1.new(nil, nil, self),
Form::Sales::Questions::OtherNationality1.new(nil, nil, self),
]
end
end

15
app/models/form/sales/pages/number_of_others_in_property.rb

@ -0,0 +1,15 @@
class Form::Sales::Pages::NumberOfOthersInProperty < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "number_of_others_in_property"
@header = ""
@description = ""
@subsection = subsection
end
def questions
@questions ||= [
Form::Sales::Questions::NumberOfOthersInProperty.new(nil, nil, self),
]
end
end

18
app/models/form/sales/pages/privacy_notice.rb

@ -0,0 +1,18 @@
class Form::Sales::Pages::PrivacyNotice < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "privacy_notice"
@header = "Department for Levelling Up, Housing and Communities privacy notice"
@description = ""
@subsection = subsection
@depends_on = [{
"noint" => 1,
}]
end
def questions
@questions ||= [
Form::Sales::Questions::PrivacyNotice.new(nil, nil, self),
]
end
end

4
app/models/form/sales/pages/building_type.rb → app/models/form/sales/pages/property_building_type.rb

@ -1,4 +1,4 @@
class Form::Sales::Pages::BuildingType < ::Form::Page
class Form::Sales::Pages::PropertyBuildingType < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "property_building_type"
@ -9,7 +9,7 @@ class Form::Sales::Pages::BuildingType < ::Form::Page
def questions
@questions ||= [
Form::Sales::Questions::BuildingType.new(nil, nil, self),
Form::Sales::Questions::PropertyBuildingType.new(nil, nil, self),
]
end
end

17
app/models/form/sales/questions/buyer1_ethnic_background_arab.rb

@ -0,0 +1,17 @@
class Form::Sales::Questions::Buyer1EthnicBackgroundArab < ::Form::Question
def initialize(id, hsh, page)
super
@id = "ethnic"
@check_answer_label = "Buyer 1’s ethnic background"
@header = "Which of the following best describes the buyer 1’s Arab background?"
@type = "radio"
@answer_options = ANSWER_OPTIONS
@page = page
@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."
end
ANSWER_OPTIONS = {
"19" => { "value" => "Arab" },
"16" => { "value" => "Other ethnic group" },
}.freeze
end

20
app/models/form/sales/questions/buyer1_ethnic_background_asian.rb

@ -0,0 +1,20 @@
class Form::Sales::Questions::Buyer1EthnicBackgroundAsian < ::Form::Question
def initialize(id, hsh, page)
super
@id = "ethnic"
@check_answer_label = "Buyer 1’s ethnic background"
@header = "Which of the following best describes the buyer 1’s Asian or Asian British background?"
@type = "radio"
@answer_options = ANSWER_OPTIONS
@page = page
@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."
end
ANSWER_OPTIONS = {
"10" => { "value" => "Bangladeshi" },
"15" => { "value" => "Chinese" },
"8" => { "value" => "Indian" },
"9" => { "value" => "Pakistani" },
"11" => { "value" => "Any other Asian or Asian British background" },
}.freeze
end

18
app/models/form/sales/questions/buyer1_ethnic_background_black.rb

@ -0,0 +1,18 @@
class Form::Sales::Questions::Buyer1EthnicBackgroundBlack < ::Form::Question
def initialize(id, hsh, page)
super
@id = "ethnic"
@check_answer_label = "Buyer 1’s ethnic background"
@header = "Which of the following best describes the buyer 1’s Black, African, Caribbean or Black British background?"
@type = "radio"
@answer_options = ANSWER_OPTIONS
@page = page
@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."
end
ANSWER_OPTIONS = {
"13" => { "value" => "African" },
"12" => { "value" => "Caribbean" },
"14" => { "value" => "Any other Black, African or Caribbean background" },
}.freeze
end

19
app/models/form/sales/questions/buyer1_ethnic_background_mixed.rb

@ -0,0 +1,19 @@
class Form::Sales::Questions::Buyer1EthnicBackgroundMixed < ::Form::Question
def initialize(id, hsh, page)
super
@id = "ethnic"
@check_answer_label = "Buyer 1’s ethnic background"
@header = "Which of the following best describes the buyer 1’s Mixed or Multiple ethnic groups background?"
@type = "radio"
@answer_options = ANSWER_OPTIONS
@page = page
@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."
end
ANSWER_OPTIONS = {
"4" => { "value" => "White and Black Caribbean" },
"5" => { "value" => "White and Black African" },
"6" => { "value" => "White and Asian" },
"7" => { "value" => "Any other Mixed or Multiple ethnic background" },
}.freeze
end

19
app/models/form/sales/questions/buyer1_ethnic_background_white.rb

@ -0,0 +1,19 @@
class Form::Sales::Questions::Buyer1EthnicBackgroundWhite < ::Form::Question
def initialize(id, hsh, page)
super
@id = "ethnic"
@check_answer_label = "Buyer 1’s ethnic background"
@header = "Which of the following best describes the buyer 1’s White background?"
@type = "radio"
@answer_options = ANSWER_OPTIONS
@page = page
@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."
end
ANSWER_OPTIONS = {
"1" => { "value" => "English, Welsh, Northern Irish, Scottish or British" },
"2" => { "value" => "Irish" },
"18" => { "value" => "Gypsy or Irish Traveller" },
"3" => { "value" => "Any other White background" },
}.freeze
end

28
app/models/form/sales/questions/buyer1_ethnic_group.rb

@ -0,0 +1,28 @@
class Form::Sales::Questions::Buyer1EthnicGroup < ::Form::Question
def initialize(id, hsh, page)
super
@id = "ethnic_group"
@check_answer_label = "Buyer 1’s ethnic group"
@header = "What is buyer 1’s ethnic group?"
@type = "radio"
@answer_options = ANSWER_OPTIONS
@page = page
@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 = {
"condition" => {
"ethnic_group" => 17,
},
"value" => "Prefers not to say",
}
end
ANSWER_OPTIONS = {
"0" => { "value" => "White" },
"1" => { "value" => "Mixed or Multiple ethnic groups" },
"2" => { "value" => "Asian or Asian British" },
"3" => { "value" => "Black, African, Caribbean or Black British" },
"4" => { "value" => "Arab or other ethnic group" },
"divider" => { "value" => true },
"17" => { "value" => "Buyer 1 prefers not to say" },
}.freeze
end

26
app/models/form/sales/questions/buyer1_working_situation.rb

@ -0,0 +1,26 @@
class Form::Sales::Questions::Buyer1WorkingSituation < ::Form::Question
def initialize(id, hsh, page)
super
@id = "ecstat1"
@check_answer_label = "Buyer 1's working situation"
@header = "Which of these best describes buyer 1's working situation?"
@type = "radio"
@answer_options = ANSWER_OPTIONS
@page = page
@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."
end
ANSWER_OPTIONS = {
"2" => { "value" => "Part-time - Less than 30 hours" },
"1" => { "value" => "Full-time - 30 hours or more" },
"3" => { "value" => "In government training into work, such as New Deal" },
"4" => { "value" => "Jobseeker" },
"6" => { "value" => "Not seeking work" },
"8" => { "value" => "Unable to work due to long term sick or disability" },
"5" => { "value" => "Retired" },
"0" => { "value" => "Other" },
"10" => { "value" => "Buyer prefers not to say" },
"7" => { "value" => "Full-time student" },
"9" => { "value" => "Child under 16" },
}.freeze
end

17
app/models/form/sales/questions/buyer2_live_in_property.rb

@ -0,0 +1,17 @@
class Form::Sales::Questions::Buyer2LiveInProperty < ::Form::Question
def initialize(id, hsh, page)
super
@id = "buy2livein"
@check_answer_label = "Will buyer 2 live in the property?"
@header = "Will buyer 2 live in the property?"
@type = "radio"
@hint_text = ""
@answer_options = ANSWER_OPTIONS
@page = page
end
ANSWER_OPTIONS = {
"1" => { "value" => "Yes" },
"2" => { "value" => "No" },
}.freeze
end

10
app/models/form/sales/questions/buyer2_relationship_to_buyer1.rb

@ -8,16 +8,6 @@ class Form::Sales::Questions::Buyer2RelationshipToBuyer1 < ::Form::Question
@hint_text = ""
@page = page
@answer_options = ANSWER_OPTIONS
@conditional_for = {
"otherrelat2" => %w[X],
}
@hidden_in_check_answers = {
"depends_on" => [
{
"relat2" => "X",
},
],
}
end
ANSWER_OPTIONS = {

26
app/models/form/sales/questions/buyer2_working_situation.rb

@ -0,0 +1,26 @@
class Form::Sales::Questions::Buyer2WorkingSituation < ::Form::Question
def initialize(id, hsh, page)
super
@id = "ecstat2"
@check_answer_label = "Buyer 2's working situation"
@header = "Which of these best describes buyer 2's working situation?"
@type = "radio"
@hint_text = ""
@page = page
@answer_options = ANSWER_OPTIONS
end
ANSWER_OPTIONS = {
"2" => { "value" => "Part-time - Less than 30 hours" },
"1" => { "value" => "Full-time - 30 hours or more" },
"3" => { "value" => "In government training into work, such as New Deal" },
"4" => { "value" => "Jobseeker" },
"6" => { "value" => "Not seeking work" },
"8" => { "value" => "Unable to work due to long term sick or disability" },
"5" => { "value" => "Retired" },
"0" => { "value" => "Other" },
"10" => { "value" => "Buyer prefers not to say" },
"7" => { "value" => "Full-time student" },
"9" => { "value" => "Child under 16" },
}.freeze
end

17
app/models/form/sales/questions/buyer_interview.rb

@ -0,0 +1,17 @@
class Form::Sales::Questions::BuyerInterview < ::Form::Question
def initialize(id, hsh, page)
super
@id = "noint"
@check_answer_label = "Buyer interviewed in person?"
@header = "Was the buyer interviewed for any of the answers you will provide on this log?"
@type = "radio"
@hint_text = "You should still try to answer all questions even if the buyer wasn't interviewed in person"
@page = page
@answer_options = ANSWER_OPTIONS
end
ANSWER_OPTIONS = {
"1" => { "value" => "No" },
"2" => { "value" => "Yes" },
}.freeze
end

18
app/models/form/sales/questions/gender_identity2.rb

@ -0,0 +1,18 @@
class Form::Sales::Questions::GenderIdentity2 < ::Form::Question
def initialize(id, hsh, page)
super
@id = "sex2"
@check_answer_label = "Buyer 2’s gender identity"
@header = "Which of these best describes buyer 2’s gender identity?"
@type = "radio"
@page = page
@answer_options = ANSWER_OPTIONS
end
ANSWER_OPTIONS = {
"F" => { "value" => "Female" },
"M" => { "value" => "Male" },
"X" => { "value" => "Non-binary" },
"R" => { "value" => "Buyer prefers not to say" },
}.freeze
end

17
app/models/form/sales/questions/household_wheelchair.rb

@ -0,0 +1,17 @@
class Form::Sales::Questions::HouseholdWheelchair < ::Form::Question
def initialize(id, hsh, page)
super
@id = "wheel"
@header = "Does anyone in the household use a wheelchair?"
@type = "radio"
@answer_options = ANSWER_OPTIONS
@page = page
@hint_text = "This can be inside or outside the home"
end
ANSWER_OPTIONS = {
"1" => { "value" => "Yes" },
"2" => { "value" => "No" },
"3" => { "value" => "Don't know" },
}.freeze
end

30
app/models/form/sales/questions/nationality1.rb

@ -0,0 +1,30 @@
class Form::Sales::Questions::Nationality1 < ::Form::Question
def initialize(id, hsh, page)
super
@id = "national"
@check_answer_label = "Buyer 1’s nationality"
@header = "What is buyer 1’s nationality?"
@type = "radio"
@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."
@page = page
@answer_options = ANSWER_OPTIONS
@conditional_for = {
"othernational" => [12],
}
@hidden_in_check_answers = {
"depends_on" => [
{
"national" => 12,
},
],
}
end
ANSWER_OPTIONS = {
"18" => { "value" => "United Kingdom" },
"17" => { "value" => "Republic of Ireland" },
"19" => { "value" => "European Economic Area (EEA), excluding ROI" },
"12" => { "value" => "Other" },
"13" => { "value" => "Buyer prefers not to say" },
}.freeze
end

12
app/models/form/sales/questions/number_of_others_in_property.rb

@ -0,0 +1,12 @@
class Form::Sales::Questions::NumberOfOthersInProperty < ::Form::Question
def initialize(id, hsh, page)
super
@id = "hholdcount"
@check_answer_label = "Number of other people living in the property"
@header = "Besides the buyers, how many other people live in the property?"
@type = "numeric"
@hint_text = "You can provide details for a maximum of 4 other people."
@page = page
@width = 2
end
end

10
app/models/form/sales/questions/other_buyer2_relationship_to_buyer1.rb

@ -1,10 +0,0 @@
class Form::Sales::Questions::OtherBuyer2RelationshipToBuyer1 < ::Form::Question
def initialize(id, hsh, page)
super
@id = "otherrelat2"
@check_answer_label = "Buyer 2's relationship to buyer 1"
@header = "Buyer 2's relationship to buyer 1"
@type = "text"
@page = page
end
end

10
app/models/form/sales/questions/other_nationality1.rb

@ -0,0 +1,10 @@
class Form::Sales::Questions::OtherNationality1 < ::Form::Question
def initialize(id, hsh, page)
super
@id = "othernational"
@check_answer_label = "Buyer 1’s nationality"
@header = "Nationality"
@type = "text"
@page = page
end
end

18
app/models/form/sales/questions/privacy_notice.rb

@ -0,0 +1,18 @@
class Form::Sales::Questions::PrivacyNotice < ::Form::Question
def initialize(id, hsh, page)
super
@id = "privacynotice"
@check_answer_label = "Buyer has seen the privacy notice?"
@header = "Declaration"
@type = "checkbox"
@hint_text = ""
@page = page
@answer_options = ANSWER_OPTIONS
@guidance_position = GuidancePosition::TOP
@guidance_partial = "privacy_notice_buyer"
end
ANSWER_OPTIONS = {
"privacynotice" => { "value" => "The buyer has seen the DLUHC privacy notice" },
}.freeze
end

2
app/models/form/sales/questions/building_type.rb → app/models/form/sales/questions/property_building_type.rb

@ -1,4 +1,4 @@
class Form::Sales::Questions::BuildingType < ::Form::Question
class Form::Sales::Questions::PropertyBuildingType < ::Form::Question
def initialize(id, hsh, page)
super
@id = "builtype"

5
app/models/form/sales/sections/household.rb

@ -5,6 +5,9 @@ class Form::Sales::Sections::Household < ::Form::Section
@label = "About the household"
@description = ""
@form = form
@subsections = [Form::Sales::Subsections::HouseholdCharacteristics.new(nil, nil, self)] || []
@subsections = [
Form::Sales::Subsections::HouseholdCharacteristics.new(nil, nil, self),
Form::Sales::Subsections::HouseholdNeeds.new(nil, nil, self),
]
end
end

14
app/models/form/sales/subsections/household_characteristics.rb

@ -9,11 +9,25 @@ class Form::Sales::Subsections::HouseholdCharacteristics < ::Form::Subsection
def pages
@pages ||= [
Form::Sales::Pages::BuyerInterview.new(nil, nil, self),
Form::Sales::Pages::PrivacyNotice.new(nil, nil, self),
Form::Sales::Pages::Age1.new(nil, nil, self),
Form::Sales::Pages::GenderIdentity1.new(nil, nil, self),
Form::Sales::Pages::Buyer1EthnicGroup.new(nil, nil, self),
Form::Sales::Pages::Buyer1EthnicBackgroundBlack.new(nil, nil, self),
Form::Sales::Pages::Buyer1EthnicBackgroundAsian.new(nil, nil, self),
Form::Sales::Pages::Buyer1EthnicBackgroundArab.new(nil, nil, self),
Form::Sales::Pages::Buyer1EthnicBackgroundMixed.new(nil, nil, self),
Form::Sales::Pages::Buyer1EthnicBackgroundWhite.new(nil, nil, self),
Form::Sales::Pages::Nationality1.new(nil, nil, self),
Form::Sales::Pages::Buyer1WorkingSituation.new(nil, nil, self),
Form::Sales::Pages::Buyer1LiveInProperty.new(nil, nil, self),
Form::Sales::Pages::Buyer2RelationshipToBuyer1.new(nil, nil, self),
Form::Sales::Pages::Age2.new(nil, nil, self),
Form::Sales::Pages::GenderIdentity2.new(nil, nil, self),
Form::Sales::Pages::Buyer2WorkingSituation.new(nil, nil, self),
Form::Sales::Pages::Buyer2LiveInProperty.new(nil, nil, self),
Form::Sales::Pages::NumberOfOthersInProperty.new(nil, nil, self),
]
end
end

15
app/models/form/sales/subsections/household_needs.rb

@ -0,0 +1,15 @@
class Form::Sales::Subsections::HouseholdNeeds < ::Form::Subsection
def initialize(id, hsh, section)
super
@id = "household_needs"
@label = "Household needs"
@section = section
@depends_on = [{ "setup" => "completed" }]
end
def pages
@pages ||= [
Form::Sales::Pages::HouseholdWheelchair.new(nil, nil, self),
]
end
end

1
app/models/form/sales/subsections/property_information.rb

@ -10,6 +10,7 @@ class Form::Sales::Subsections::PropertyInformation < ::Form::Subsection
def pages
@pages ||= [
Form::Sales::Pages::PropertyNumberOfBedrooms.new(nil, nil, self),
Form::Sales::Pages::PropertyBuildingType.new(nil, nil, self),
Form::Sales::Pages::PropertyUnitType.new(nil, nil, self),
Form::Sales::Pages::BuildingType.new(nil, nil, self),
]

4
app/models/lettings_log.rb

@ -372,10 +372,6 @@ class LettingsLog < Log
hb == 7
end
def ethnic_refused?
ethnic_group == 17
end
def receives_housing_related_benefits?
if collection_start_year <= 2021
receives_housing_benefit_only? || receives_uc_with_housing_element_excl_housing_benefit? ||

4
app/models/log.rb

@ -36,6 +36,10 @@ class Log < ApplicationRecord
false
end
def ethnic_refused?
ethnic_group == 17
end
private
def update_status!

5
app/models/sales_log.rb

@ -3,10 +3,15 @@ class SalesLogValidator < ActiveModel::Validator
end
class SalesLog < Log
include DerivedVariables::SalesLogVariables
self.inheritance_column = :_type_disabled
has_paper_trail
validates_with SalesLogValidator
before_validation :set_derived_fields!
before_validation :reset_invalidated_dependent_fields!
scope :filter_by_year, ->(year) { where(saledate: Time.zone.local(year.to_i, 4, 1)...Time.zone.local(year.to_i + 1, 4, 1)) }
scope :search_by, ->(param) { filter_by_id(param) }

1
app/views/form/guidance/_privacy_notice_buyer.erb

@ -0,0 +1 @@
<p class="govuk-body">Make sure the buyer has seen <%= govuk_link_to "the Department for Levelling Up, Housing & Communities (DLUHC) privacy notice", privacy_notice_path, target: :_blank %> before completing this log.</p>

2
app/views/form/guidance/_privacy_notice.erb → app/views/form/guidance/_privacy_notice_tenant.erb

@ -1 +1 @@
<p class="govuk-body">Make sure the tenant has seen <%= govuk_link_to "the Department for Levelling Up, Housing & Communities (DLUHC) privacy notice", privacy_notice_path %> before completing this log.</p>
<p class="govuk-body">Make sure the tenant has seen <%= govuk_link_to "the Department for Levelling Up, Housing & Communities (DLUHC) privacy notice", privacy_notice_path, target: :_blank %> before completing this log.</p>

587
config/forms/2021_2022.json

File diff suppressed because it is too large Load Diff

591
config/forms/2022_2023.json

File diff suppressed because it is too large Load Diff

16
config/forms/schema/2021_2022.json

@ -4,7 +4,12 @@
"title": "Form",
"description": "A form",
"type": "object",
"required": ["form_type", "start_year", "end_year", "sections"],
"required": [
"form_type",
"start_year",
"end_year",
"sections"
],
"properties": {
"form_type": {
"description": "",
@ -35,7 +40,9 @@
"[a-z_]+": {
"description": "",
"type": "object",
"required": ["label"],
"required": [
"label"
],
"properties": {
"label": {
"description": "",
@ -62,7 +69,10 @@
"[a-z_]+": {
"description": "",
"type": "object",
"required": ["header", "check_answer_label"],
"required": [
"header",
"check_answer_label"
],
"properties": {
"check_answer_label": {
"description": "",

21
config/forms/schema/generic.json

@ -4,7 +4,12 @@
"title": "Form",
"description": "A form",
"type": "object",
"required": ["form_type", "start_year", "end_year", "sections"],
"required": [
"form_type",
"start_year",
"end_year",
"sections"
],
"properties": {
"form_type": {
"description": "",
@ -35,7 +40,9 @@
"[a-z_]+": {
"description": "SubSection Name",
"type": "object",
"required": ["label"],
"required": [
"label"
],
"properties": {
"label": {
"description": "",
@ -47,7 +54,10 @@
"^(?!(depends_on))[a-z_]+$": {
"description": "Page Name",
"type": "object",
"required": ["header", "questions"],
"required": [
"header",
"questions"
],
"properties": {
"header": {
"description": "",
@ -63,7 +73,10 @@
"[a-z_]+": {
"description": "Question Name",
"type": "object",
"required": ["header", "type"],
"required": [
"header",
"type"
],
"properties": {
"header": {
"description": "",

8
db/migrate/20220927082602_add_national_column.rb

@ -0,0 +1,8 @@
class AddNationalColumn < ActiveRecord::Migration[7.0]
def change
change_table :sales_logs, bulk: true do |t|
t.column :national, :integer
t.column :othernational, :string
end
end
end

6
db/migrate/20220927100350_add_background_to_sales_log.rb

@ -0,0 +1,6 @@
class AddBackgroundToSalesLog < ActiveRecord::Migration[7.0]
change_table :sales_logs, bulk: true do |t|
t.column :ethnic, :integer
t.column :ethnic_group, :integer
end
end

5
db/migrate/20220930134358_add_buyer2_sex_to_sales_log.rb

@ -0,0 +1,5 @@
class AddBuyer2SexToSalesLog < ActiveRecord::Migration[7.0]
def change
add_column :sales_logs, :sex2, :string
end
end

7
db/migrate/20221003092048_add_noint_to_sales_log.rb

@ -0,0 +1,7 @@
class AddNointToSalesLog < ActiveRecord::Migration[7.0]
def change
change_table :sales_logs, bulk: true do |t|
t.column :noint, :int
end
end
end

7
db/migrate/20221003134554_add_buy2livein_to_sales_log.rb

@ -0,0 +1,7 @@
class AddBuy2liveinToSalesLog < ActiveRecord::Migration[7.0]
def change
change_table :sales_logs, bulk: true do |t|
t.column :buy2livein, :int
end
end
end

7
db/migrate/20221003150610_add_ecstat2_to_sales_log.rb

@ -0,0 +1,7 @@
class AddEcstat2ToSalesLog < ActiveRecord::Migration[7.0]
def change
change_table :sales_logs, bulk: true do |t|
t.column :ecstat2, :int
end
end
end

7
db/migrate/20221004095132_add_privacy_notice_to_sales_log.rb

@ -0,0 +1,7 @@
class AddPrivacyNoticeToSalesLog < ActiveRecord::Migration[7.0]
def change
change_table :sales_logs, bulk: true do |t|
t.column :privacynotice, :int
end
end
end

7
db/migrate/20221004184301_add_ecstat1_to_sales_log.rb

@ -0,0 +1,7 @@
class AddEcstat1ToSalesLog < ActiveRecord::Migration[7.0]
def change
change_table :sales_logs, bulk: true do |t|
t.column :ecstat1, :int
end
end
end

7
db/migrate/20221005090129_add_wheel_to_sales_log.rb

@ -0,0 +1,7 @@
class AddWheelToSalesLog < ActiveRecord::Migration[7.0]
def change
change_table :sales_logs, bulk: true do |t|
t.column :wheel, :int
end
end
end

7
db/migrate/20221005125543_add_hholdcount_to_sales_log.rb

@ -0,0 +1,7 @@
class AddHholdcountToSalesLog < ActiveRecord::Migration[7.0]
def change
change_table :sales_logs, bulk: true do |t|
t.column :hholdcount, :int
end
end
end

5
db/migrate/20221005150022_remove_otherrelat2_from_sales_log.rb

@ -0,0 +1,5 @@
class RemoveOtherrelat2FromSalesLog < ActiveRecord::Migration[7.0]
def change
remove_column :sales_logs, :otherrelat2, :string
end
end

18
db/schema.rb

@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema[7.0].define(version: 2022_09_29_125204) do
ActiveRecord::Schema[7.0].define(version: 2022_10_05_150022) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@ -337,14 +337,26 @@ ActiveRecord::Schema[7.0].define(version: 2022_09_29_125204) do
t.integer "age1"
t.integer "age1_known"
t.string "sex1"
t.integer "national"
t.string "othernational"
t.integer "ethnic"
t.integer "ethnic_group"
t.integer "buy1livein"
t.integer "buylivein"
t.integer "builtype"
t.integer "proptype"
t.string "relat2"
t.string "otherrelat2"
t.integer "age2"
t.integer "age2_known"
t.string "relat2"
t.string "otherrelat2"
t.string "sex2"
t.integer "noint"
t.integer "buy2livein"
t.integer "ecstat2"
t.integer "privacynotice"
t.integer "ecstat1"
t.integer "hholdcount"
t.integer "wheel"
t.index ["created_by_id"], name: "index_sales_logs_on_created_by_id"
t.index ["managing_organisation_id"], name: "index_sales_logs_on_managing_organisation_id"
t.index ["owning_organisation_id"], name: "index_sales_logs_on_owning_organisation_id"

10
spec/factories/sales_log.rb

@ -20,15 +20,25 @@ FactoryBot.define do
jointpur { 1 }
beds { 2 }
jointmore { 1 }
noint { 2 }
age1_known { 0 }
age1 { 30 }
sex1 { "X" }
national { 18 }
buy1livein { 1 }
relat2 { "P" }
proptype { 1 }
age2_known { 0 }
age2 { 35 }
builtype { 1 }
ethnic { 3 }
ethnic_group { 12 }
sex2 { "X" }
buy2livein { "1" }
ecstat1 { "1" }
ecstat2 { "1" }
hholdcount { "1" }
wheel { 1 }
end
end
end

18
spec/features/form/conditional_questions_spec.rb

@ -12,6 +12,14 @@ RSpec.describe "Form Conditional Questions" do
managing_organisation: user.organisation,
)
end
let(:sales_log) do
FactoryBot.create(
:sales_log,
:completed,
owning_organisation: user.organisation,
managing_organisation: user.organisation,
)
end
let(:id) { lettings_log.id }
let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json") }
@ -44,5 +52,15 @@ RSpec.describe "Form Conditional Questions" do
visit("/lettings-logs/#{id}/property-postcode")
expect(page).to have_field("lettings-log-postcode-full-field", with: "NW1 6RT")
end
it "gets cleared if the conditional question is hidden after editing the answer" do
sales_log.update!(national: 12, othernational: "other")
visit("/sales-logs/#{sales_log.id}/buyer-1-nationality")
expect(page).to have_field("sales-log-othernational-field", with: "other")
choose("sales-log-national-18-field", allow_label_click: true)
choose("sales-log-national-12-field", allow_label_click: true)
expect(page).to have_field("sales-log-othernational-field", with: "")
end
end
end

1257
spec/fixtures/forms/2021_2022.json vendored

File diff suppressed because it is too large Load Diff

96
spec/fixtures/forms/2022_2023.json vendored

@ -1,55 +1,57 @@
{
"form_type": "lettings",
"start_date": "2022-04-01T00:00:00.000+01:00",
"end_date": "2023-07-01T00:00:00.000+01:00",
"sections": {
"household": {
"label": "About the household",
"subsections": {
"household_characteristics": {
"label": "Household characteristics",
"pages": {
"tenant_code_test": {
"questions": {
"tenancycode": {
"check_answer_label": "Tenant code",
"header": "Different question header text for this year - 2023",
"type": "text",
"width": 10
}
"form_type": "lettings",
"start_date": "2022-04-01T00:00:00.000+01:00",
"end_date": "2023-07-01T00:00:00.000+01:00",
"sections": {
"household": {
"label": "About the household",
"subsections": {
"household_characteristics": {
"label": "Household characteristics",
"pages": {
"tenant_code_test": {
"questions": {
"tenancycode": {
"check_answer_label": "Tenant code",
"header": "Different question header text for this year - 2023",
"type": "text",
"width": 10
}
},
"outstanding_amount_known": {
"header": "",
"description": "",
"questions": {
"tshortfall_known": {
"check_answer_label": "",
"header": "",
"hint_text": "",
"hidden_in_check_answers": true,
"type": "radio",
"derived": true,
"answer_options": {
"0": {
"value": "Yes"
},
"1": {
"value": "No"
}
}
}
},
"depends_on": [false]
}
},
"depends_on": [
{
"setup": "completed"
}
]
}
"outstanding_amount_known": {
"header": "",
"description": "",
"questions": {
"tshortfall_known": {
"check_answer_label": "",
"header": "",
"hint_text": "",
"hidden_in_check_answers": true,
"type": "radio",
"derived": true,
"answer_options": {
"0": {
"value": "Yes"
},
"1": {
"value": "No"
}
}
}
},
"depends_on": [
false
]
}
},
"depends_on": [
{
"setup": "completed"
}
]
}
}
}
}
}

6
spec/fixtures/forms/test_validator.json vendored

@ -22,7 +22,11 @@
"type": "text"
}
},
"depends_on": [{"test": "Yes"}]
"depends_on": [
{
"test": "Yes"
}
]
},
"person_1_age": {
"header": "",

4
spec/helpers/question_attribute_helper_spec.rb

@ -40,7 +40,7 @@ RSpec.describe QuestionAttributeHelper do
"conditional_for" => {
"next_question": ">1",
},
}, nil)
}, form.get_page("rent"))
end
let(:expected_attribs) do
{
@ -48,7 +48,7 @@ RSpec.describe QuestionAttributeHelper do
"data-action": "input->numeric-question#calculateFields click->conditional-question#displayConditional",
"data-target": "lettings-log-#{question.result_field.to_s.dasherize}-field",
"data-calculated": question.fields_to_add.to_json,
"data-info": question.conditional_for.to_json,
"data-info": { conditional_questions: question.conditional_for, log_type: "lettings" }.to_json,
}
end

23
spec/models/form/question_spec.rb

@ -340,6 +340,29 @@ RSpec.describe Form::Question, type: :model do
expect(question.answer_label(lettings_log)).to eq("£500.00 every year")
end
end
context "with inferred_check_answers_value" do
context "when Lettings form" do
let(:section_id) { "household" }
let(:subsection_id) { "household_needs" }
let(:page_id) { "armed_forces" }
let(:question_id) { "armedforces" }
it "returns the inferred label value" do
lettings_log.armedforces = 3
expect(question.answer_label(lettings_log)).to eq("Prefers not to say")
end
end
context "when Sales form" do
let(:sales_log) { FactoryBot.create(:sales_log, :completed, ethnic_group: 17) }
let(:question) { sales_log.form.get_question("ethnic_group", sales_log) }
it "returns the inferred label value" do
expect(question.answer_label(sales_log)).to eq("Prefers not to say")
end
end
end
end
describe ".completed?" do

33
spec/models/form/sales/pages/buyer1_ethnic_background_arab_spec.rb

@ -0,0 +1,33 @@
require "rails_helper"
RSpec.describe Form::Sales::Pages::Buyer1EthnicBackgroundArab, type: :model do
subject(:page) { described_class.new(page_id, page_definition, subsection) }
let(:page_id) { nil }
let(:page_definition) { nil }
let(:subsection) { instance_double(Form::Subsection) }
it "has correct subsection" do
expect(page.subsection).to eq(subsection)
end
it "has correct questions" do
expect(page.questions.map(&:id)).to eq(%w[ethnic])
end
it "has the correct id" do
expect(page.id).to eq("buyer_1_ethnic_background_arab")
end
it "has the correct header" do
expect(page.header).to eq("")
end
it "has the correct description" do
expect(page.description).to eq("")
end
it "has correct depends_on" do
expect(page.depends_on).to eq([{ "ethnic_group" => 4 }])
end
end

33
spec/models/form/sales/pages/buyer1_ethnic_background_asian_spec.rb

@ -0,0 +1,33 @@
require "rails_helper"
RSpec.describe Form::Sales::Pages::Buyer1EthnicBackgroundAsian, type: :model do
subject(:page) { described_class.new(page_id, page_definition, subsection) }
let(:page_id) { nil }
let(:page_definition) { nil }
let(:subsection) { instance_double(Form::Subsection) }
it "has correct subsection" do
expect(page.subsection).to eq(subsection)
end
it "has correct questions" do
expect(page.questions.map(&:id)).to eq(%w[ethnic])
end
it "has the correct id" do
expect(page.id).to eq("buyer_1_ethnic_background_asian")
end
it "has the correct header" do
expect(page.header).to eq("")
end
it "has the correct description" do
expect(page.description).to eq("")
end
it "has correct depends_on" do
expect(page.depends_on).to eq([{ "ethnic_group" => 2 }])
end
end

33
spec/models/form/sales/pages/buyer1_ethnic_background_black_spec.rb

@ -0,0 +1,33 @@
require "rails_helper"
RSpec.describe Form::Sales::Pages::Buyer1EthnicBackgroundBlack, type: :model do
subject(:page) { described_class.new(page_id, page_definition, subsection) }
let(:page_id) { nil }
let(:page_definition) { nil }
let(:subsection) { instance_double(Form::Subsection) }
it "has correct subsection" do
expect(page.subsection).to eq(subsection)
end
it "has correct questions" do
expect(page.questions.map(&:id)).to eq(%w[ethnic])
end
it "has the correct id" do
expect(page.id).to eq("buyer_1_ethnic_background_black")
end
it "has the correct header" do
expect(page.header).to eq("")
end
it "has the correct description" do
expect(page.description).to eq("")
end
it "has correct depends_on" do
expect(page.depends_on).to eq([{ "ethnic_group" => 3 }])
end
end

33
spec/models/form/sales/pages/buyer1_ethnic_background_mixed_spec.rb

@ -0,0 +1,33 @@
require "rails_helper"
RSpec.describe Form::Sales::Pages::Buyer1EthnicBackgroundMixed, type: :model do
subject(:page) { described_class.new(page_id, page_definition, subsection) }
let(:page_id) { nil }
let(:page_definition) { nil }
let(:subsection) { instance_double(Form::Subsection) }
it "has correct subsection" do
expect(page.subsection).to eq(subsection)
end
it "has correct questions" do
expect(page.questions.map(&:id)).to eq(%w[ethnic])
end
it "has the correct id" do
expect(page.id).to eq("buyer_1_ethnic_background_mixed")
end
it "has the correct header" do
expect(page.header).to eq("")
end
it "has the correct description" do
expect(page.description).to eq("")
end
it "has correct depends_on" do
expect(page.depends_on).to eq([{ "ethnic_group" => 1 }])
end
end

29
spec/models/form/sales/pages/buyer1_ethnic_background_white_spec.rb

@ -0,0 +1,29 @@
require "rails_helper"
RSpec.describe Form::Sales::Pages::Buyer1EthnicBackgroundWhite, type: :model do
subject(:page) { described_class.new(page_id, page_definition, subsection) }
let(:page_id) { nil }
let(:page_definition) { nil }
let(:subsection) { instance_double(Form::Subsection) }
it "has correct subsection" do
expect(page.subsection).to eq(subsection)
end
it "has correct questions" do
expect(page.questions.map(&:id)).to eq(%w[ethnic])
end
it "has the correct id" do
expect(page.id).to eq("buyer_1_ethnic_background_white")
end
it "has the correct header" do
expect(page.header).to eq("")
end
it "has the correct description" do
expect(page.description).to eq("")
end
end

33
spec/models/form/sales/pages/buyer1_ethnic_group_spec.rb

@ -0,0 +1,33 @@
require "rails_helper"
RSpec.describe Form::Sales::Pages::Buyer1EthnicGroup, type: :model do
subject(:page) { described_class.new(page_id, page_definition, subsection) }
let(:page_id) { nil }
let(:page_definition) { nil }
let(:subsection) { instance_double(Form::Subsection) }
it "has correct subsection" do
expect(page.subsection).to eq(subsection)
end
it "has correct questions" do
expect(page.questions.map(&:id)).to eq(%w[ethnic_group])
end
it "has the correct id" do
expect(page.id).to eq("buyer_1_ethnic_group")
end
it "has the correct header" do
expect(page.header).to eq("")
end
it "has the correct description" do
expect(page.description).to eq("")
end
it "has correct depends_on" do
expect(page.depends_on).to be_nil
end
end

25
spec/models/form/sales/pages/buyer1_working_situation_spec.rb

@ -0,0 +1,25 @@
require "rails_helper"
RSpec.describe Form::Sales::Pages::Buyer1WorkingSituation, type: :model do
subject(:page) { described_class.new(page_id, page_definition, subsection) }
let(:page_id) { nil }
let(:page_definition) { nil }
let(:subsection) { instance_double(Form::Subsection) }
it "has correct subsection" do
expect(page.subsection).to eq(subsection)
end
it "has correct questions" do
expect(page.questions.map(&:id)).to eq(%w[ecstat1])
end
it "has the correct id" do
expect(page.id).to eq("buyer_1_working_situation")
end
it "has the correct header" do
expect(page.header).to eq("Which of these best describes buyer 1's working situation?")
end
end

29
spec/models/form/sales/pages/buyer2_live_in_property_spec.rb

@ -0,0 +1,29 @@
require "rails_helper"
RSpec.describe Form::Sales::Pages::Buyer2LiveInProperty, type: :model do
subject(:page) { described_class.new(page_id, page_definition, subsection) }
let(:page_id) { nil }
let(:page_definition) { nil }
let(:subsection) { instance_double(Form::Subsection) }
it "has correct subsection" do
expect(page.subsection).to eq(subsection)
end
it "has correct questions" do
expect(page.questions.map(&:id)).to eq(%w[buy2livein])
end
it "has the correct id" do
expect(page.id).to eq("buyer_2_live_in_property")
end
it "has the correct header" do
expect(page.header).to eq("")
end
it "has the correct description" do
expect(page.description).to eq("")
end
end

2
spec/models/form/sales/pages/buyer2_relationship_to_buyer1_spec.rb

@ -12,7 +12,7 @@ RSpec.describe Form::Sales::Pages::Buyer2RelationshipToBuyer1, type: :model do
end
it "has correct questions" do
expect(page.questions.map(&:id)).to eq(%w[relat2 otherrelat2])
expect(page.questions.map(&:id)).to eq(%w[relat2])
end
it "has the correct id" do

29
spec/models/form/sales/pages/buyer2_working_situation_spec.rb

@ -0,0 +1,29 @@
require "rails_helper"
RSpec.describe Form::Sales::Pages::Buyer2WorkingSituation, type: :model do
subject(:page) { described_class.new(page_id, page_definition, subsection) }
let(:page_id) { nil }
let(:page_definition) { nil }
let(:subsection) { instance_double(Form::Subsection) }
it "has correct subsection" do
expect(page.subsection).to eq(subsection)
end
it "has correct questions" do
expect(page.questions.map(&:id)).to eq(%w[ecstat2])
end
it "has the correct id" do
expect(page.id).to eq("buyer_2_working_situation")
end
it "has the correct header" do
expect(page.header).to eq("")
end
it "has the correct description" do
expect(page.description).to eq("")
end
end

29
spec/models/form/sales/pages/buyer_interview_spec.rb

@ -0,0 +1,29 @@
require "rails_helper"
RSpec.describe Form::Sales::Pages::BuyerInterview, type: :model do
subject(:page) { described_class.new(page_id, page_definition, subsection) }
let(:page_id) { nil }
let(:page_definition) { nil }
let(:subsection) { instance_double(Form::Subsection) }
it "has correct subsection" do
expect(page.subsection).to eq(subsection)
end
it "has correct questions" do
expect(page.questions.map(&:id)).to eq(%w[noint])
end
it "has the correct id" do
expect(page.id).to eq("buyer_interview")
end
it "has the correct header" do
expect(page.header).to eq("")
end
it "has the correct description" do
expect(page.description).to eq("")
end
end

35
spec/models/form/sales/pages/gender_identity2_spec.rb

@ -0,0 +1,35 @@
require "rails_helper"
RSpec.describe Form::Sales::Pages::GenderIdentity2, type: :model do
subject(:page) { described_class.new(page_id, page_definition, subsection) }
let(:page_id) { nil }
let(:page_definition) { nil }
let(:subsection) { instance_double(Form::Subsection) }
it "has correct subsection" do
expect(page.subsection).to eq(subsection)
end
it "has correct questions" do
expect(page.questions.map(&:id)).to eq(%w[sex2])
end
it "has the correct id" do
expect(page.id).to eq("buyer_2_gender_identity")
end
it "has the correct header" do
expect(page.header).to eq("")
end
it "has the correct description" do
expect(page.description).to eq("")
end
it "has correct depends_on" do
expect(page.depends_on).to eq([{
"jointpur" => 1,
}])
end
end

33
spec/models/form/sales/pages/nationality1_spec.rb

@ -0,0 +1,33 @@
require "rails_helper"
RSpec.describe Form::Sales::Pages::Nationality1, type: :model do
subject(:page) { described_class.new(page_id, page_definition, subsection) }
let(:page_id) { nil }
let(:page_definition) { nil }
let(:subsection) { instance_double(Form::Subsection) }
it "has correct subsection" do
expect(page.subsection).to eq(subsection)
end
it "has correct questions" do
expect(page.questions.map(&:id)).to eq(%w[national othernational])
end
it "has the correct id" do
expect(page.id).to eq("buyer_1_nationality")
end
it "has the correct header" do
expect(page.header).to eq("")
end
it "has the correct description" do
expect(page.description).to eq("")
end
it "has correct depends_on" do
expect(page.depends_on).to be_nil
end
end

29
spec/models/form/sales/pages/number_of_others_in_property_spec.rb

@ -0,0 +1,29 @@
require "rails_helper"
RSpec.describe Form::Sales::Pages::NumberOfOthersInProperty, type: :model do
subject(:page) { described_class.new(page_id, page_definition, subsection) }
let(:page_id) { nil }
let(:page_definition) { nil }
let(:subsection) { instance_double(Form::Subsection) }
it "has correct subsection" do
expect(page.subsection).to eq(subsection)
end
it "has correct questions" do
expect(page.questions.map(&:id)).to eq(%w[hholdcount])
end
it "has the correct id" do
expect(page.id).to eq("number_of_others_in_property")
end
it "has the correct header" do
expect(page.header).to eq("")
end
it "has the correct description" do
expect(page.description).to eq("")
end
end

33
spec/models/form/sales/pages/privacy_notice_spec.rb

@ -0,0 +1,33 @@
require "rails_helper"
RSpec.describe Form::Sales::Pages::PrivacyNotice, type: :model do
subject(:page) { described_class.new(page_id, page_definition, subsection) }
let(:page_id) { nil }
let(:page_definition) { nil }
let(:subsection) { instance_double(Form::Subsection) }
it "has correct subsection" do
expect(page.subsection).to eq(subsection)
end
it "has correct questions" do
expect(page.questions.map(&:id)).to eq(%w[privacynotice])
end
it "has the correct id" do
expect(page.id).to eq("privacy_notice")
end
it "has the correct header" do
expect(page.header).to eq("Department for Levelling Up, Housing and Communities privacy notice")
end
it "has the correct description" do
expect(page.description).to eq("")
end
it "has correct depends_on" do
expect(page.depends_on).to eq([{ "noint" => 1 }])
end
end

4
spec/models/form/sales/pages/building_type_spec.rb → spec/models/form/sales/pages/property_building_type_spec.rb

@ -1,6 +1,6 @@
require "rails_helper"
RSpec.describe Form::Sales::Pages::BuildingType, type: :model do
RSpec.describe Form::Sales::Pages::PropertyBuildingType, type: :model do
subject(:page) { described_class.new(page_id, page_definition, subsection) }
let(:page_id) { nil }
@ -16,7 +16,7 @@ RSpec.describe Form::Sales::Pages::BuildingType, type: :model do
end
it "has the correct id" do
expect(page.id).to eq("builtype")
expect(page.id).to eq("property_building_type")
end
it "has the correct header" do

44
spec/models/form/sales/questions/buyer1_ethnic_background_arab_spec.rb

@ -0,0 +1,44 @@
require "rails_helper"
RSpec.describe Form::Sales::Questions::Buyer1EthnicBackgroundArab, type: :model do
subject(:question) { described_class.new(question_id, question_definition, page) }
let(:question_id) { nil }
let(:question_definition) { nil }
let(:page) { instance_double(Form::Page) }
it "has correct page" do
expect(question.page).to eq(page)
end
it "has the correct id" do
expect(question.id).to eq("ethnic")
end
it "has the correct header" do
expect(question.header).to eq("Which of the following best describes the buyer 1’s Arab background?")
end
it "has the correct check_answer_label" do
expect(question.check_answer_label).to eq("Buyer 1’s ethnic background")
end
it "has the correct type" do
expect(question.type).to eq("radio")
end
it "is not marked as derived" do
expect(question.derived?).to be false
end
it "has the correct hint_text" do
expect(question.hint_text).to eq("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.")
end
it "has the correct answer_options" do
expect(question.answer_options).to eq({
"16" => { "value" => "Other ethnic group" },
"19" => { "value" => "Arab" },
})
end
end

47
spec/models/form/sales/questions/buyer1_ethnic_background_asian_spec.rb

@ -0,0 +1,47 @@
require "rails_helper"
RSpec.describe Form::Sales::Questions::Buyer1EthnicBackgroundAsian, type: :model do
subject(:question) { described_class.new(question_id, question_definition, page) }
let(:question_id) { nil }
let(:question_definition) { nil }
let(:page) { instance_double(Form::Page) }
it "has correct page" do
expect(question.page).to eq(page)
end
it "has the correct id" do
expect(question.id).to eq("ethnic")
end
it "has the correct header" do
expect(question.header).to eq("Which of the following best describes the buyer 1’s Asian or Asian British background?")
end
it "has the correct check_answer_label" do
expect(question.check_answer_label).to eq("Buyer 1’s ethnic background")
end
it "has the correct type" do
expect(question.type).to eq("radio")
end
it "is not marked as derived" do
expect(question.derived?).to be false
end
it "has the correct hint_text" do
expect(question.hint_text).to eq("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.")
end
it "has the correct answer_options" do
expect(question.answer_options).to eq({
"10" => { "value" => "Bangladeshi" },
"11" => { "value" => "Any other Asian or Asian British background" },
"15" => { "value" => "Chinese" },
"8" => { "value" => "Indian" },
"9" => { "value" => "Pakistani" },
})
end
end

45
spec/models/form/sales/questions/buyer1_ethnic_background_black_spec.rb

@ -0,0 +1,45 @@
require "rails_helper"
RSpec.describe Form::Sales::Questions::Buyer1EthnicBackgroundBlack, type: :model do
subject(:question) { described_class.new(question_id, question_definition, page) }
let(:question_id) { nil }
let(:question_definition) { nil }
let(:page) { instance_double(Form::Page) }
it "has correct page" do
expect(question.page).to eq(page)
end
it "has the correct id" do
expect(question.id).to eq("ethnic")
end
it "has the correct header" do
expect(question.header).to eq("Which of the following best describes the buyer 1’s Black, African, Caribbean or Black British background?")
end
it "has the correct check_answer_label" do
expect(question.check_answer_label).to eq("Buyer 1’s ethnic background")
end
it "has the correct type" do
expect(question.type).to eq("radio")
end
it "is not marked as derived" do
expect(question.derived?).to be false
end
it "has the correct hint_text" do
expect(question.hint_text).to eq("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.")
end
it "has the correct answer_options" do
expect(question.answer_options).to eq({
"12" => { "value" => "Caribbean" },
"13" => { "value" => "African" },
"14" => { "value" => "Any other Black, African or Caribbean background" },
})
end
end

46
spec/models/form/sales/questions/buyer1_ethnic_background_mixed_spec.rb

@ -0,0 +1,46 @@
require "rails_helper"
RSpec.describe Form::Sales::Questions::Buyer1EthnicBackgroundMixed, type: :model do
subject(:question) { described_class.new(question_id, question_definition, page) }
let(:question_id) { nil }
let(:question_definition) { nil }
let(:page) { instance_double(Form::Page) }
it "has correct page" do
expect(question.page).to eq(page)
end
it "has the correct id" do
expect(question.id).to eq("ethnic")
end
it "has the correct header" do
expect(question.header).to eq("Which of the following best describes the buyer 1’s Mixed or Multiple ethnic groups background?")
end
it "has the correct check_answer_label" do
expect(question.check_answer_label).to eq("Buyer 1’s ethnic background")
end
it "has the correct type" do
expect(question.type).to eq("radio")
end
it "is not marked as derived" do
expect(question.derived?).to be false
end
it "has the correct hint_text" do
expect(question.hint_text).to eq("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.")
end
it "has the correct answer_options" do
expect(question.answer_options).to eq({
"4" => { "value" => "White and Black Caribbean" },
"5" => { "value" => "White and Black African" },
"6" => { "value" => "White and Asian" },
"7" => { "value" => "Any other Mixed or Multiple ethnic background" },
})
end
end

46
spec/models/form/sales/questions/buyer1_ethnic_background_white_spec.rb

@ -0,0 +1,46 @@
require "rails_helper"
RSpec.describe Form::Sales::Questions::Buyer1EthnicBackgroundWhite, type: :model do
subject(:question) { described_class.new(question_id, question_definition, page) }
let(:question_id) { nil }
let(:question_definition) { nil }
let(:page) { instance_double(Form::Page) }
it "has correct page" do
expect(question.page).to eq(page)
end
it "has the correct id" do
expect(question.id).to eq("ethnic")
end
it "has the correct header" do
expect(question.header).to eq("Which of the following best describes the buyer 1’s White background?")
end
it "has the correct check_answer_label" do
expect(question.check_answer_label).to eq("Buyer 1’s ethnic background")
end
it "has the correct type" do
expect(question.type).to eq("radio")
end
it "is not marked as derived" do
expect(question.derived?).to be false
end
it "has the correct hint_text" do
expect(question.hint_text).to eq("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.")
end
it "has the correct answer_options" do
expect(question.answer_options).to eq({
"1" => { "value" => "English, Welsh, Northern Irish, Scottish or British" },
"18" => { "value" => "Gypsy or Irish Traveller" },
"2" => { "value" => "Irish" },
"3" => { "value" => "Any other White background" },
})
end
end

49
spec/models/form/sales/questions/buyer1_ethnic_group_spec.rb

@ -0,0 +1,49 @@
require "rails_helper"
RSpec.describe Form::Sales::Questions::Buyer1EthnicGroup, type: :model do
subject(:question) { described_class.new(question_id, question_definition, page) }
let(:question_id) { nil }
let(:question_definition) { nil }
let(:page) { instance_double(Form::Page) }
it "has correct page" do
expect(question.page).to eq(page)
end
it "has the correct id" do
expect(question.id).to eq("ethnic_group")
end
it "has the correct header" do
expect(question.header).to eq("What is buyer 1’s ethnic group?")
end
it "has the correct check_answer_label" do
expect(question.check_answer_label).to eq("Buyer 1’s ethnic group")
end
it "has the correct type" do
expect(question.type).to eq("radio")
end
it "is not marked as derived" do
expect(question.derived?).to be false
end
it "has the correct hint_text" do
expect(question.hint_text).to eq("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.")
end
it "has the correct answer_options" do
expect(question.answer_options).to eq({
"0" => { "value" => "White" },
"1" => { "value" => "Mixed or Multiple ethnic groups" },
"17" => { "value" => "Buyer 1 prefers not to say" },
"2" => { "value" => "Asian or Asian British" },
"3" => { "value" => "Black, African, Caribbean or Black British" },
"4" => { "value" => "Arab or other ethnic group" },
"divider" => { "value" => true },
})
end
end

49
spec/models/form/sales/questions/buyer1_working_situation_spec.rb

@ -0,0 +1,49 @@
require "rails_helper"
RSpec.describe Form::Sales::Questions::Buyer1WorkingSituation, type: :model do
subject(:question) { described_class.new(question_id, question_definition, page) }
let(:question_id) { nil }
let(:question_definition) { nil }
let(:page) { instance_double(Form::Page) }
it "has correct page" do
expect(question.page).to eq(page)
end
it "has the correct id" do
expect(question.id).to eq("ecstat1")
end
it "has the correct header" do
expect(question.header).to eq("Which of these best describes buyer 1's working situation?")
end
it "has the correct check_answer_label" do
expect(question.check_answer_label).to eq("Buyer 1's working situation")
end
it "has the correct type" do
expect(question.type).to eq("radio")
end
it "is not marked as derived" do
expect(question.derived?).to be false
end
it "has the correct answer_options" do
expect(question.answer_options).to eq({
"2" => { "value" => "Part-time - Less than 30 hours" },
"1" => { "value" => "Full-time - 30 hours or more" },
"3" => { "value" => "In government training into work, such as New Deal" },
"4" => { "value" => "Jobseeker" },
"6" => { "value" => "Not seeking work" },
"8" => { "value" => "Unable to work due to long term sick or disability" },
"5" => { "value" => "Retired" },
"0" => { "value" => "Other" },
"10" => { "value" => "Buyer prefers not to say" },
"7" => { "value" => "Full-time student" },
"9" => { "value" => "Child under 16" },
})
end
end

44
spec/models/form/sales/questions/buyer2_live_in_property_spec.rb

@ -0,0 +1,44 @@
require "rails_helper"
RSpec.describe Form::Sales::Questions::Buyer2LiveInProperty, type: :model do
subject(:question) { described_class.new(question_id, question_definition, page) }
let(:question_id) { nil }
let(:question_definition) { nil }
let(:page) { instance_double(Form::Page) }
it "has correct page" do
expect(question.page).to eq(page)
end
it "has the correct id" do
expect(question.id).to eq("buy2livein")
end
it "has the correct header" do
expect(question.header).to eq("Will buyer 2 live in the property?")
end
it "has the correct check_answer_label" do
expect(question.check_answer_label).to eq("Will buyer 2 live in the property?")
end
it "has the correct type" do
expect(question.type).to eq("radio")
end
it "is not marked as derived" do
expect(question.derived?).to be false
end
it "has the correct hint" do
expect(question.hint_text).to eq("")
end
it "has the correct answer_options" do
expect(question.answer_options).to eq({
"1" => { "value" => "Yes" },
"2" => { "value" => "No" },
})
end
end

16
spec/models/form/sales/questions/buyer2_relationship_to_buyer1_spec.rb

@ -43,20 +43,4 @@ RSpec.describe Form::Sales::Questions::Buyer2RelationshipToBuyer1, type: :model
"R" => { "value" => "Buyer prefers not to say" },
})
end
it "has correct conditional for" do
expect(question.conditional_for).to eq({
"otherrelat2" => %w[X],
})
end
it "has correct hidden in check answers" do
expect(question.hidden_in_check_answers).to eq({
"depends_on" => [
{
"relat2" => "X",
},
],
})
end
end

53
spec/models/form/sales/questions/buyer2_working_situation_spec.rb

@ -0,0 +1,53 @@
require "rails_helper"
RSpec.describe Form::Sales::Questions::Buyer2WorkingSituation, type: :model do
subject(:question) { described_class.new(question_id, question_definition, page) }
let(:question_id) { nil }
let(:question_definition) { nil }
let(:page) { instance_double(Form::Page) }
it "has correct page" do
expect(question.page).to eq(page)
end
it "has the correct id" do
expect(question.id).to eq("ecstat2")
end
it "has the correct header" do
expect(question.header).to eq("Which of these best describes buyer 2's working situation?")
end
it "has the correct check_answer_label" do
expect(question.check_answer_label).to eq("Buyer 2's working situation")
end
it "has the correct type" do
expect(question.type).to eq("radio")
end
it "is not marked as derived" do
expect(question.derived?).to be false
end
it "has the correct hint" do
expect(question.hint_text).to eq("")
end
it "has the correct answer_options" do
expect(question.answer_options).to eq({
"2" => { "value" => "Part-time - Less than 30 hours" },
"1" => { "value" => "Full-time - 30 hours or more" },
"3" => { "value" => "In government training into work, such as New Deal" },
"4" => { "value" => "Jobseeker" },
"6" => { "value" => "Not seeking work" },
"8" => { "value" => "Unable to work due to long term sick or disability" },
"5" => { "value" => "Retired" },
"0" => { "value" => "Other" },
"10" => { "value" => "Buyer prefers not to say" },
"7" => { "value" => "Full-time student" },
"9" => { "value" => "Child under 16" },
})
end
end

44
spec/models/form/sales/questions/buyer_interview_spec.rb

@ -0,0 +1,44 @@
require "rails_helper"
RSpec.describe Form::Sales::Questions::BuyerInterview, type: :model do
subject(:question) { described_class.new(question_id, question_definition, page) }
let(:question_id) { nil }
let(:question_definition) { nil }
let(:page) { instance_double(Form::Page) }
it "has correct page" do
expect(question.page).to eq(page)
end
it "has the correct id" do
expect(question.id).to eq("noint")
end
it "has the correct header" do
expect(question.header).to eq("Was the buyer interviewed for any of the answers you will provide on this log?")
end
it "has the correct check_answer_label" do
expect(question.check_answer_label).to eq("Buyer interviewed in person?")
end
it "has the correct type" do
expect(question.type).to eq("radio")
end
it "is not marked as derived" do
expect(question.derived?).to be false
end
it "has the correct hint" do
expect(question.hint_text).to eq("You should still try to answer all questions even if the buyer wasn't interviewed in person")
end
it "has the correct answer_options" do
expect(question.answer_options).to eq({
"1" => { "value" => "No" },
"2" => { "value" => "Yes" },
})
end
end

42
spec/models/form/sales/questions/gender_identity2_spec.rb

@ -0,0 +1,42 @@
require "rails_helper"
RSpec.describe Form::Sales::Questions::GenderIdentity2, type: :model do
subject(:question) { described_class.new(question_id, question_definition, page) }
let(:question_id) { nil }
let(:question_definition) { nil }
let(:page) { instance_double(Form::Page) }
it "has correct page" do
expect(question.page).to eq(page)
end
it "has the correct id" do
expect(question.id).to eq("sex2")
end
it "has the correct header" do
expect(question.header).to eq("Which of these best describes buyer 2’s gender identity?")
end
it "has the correct check_answer_label" do
expect(question.check_answer_label).to eq("Buyer 2’s gender identity")
end
it "has the correct type" do
expect(question.type).to eq("radio")
end
it "is not marked as derived" do
expect(question.derived?).to be false
end
it "has the correct answer_options" do
expect(question.answer_options).to eq({
"F" => { "value" => "Female" },
"M" => { "value" => "Male" },
"X" => { "value" => "Non-binary" },
"R" => { "value" => "Buyer prefers not to say" },
})
end
end

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save