Browse Source

Add a conditional OtherOwnershipType question

pull/884/head
Kat 3 years ago
parent
commit
a7d6c56655
  1. 6
      app/helpers/conditional_questions_helper.rb
  2. 1
      app/models/form/sales/pages/outright_ownership_type.rb
  3. 11
      app/models/form/sales/questions/other_ownership_type.rb
  4. 3
      app/models/form/sales/questions/outright_ownership_type.rb
  5. 2
      app/models/form/sales/subsections/setup.rb
  6. 33
      spec/models/form/sales/questions/other_ownership_type_spec.rb
  7. 6
      spec/models/form/sales/questions/outright_ownership_type_spec.rb
  8. 4
      spec/models/form_handler_spec.rb
  9. 4
      spec/models/form_spec.rb

6
app/helpers/conditional_questions_helper.rb

@ -1,6 +1,6 @@
module ConditionalQuestionsHelper module ConditionalQuestionsHelper
def conditional_questions_for_page(page) def conditional_questions_for_page(page)
page.questions.map(&:conditional_for).compact.map(&:keys).flatten page.questions.map(&:conditional_for).compact.map(&:keys).flatten.map(&:to_s)
end end
def find_conditional_question(page, question, answer_value) def find_conditional_question(page, question, answer_value)
@ -9,10 +9,10 @@ module ConditionalQuestionsHelper
conditional_key = question.conditional_for.find { |_, conditional_value| conditional_key = question.conditional_for.find { |_, conditional_value|
conditional_value.map(&:to_s).include? answer_value.to_s conditional_value.map(&:to_s).include? answer_value.to_s
}&.first }&.first
page.questions.find { |q| q.id == conditional_key } page.questions.find { |q| q.id.to_s == conditional_key.to_s }
end end
def display_question_key_div(page, question) def display_question_key_div(page, question)
"style='display:none;'".html_safe if conditional_questions_for_page(page).include?(question.id) || question.requires_js "style='display:none;'".html_safe if conditional_questions_for_page(page).include?(question.id.to_s) || question.requires_js
end end
end end

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

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

11
app/models/form/sales/questions/other_ownership_type.rb

@ -0,0 +1,11 @@
class Form::Sales::Questions::OtherOwnershipType < ::Form::Question
def initialize(id, hsh, page)
super
@id = "othtype"
@check_answer_label = "Type of other sale"
@header = "What type of sale is it?"
@type = "text"
@width = 10
@page = page
end
end

3
app/models/form/sales/questions/outright_ownership_type.rb

@ -7,6 +7,9 @@ class Form::Sales::Questions::OutrightOwnershipType < ::Form::Question
@type = "radio" @type = "radio"
@answer_options = ANSWER_OPTIONS @answer_options = ANSWER_OPTIONS
@page = page @page = page
@conditional_for = {
"othtype": [12],
}
end end
ANSWER_OPTIONS = { ANSWER_OPTIONS = {

2
app/models/form/sales/subsections/setup.rb

@ -14,8 +14,8 @@ class Form::Sales::Subsections::Setup < ::Form::Subsection
Form::Sales::Pages::PurchaserCode.new(nil, nil, self), Form::Sales::Pages::PurchaserCode.new(nil, nil, self),
Form::Sales::Pages::OwnershipScheme.new(nil, nil, self), Form::Sales::Pages::OwnershipScheme.new(nil, nil, self),
Form::Sales::Pages::SharedOwnershipType.new(nil, nil, self), Form::Sales::Pages::SharedOwnershipType.new(nil, nil, self),
Form::Sales::Pages::OutrightOwnershipType.new(nil, nil, self),
Form::Sales::Pages::DiscountedOwnershipType.new(nil, nil, self), Form::Sales::Pages::DiscountedOwnershipType.new(nil, nil, self),
Form::Sales::Pages::OutrightOwnershipType.new(nil, nil, self),
Form::Sales::Pages::JointPurchase.new(nil, nil, self), Form::Sales::Pages::JointPurchase.new(nil, nil, self),
] ]
end end

33
spec/models/form/sales/questions/other_ownership_type_spec.rb

@ -0,0 +1,33 @@
require "rails_helper"
RSpec.describe Form::Sales::Questions::OtherOwnershipType, 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("othtype")
end
it "has the correct header" do
expect(question.header).to eq("What type of sale is it?")
end
it "has the correct check_answer_label" do
expect(question.check_answer_label).to eq("Type of other sale")
end
it "has the correct type" do
expect(question.type).to eq("text")
end
it "is not marked as derived" do
expect(question.derived?).to be false
end
end

6
spec/models/form/sales/questions/outright_ownership_type_spec.rb

@ -37,4 +37,10 @@ RSpec.describe Form::Sales::Questions::OutrightOwnershipType, type: :model do
"12" => { "value" => "Other sale" }, "12" => { "value" => "Other sale" },
}) })
end end
it "has correct conditional for" do
expect(question.conditional_for).to eq({
"othtype": [12],
})
end
end end

4
spec/models/form_handler_spec.rb

@ -61,14 +61,14 @@ RSpec.describe FormHandler do
it "is able to load a current sales form" do it "is able to load a current sales form" do
form = form_handler.get_form("current_sales") form = form_handler.get_form("current_sales")
expect(form).to be_a(Form) expect(form).to be_a(Form)
expect(form.pages.count).to eq(8) expect(form.pages.count).to eq(9)
expect(form.name).to eq("2022_2023_sales") expect(form.name).to eq("2022_2023_sales")
end end
it "is able to load a previous sales form" do it "is able to load a previous sales form" do
form = form_handler.get_form("previous_sales") form = form_handler.get_form("previous_sales")
expect(form).to be_a(Form) expect(form).to be_a(Form)
expect(form.pages.count).to eq(8) expect(form.pages.count).to eq(9)
expect(form.name).to eq("2021_2022_sales") expect(form.name).to eq("2021_2022_sales")
end end
end end

4
spec/models/form_spec.rb

@ -218,9 +218,9 @@ RSpec.describe Form, type: :model do
expect(form.sections[0].class).to eq(Form::Sales::Sections::Setup) expect(form.sections[0].class).to eq(Form::Sales::Sections::Setup)
expect(form.subsections.count).to eq(1) expect(form.subsections.count).to eq(1)
expect(form.subsections.first.id).to eq("setup") expect(form.subsections.first.id).to eq("setup")
expect(form.pages.count).to eq(8) expect(form.pages.count).to eq(9)
expect(form.pages.first.id).to eq("organisation") expect(form.pages.first.id).to eq("organisation")
expect(form.questions.count).to eq(8) expect(form.questions.count).to eq(10)
expect(form.questions.first.id).to eq("owning_organisation_id") expect(form.questions.first.id).to eq("owning_organisation_id")
expect(form.start_date).to eq(Time.zone.parse("2022-04-01")) expect(form.start_date).to eq(Time.zone.parse("2022-04-01"))
expect(form.end_date).to eq(Time.zone.parse("2023-07-01")) expect(form.end_date).to eq(Time.zone.parse("2023-07-01"))

Loading…
Cancel
Save