diff --git a/app/models/form/sales/pages/shared_ownership_type.rb b/app/models/form/sales/pages/shared_ownership_type.rb new file mode 100644 index 000000000..c90074bae --- /dev/null +++ b/app/models/form/sales/pages/shared_ownership_type.rb @@ -0,0 +1,18 @@ +class Form::Sales::Pages::SharedOwnershipType < ::Form::Page + def initialize(id, hsh, subsection) + super + @id = "shared_ownership_type" + @header = "" + @description = "" + @subsection = subsection + @depends_on = [{ + "ownershipsch" => 1, + }] + end + + def questions + @questions ||= [ + Form::Sales::Questions::SharedOwnershipType.new(nil, nil, self), + ] + end +end diff --git a/app/models/form/sales/questions/shared_ownership_type.rb b/app/models/form/sales/questions/shared_ownership_type.rb new file mode 100644 index 000000000..27d6ea074 --- /dev/null +++ b/app/models/form/sales/questions/shared_ownership_type.rb @@ -0,0 +1,22 @@ +class Form::Sales::Questions::SharedOwnershipType < ::Form::Question + def initialize(id, hsh, page) + super + @id = "type" + @check_answer_label = "Type of shared ownership sale" + @header = "What is the type of shared ownership sale?" + @hint_text = "A shared ownership sale is when the purchaser buys up to 75% of the property value and pays rent to the Private Registered Provider (PRP) on the remaining portion" + @type = "radio" + @answer_options = ANSWER_OPTIONS + @page = page + end + + ANSWER_OPTIONS = { + "2" => { "value" => "Shared Ownership" }, + "24" => { "value" => "Old Persons Shared Ownership" }, + "18" => { "value" => "Social HomeBuy (shared ownership purchase)" }, + "16" => { "value" => "Home Ownership for people with Long Term Disabilities (HOLD)" }, + "28" => { "value" => "Rent to Buy - Shared Ownership" }, + "31" => { "value" => "Right to Shared Ownership" }, + "30" => { "value" => "Shared Ownership - 2021 model lease" }, + }.freeze +end diff --git a/app/models/form/sales/subsections/setup.rb b/app/models/form/sales/subsections/setup.rb index 4c8601e8d..d72e44aa0 100644 --- a/app/models/form/sales/subsections/setup.rb +++ b/app/models/form/sales/subsections/setup.rb @@ -12,6 +12,7 @@ class Form::Sales::Subsections::Setup < ::Form::Subsection Form::Common::Pages::CreatedBy.new(nil, nil, self), Form::Sales::Pages::SaleDate.new(nil, nil, self), Form::Sales::Pages::PurchaserCode.new(nil, nil, self), + Form::Sales::Pages::SharedOwnershipType.new(nil, nil, self), ] end end diff --git a/app/models/sales_log.rb b/app/models/sales_log.rb index 6c4ae2ec8..a2a6dcff3 100644 --- a/app/models/sales_log.rb +++ b/app/models/sales_log.rb @@ -3,6 +3,7 @@ class SalesLogValidator < ActiveModel::Validator end class SalesLog < Log + self.inheritance_column = :_type_disabled has_paper_trail validates_with SalesLogValidator diff --git a/db/migrate/20220916110129_add_shared_ownership_type.rb b/db/migrate/20220916110129_add_shared_ownership_type.rb new file mode 100644 index 000000000..24c930991 --- /dev/null +++ b/db/migrate/20220916110129_add_shared_ownership_type.rb @@ -0,0 +1,5 @@ +class AddSharedOwnershipType < ActiveRecord::Migration[7.0] + def change + add_column :sales_logs, :type, :integer + end +end diff --git a/db/migrate/20220916125704_add_ownership_scheme_to_sales_log.rb b/db/migrate/20220916125704_add_ownership_scheme_to_sales_log.rb new file mode 100644 index 000000000..bb34ec864 --- /dev/null +++ b/db/migrate/20220916125704_add_ownership_scheme_to_sales_log.rb @@ -0,0 +1,5 @@ +class AddOwnershipSchemeToSalesLog < ActiveRecord::Migration[7.0] + def change + add_column :sales_logs, :ownershipsch, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index b187f2867..6548f2c86 100644 --- a/db/schema.rb +++ b/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_15_093559) do +ActiveRecord::Schema[7.0].define(version: 2022_09_16_125704) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -322,6 +322,8 @@ ActiveRecord::Schema[7.0].define(version: 2022_09_15_093559) do t.bigint "managing_organisation_id" t.bigint "created_by_id" t.string "purchid" + t.integer "type" + t.integer "ownershipsch" 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" diff --git a/spec/models/form/sales/pages/shared_ownership_type_spec.rb b/spec/models/form/sales/pages/shared_ownership_type_spec.rb new file mode 100644 index 000000000..7a7f71f8e --- /dev/null +++ b/spec/models/form/sales/pages/shared_ownership_type_spec.rb @@ -0,0 +1,35 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Pages::SharedOwnershipType, 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[type]) + end + + it "has the correct id" do + expect(page.id).to eq("shared_ownership_type") + 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([{ + "ownershipsch" => 1, + }]) + end +end diff --git a/spec/models/form/sales/questions/shared_ownership_type_spec.rb b/spec/models/form/sales/questions/shared_ownership_type_spec.rb new file mode 100644 index 000000000..c164c5794 --- /dev/null +++ b/spec/models/form/sales/questions/shared_ownership_type_spec.rb @@ -0,0 +1,49 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Questions::SharedOwnershipType, 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("type") + end + + it "has the correct header" do + expect(question.header).to eq("What is the type of shared ownership sale?") + end + + it "has the correct check_answer_label" do + expect(question.check_answer_label).to eq("Type of shared ownership sale") + 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("A shared ownership sale is when the purchaser buys up to 75% of the property value and pays rent to the Private Registered Provider (PRP) on the remaining portion") + end + + it "has the correct answer_options" do + expect(question.answer_options).to eq({ + "2" => { "value" => "Shared Ownership" }, + "24" => { "value" => "Old Persons Shared Ownership" }, + "18" => { "value" => "Social HomeBuy (shared ownership purchase)" }, + "16" => { "value" => "Home Ownership for people with Long Term Disabilities (HOLD)" }, + "28" => { "value" => "Rent to Buy - Shared Ownership" }, + "31" => { "value" => "Right to Shared Ownership" }, + "30" => { "value" => "Shared Ownership - 2021 model lease" }, + }) + end +end diff --git a/spec/models/form/sales/subsections/setup_spec.rb b/spec/models/form/sales/subsections/setup_spec.rb index 4e00a7631..80b27e261 100644 --- a/spec/models/form/sales/subsections/setup_spec.rb +++ b/spec/models/form/sales/subsections/setup_spec.rb @@ -13,7 +13,7 @@ RSpec.describe Form::Sales::Subsections::Setup, type: :model do it "has correct pages" do expect(setup.pages.map(&:id)).to eq( - %w[organisation created_by completion_date purchaser_code], + %w[organisation created_by completion_date purchaser_code shared_ownership_type], ) end diff --git a/spec/models/form_handler_spec.rb b/spec/models/form_handler_spec.rb index 4a5908773..499101f2b 100644 --- a/spec/models/form_handler_spec.rb +++ b/spec/models/form_handler_spec.rb @@ -3,6 +3,16 @@ require "rails_helper" RSpec.describe FormHandler do let(:form_handler) { described_class.instance } + before do + Timecop.freeze(Time.utc(2022, 9, 20)) + Singleton.__init__(described_class) + end + + after do + Timecop.unfreeze + Singleton.__init__(described_class) + end + context "when accessing a form in a different year" do before do Timecop.freeze(Time.utc(2021, 8, 3)) @@ -51,14 +61,14 @@ RSpec.describe FormHandler do it "is able to load a current sales form" do form = form_handler.get_form("current_sales") expect(form).to be_a(Form) - expect(form.pages.count).to eq(4) + expect(form.pages.count).to eq(5) expect(form.name).to eq("2022_2023_sales") end it "is able to load a previous sales form" do form = form_handler.get_form("previous_sales") expect(form).to be_a(Form) - expect(form.pages.count).to eq(4) + expect(form.pages.count).to eq(5) expect(form.name).to eq("2021_2022_sales") end end diff --git a/spec/models/form_spec.rb b/spec/models/form_spec.rb index 9305b61b9..38caa5ec6 100644 --- a/spec/models/form_spec.rb +++ b/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.subsections.count).to eq(1) expect(form.subsections.first.id).to eq("setup") - expect(form.pages.count).to eq(4) + expect(form.pages.count).to eq(5) expect(form.pages.first.id).to eq("organisation") - expect(form.questions.count).to eq(4) + expect(form.questions.count).to eq(5) expect(form.questions.first.id).to eq("owning_organisation_id") expect(form.start_date).to eq(Time.zone.parse("2022-04-01")) expect(form.end_date).to eq(Time.zone.parse("2023-07-01"))