From 869e934a69bcaf92aa70446407916d25be169561 Mon Sep 17 00:00:00 2001 From: natdeanlewissoftwire <94526761+natdeanlewissoftwire@users.noreply.github.com> Date: Wed, 4 Jan 2023 11:25:30 +0000 Subject: [PATCH] Cldc 1544 mortgage amount (#1136) * feat: add sales log seeds * feat: add question and page and update db * tests: add and update tests --- .../form/sales/pages/mortgage_amount.rb | 14 ++++++ .../form/sales/questions/mortgage_amount.rb | 14 ++++++ .../discounted_ownership_scheme.rb | 1 + .../form/sales/subsections/outright_sale.rb | 1 + .../subsections/shared_ownership_scheme.rb | 1 + ...20230104093057_change_mortgage_to_float.rb | 13 +++++ db/schema.rb | 4 +- db/seeds.rb | 32 +++++++++++- .../form/sales/pages/mortgage_amount_spec.rb | 33 +++++++++++++ .../sales/questions/mortgage_amount_spec.rb | 49 +++++++++++++++++++ .../discounted_ownership_scheme_spec.rb | 11 +++-- .../sales/subsections/outright_sale_spec.rb | 5 +- .../shared_ownership_scheme_spec.rb | 1 + spec/models/form_handler_spec.rb | 4 +- 14 files changed, 173 insertions(+), 10 deletions(-) create mode 100644 app/models/form/sales/pages/mortgage_amount.rb create mode 100644 app/models/form/sales/questions/mortgage_amount.rb create mode 100644 db/migrate/20230104093057_change_mortgage_to_float.rb create mode 100644 spec/models/form/sales/pages/mortgage_amount_spec.rb create mode 100644 spec/models/form/sales/questions/mortgage_amount_spec.rb diff --git a/app/models/form/sales/pages/mortgage_amount.rb b/app/models/form/sales/pages/mortgage_amount.rb new file mode 100644 index 000000000..1c80b2f52 --- /dev/null +++ b/app/models/form/sales/pages/mortgage_amount.rb @@ -0,0 +1,14 @@ +class Form::Sales::Pages::MortgageAmount < ::Form::Page + def initialize(id, hsh, subsection) + super + @header = "Mortgage Amount" + @description = "" + @subsection = subsection + end + + def questions + @questions ||= [ + Form::Sales::Questions::MortgageAmount.new(nil, nil, self), + ] + end +end diff --git a/app/models/form/sales/questions/mortgage_amount.rb b/app/models/form/sales/questions/mortgage_amount.rb new file mode 100644 index 000000000..c385563c5 --- /dev/null +++ b/app/models/form/sales/questions/mortgage_amount.rb @@ -0,0 +1,14 @@ +class Form::Sales::Questions::MortgageAmount < ::Form::Question + def initialize(id, hsh, page) + super + @id = "mortgage" + @check_answer_label = "Mortgage amount" + @header = "What is the mortgage amount?" + @type = "numeric" + @page = page + @min = 0 + @width = 5 + @prefix = "£" + @hint_text = "" + end +end diff --git a/app/models/form/sales/subsections/discounted_ownership_scheme.rb b/app/models/form/sales/subsections/discounted_ownership_scheme.rb index b1a485382..1fce2f1bf 100644 --- a/app/models/form/sales/subsections/discounted_ownership_scheme.rb +++ b/app/models/form/sales/subsections/discounted_ownership_scheme.rb @@ -12,6 +12,7 @@ class Form::Sales::Subsections::DiscountedOwnershipScheme < ::Form::Subsection Form::Sales::Pages::LivingBeforePurchase.new("living_before_purchase_discounted_ownership", nil, self), Form::Sales::Pages::AboutPriceRtb.new(nil, nil, self), Form::Sales::Pages::AboutPriceNotRtb.new(nil, nil, self), + Form::Sales::Pages::MortgageAmount.new("mortgage_amount_discounted_ownership", nil, self), Form::Sales::Pages::AboutDeposit.new("about_deposit_discounted_ownership", nil, self), ] end diff --git a/app/models/form/sales/subsections/outright_sale.rb b/app/models/form/sales/subsections/outright_sale.rb index cc566c396..4b95d04c2 100644 --- a/app/models/form/sales/subsections/outright_sale.rb +++ b/app/models/form/sales/subsections/outright_sale.rb @@ -9,6 +9,7 @@ class Form::Sales::Subsections::OutrightSale < ::Form::Subsection def pages @pages ||= [ + Form::Sales::Pages::MortgageAmount.new("mortgage_amount_outright_sale", nil, self), Form::Sales::Pages::AboutDeposit.new("about_deposit_outright_sale", nil, self), ] end diff --git a/app/models/form/sales/subsections/shared_ownership_scheme.rb b/app/models/form/sales/subsections/shared_ownership_scheme.rb index 74dba4351..750d9de88 100644 --- a/app/models/form/sales/subsections/shared_ownership_scheme.rb +++ b/app/models/form/sales/subsections/shared_ownership_scheme.rb @@ -18,6 +18,7 @@ class Form::Sales::Subsections::SharedOwnershipScheme < ::Form::Subsection Form::Sales::Pages::PreviousBedrooms.new(nil, nil, self), Form::Sales::Pages::AboutPrice.new(nil, nil, self), Form::Sales::Pages::AboutPriceSocialHousing.new(nil, nil, self), + Form::Sales::Pages::MortgageAmount.new("mortgage_amount_shared_ownership", nil, self), Form::Sales::Pages::AboutDeposit.new("about_deposit_shared_ownership", nil, self), Form::Sales::Pages::MonthlyRent.new(nil, nil, self), Form::Sales::Pages::ExchangeDate.new(nil, nil, self), diff --git a/db/migrate/20230104093057_change_mortgage_to_float.rb b/db/migrate/20230104093057_change_mortgage_to_float.rb new file mode 100644 index 000000000..201031288 --- /dev/null +++ b/db/migrate/20230104093057_change_mortgage_to_float.rb @@ -0,0 +1,13 @@ +class ChangeMortgageToFloat < ActiveRecord::Migration[7.0] + def self.up + change_table :sales_logs do |t| + t.change :mortgage, :decimal, precision: 10, scale: 2 + end + end + + def self.down + change_table :sales_logs do |t| + t.change :mortgage, :integer + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 6a3ddbcdf..ee62f5656 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: 2023_01_03_094948) do +ActiveRecord::Schema[7.0].define(version: 2023_01_04_093057) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -408,7 +408,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_01_03_094948) do t.bigint "updated_by_id" t.integer "details_known_1" t.integer "income1_value_check" - t.integer "mortgage" + t.decimal "mortgage", precision: 10, scale: 2 t.integer "inc2mort" t.integer "mortgage_value_check" t.integer "ecstat3" diff --git a/db/seeds.rb b/db/seeds.rb index 20975feb8..4d641d52b 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -146,6 +146,36 @@ unless Rails.env.test? child_organisation: managing_agent2, ) + if (Rails.env.development? || Rails.env.review?) && SalesLog.count.zero? + SalesLog.find_or_create_by!( + saledate: Date.new(1, 1, 1), + purchid: "1", + ownershipsch: 1, + type: 2, + jointpur: 1, + jointmore: 1, + ) + + SalesLog.find_or_create_by!( + saledate: Date.new(1, 1, 1), + purchid: "1", + ownershipsch: 2, + type: 8, + jointpur: 1, + jointmore: 1, + ) + + SalesLog.find_or_create_by!( + saledate: Date.new(1, 1, 1), + purchid: "1", + ownershipsch: 3, + type: 10, + companybuy: 1, + ) + + pp "Seeded a sales log of each type" + end + if Rails.env.development? || Rails.env.review? User.find_or_create_by!( name: "Provider", @@ -273,9 +303,9 @@ unless Rails.env.test? units: 1, mobility_type: "W", ) + pp "Seeded 3 dummy schemes" end - pp "Seeded 3 dummy schemes" if LaRentRange.count.zero? Dir.glob("config/rent_range_data/*.csv").each do |path| start_year = File.basename(path, ".csv") diff --git a/spec/models/form/sales/pages/mortgage_amount_spec.rb b/spec/models/form/sales/pages/mortgage_amount_spec.rb new file mode 100644 index 000000000..28c37908b --- /dev/null +++ b/spec/models/form/sales/pages/mortgage_amount_spec.rb @@ -0,0 +1,33 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Pages::MortgageAmount, 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[mortgage]) + end + + it "has the correct id" do + expect(page.id).to eq(nil) + end + + it "has the correct header" do + expect(page.header).to eq("Mortgage Amount") + 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 diff --git a/spec/models/form/sales/questions/mortgage_amount_spec.rb b/spec/models/form/sales/questions/mortgage_amount_spec.rb new file mode 100644 index 000000000..ac1e5ad5e --- /dev/null +++ b/spec/models/form/sales/questions/mortgage_amount_spec.rb @@ -0,0 +1,49 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Questions::MortgageAmount, 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("mortgage") + end + + it "has the correct header" do + expect(question.header).to eq("What is the mortgage amount?") + end + + it "has the correct check_answer_label" do + expect(question.check_answer_label).to eq("Mortgage amount") + end + + it "has the correct type" do + expect(question.type).to eq("numeric") + 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 correct width" do + expect(question.width).to eq(5) + end + + it "has correct prefix" do + expect(question.prefix).to eq("£") + end + + it "has correct min" do + expect(question.min).to eq(0) + end +end diff --git a/spec/models/form/sales/subsections/discounted_ownership_scheme_spec.rb b/spec/models/form/sales/subsections/discounted_ownership_scheme_spec.rb index 3da535e54..0adb25d3c 100644 --- a/spec/models/form/sales/subsections/discounted_ownership_scheme_spec.rb +++ b/spec/models/form/sales/subsections/discounted_ownership_scheme_spec.rb @@ -13,10 +13,13 @@ RSpec.describe Form::Sales::Subsections::DiscountedOwnershipScheme, type: :model it "has correct pages" do expect(discounted_ownership_scheme.pages.map(&:id)).to eq( - %w[living_before_purchase_discounted_ownership - about_price_rtb - about_price_not_rtb - about_deposit_discounted_ownership], + %w[ + living_before_purchase_discounted_ownership + about_price_rtb + about_price_not_rtb + mortgage_amount_discounted_ownership + about_deposit_discounted_ownership + ], ) end diff --git a/spec/models/form/sales/subsections/outright_sale_spec.rb b/spec/models/form/sales/subsections/outright_sale_spec.rb index 75f47bbc0..49626d81b 100644 --- a/spec/models/form/sales/subsections/outright_sale_spec.rb +++ b/spec/models/form/sales/subsections/outright_sale_spec.rb @@ -13,7 +13,10 @@ RSpec.describe Form::Sales::Subsections::OutrightSale, type: :model do it "has correct pages" do expect(outright_sale.pages.map(&:id)).to eq( - %w[about_deposit_outright_sale], + %w[ + mortgage_amount_outright_sale + about_deposit_outright_sale + ], ) end diff --git a/spec/models/form/sales/subsections/shared_ownership_scheme_spec.rb b/spec/models/form/sales/subsections/shared_ownership_scheme_spec.rb index aabf19c13..345b77675 100644 --- a/spec/models/form/sales/subsections/shared_ownership_scheme_spec.rb +++ b/spec/models/form/sales/subsections/shared_ownership_scheme_spec.rb @@ -23,6 +23,7 @@ RSpec.describe Form::Sales::Subsections::SharedOwnershipScheme, type: :model do previous_bedrooms about_price about_price_social_housing + mortgage_amount_shared_ownership about_deposit_shared_ownership monthly_rent exchange_contracts diff --git a/spec/models/form_handler_spec.rb b/spec/models/form_handler_spec.rb index e25eeb375..765814ca7 100644 --- a/spec/models/form_handler_spec.rb +++ b/spec/models/form_handler_spec.rb @@ -52,14 +52,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(86) + expect(form.pages.count).to eq(89) 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(86) + expect(form.pages.count).to eq(89) expect(form.name).to eq("2021_2022_sales") end end