diff --git a/app/models/form/sales/pages/mortgage_lender.rb b/app/models/form/sales/pages/mortgage_lender.rb new file mode 100644 index 000000000..96ebd0733 --- /dev/null +++ b/app/models/form/sales/pages/mortgage_lender.rb @@ -0,0 +1,14 @@ +class Form::Sales::Pages::MortgageLender < ::Form::Page + def initialize(id, hsh, subsection) + super + @header = "" + @description = "" + @subsection = subsection + end + + def questions + @questions ||= [ + Form::Sales::Questions::MortgageLender.new(nil, nil, self), + ] + end +end diff --git a/app/models/form/sales/pages/mortgage_lender_other.rb b/app/models/form/sales/pages/mortgage_lender_other.rb new file mode 100644 index 000000000..a4f6aaf90 --- /dev/null +++ b/app/models/form/sales/pages/mortgage_lender_other.rb @@ -0,0 +1,17 @@ +class Form::Sales::Pages::MortgageLenderOther < ::Form::Page + def initialize(id, hsh, subsection) + super + @header = "" + @description = "" + @subsection = subsection + @depends_on = [{ + "mortgagelender" => 40, + }] + end + + def questions + @questions ||= [ + Form::Sales::Questions::MortgageLenderOther.new(nil, nil, self), + ] + end +end diff --git a/app/models/form/sales/questions/mortgage_lender.rb b/app/models/form/sales/questions/mortgage_lender.rb new file mode 100644 index 000000000..54c9a66c6 --- /dev/null +++ b/app/models/form/sales/questions/mortgage_lender.rb @@ -0,0 +1,58 @@ +class Form::Sales::Questions::MortgageLender < ::Form::Question + def initialize(id, hsh, page) + super + @id = "mortgagelender" + @check_answer_label = "Mortgage Lender" + @header = "What is the name of the mortgage lender?" + @type = "select" + @hint_text = "" + @page = page + @answer_options = ANSWER_OPTIONS + @guidance_position = GuidancePosition::BOTTOM + @guidance_partial = "mortgage_lender" + end + + ANSWER_OPTIONS = { + "" => "Select an option", + "1" => "Atom Bank", + "2" => "Barclays Bank PLC", + "3" => "Bath Building Society", + "4" => "Buckinghamshire Building Society", + "5" => "Cambridge Building Society", + "6" => "Coventry Building Society", + "7" => "Cumberland Building Society", + "8" => "Darlington Building Society", + "9" => "Dudley Building Society", + "10" => "Ecology Building Society", + "11" => "Halifax", + "12" => "Hanley Economic Building Society", + "13" => "Hinckley and Rugby Building Society", + "14" => "Holmesdale Building Society", + "15" => "Ipswich Building Society", + "16" => "Leeds Building Society", + "17" => "Lloyds Bank", + "18" => "Mansfield Building Society", + "19" => "Market Harborough Building Society", + "20" => "Melton Mowbray Building Society", + "21" => "Nationwide Building Society", + "22" => "Natwest", + "23" => "Nedbank Private Wealth", + "24" => "Newbury Building Society", + "25" => "OneSavings Bank", + "26" => "Parity Trust", + "27" => "Penrith Building Society", + "28" => "Pepper Homeloans", + "29" => "Royal Bank of Scotland", + "30" => "Santander", + "31" => "Skipton Building Society", + "32" => "Teachers Building Society", + "33" => "The Co-operative Bank", + "34" => "Tipton & Coseley Building Society", + "35" => "TSB", + "36" => "Ulster Bank", + "37" => "Virgin Money", + "38" => "West Bromwich Building Society", + "39" => "Yorkshire Building Society", + "40" => "Other", + }.freeze +end diff --git a/app/models/form/sales/questions/mortgage_lender_other.rb b/app/models/form/sales/questions/mortgage_lender_other.rb new file mode 100644 index 000000000..fa1fefa49 --- /dev/null +++ b/app/models/form/sales/questions/mortgage_lender_other.rb @@ -0,0 +1,10 @@ +class Form::Sales::Questions::MortgageLenderOther < ::Form::Question + def initialize(id, hsh, page) + super + @id = "mortgagelenderother" + @check_answer_label = "Other Mortgage Lender" + @header = "What is the other mortgage lender?" + @type = "text" + @page = page + 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 bf98c292b..62b5bd9a5 100644 --- a/app/models/form/sales/subsections/discounted_ownership_scheme.rb +++ b/app/models/form/sales/subsections/discounted_ownership_scheme.rb @@ -13,6 +13,8 @@ class Form::Sales::Subsections::DiscountedOwnershipScheme < ::Form::Subsection Form::Sales::Pages::AboutPriceNotRtb.new(nil, nil, self), Form::Sales::Pages::Mortgageused.new("mortgage_used_discounted_ownership", nil, self), Form::Sales::Pages::MortgageAmount.new("mortgage_amount_discounted_ownership", nil, self), + Form::Sales::Pages::MortgageLender.new("mortgage_lender_discounted_ownership", nil, self), + Form::Sales::Pages::MortgageLenderOther.new("mortgage_lender_other_discounted_ownership", nil, self), Form::Sales::Pages::MortgageLength.new("mortgage_length_discounted_ownership", nil, self), Form::Sales::Pages::AboutDepositWithoutDiscount.new("about_deposit_discounted_ownership", nil, self), Form::Sales::Pages::DepositValueCheck.new("discounted_ownership_deposit_value_check", nil, self), diff --git a/app/models/form/sales/subsections/outright_sale.rb b/app/models/form/sales/subsections/outright_sale.rb index 0f60e51bd..3429411a5 100644 --- a/app/models/form/sales/subsections/outright_sale.rb +++ b/app/models/form/sales/subsections/outright_sale.rb @@ -11,6 +11,8 @@ class Form::Sales::Subsections::OutrightSale < ::Form::Subsection Form::Sales::Pages::PurchasePrice.new(nil, nil, self), Form::Sales::Pages::Mortgageused.new("mortgage_used_outright_sale", nil, self), Form::Sales::Pages::MortgageAmount.new("mortgage_amount_outright_sale", nil, self), + Form::Sales::Pages::MortgageLender.new("mortgage_lender_outright_sale", nil, self), + Form::Sales::Pages::MortgageLenderOther.new("mortgage_lender_other_outright_sale", nil, self), Form::Sales::Pages::MortgageLength.new("mortgage_length_outright_sale", nil, self), Form::Sales::Pages::AboutDepositWithoutDiscount.new("about_deposit_outright_sale", nil, self), Form::Sales::Pages::DepositValueCheck.new("outright_sale_deposit_value_check", nil, self), diff --git a/app/models/form/sales/subsections/shared_ownership_scheme.rb b/app/models/form/sales/subsections/shared_ownership_scheme.rb index bfe37a03e..56256823f 100644 --- a/app/models/form/sales/subsections/shared_ownership_scheme.rb +++ b/app/models/form/sales/subsections/shared_ownership_scheme.rb @@ -22,6 +22,8 @@ class Form::Sales::Subsections::SharedOwnershipScheme < ::Form::Subsection Form::Sales::Pages::AboutPriceSharedOwnership.new(nil, nil, self), Form::Sales::Pages::Mortgageused.new("mortgage_used_shared_ownership", nil, self), Form::Sales::Pages::MortgageAmount.new("mortgage_amount_shared_ownership", nil, self), + Form::Sales::Pages::MortgageLender.new("mortgage_lender_shared_ownership", nil, self), + Form::Sales::Pages::MortgageLenderOther.new("mortgage_lender_other_shared_ownership", nil, self), Form::Sales::Pages::MortgageLength.new("mortgage_length_shared_ownership", nil, self), Form::Sales::Pages::AboutDepositWithDiscount.new(nil, nil, self), Form::Sales::Pages::AboutDepositWithoutDiscount.new("about_deposit_shared_ownership", nil, self), diff --git a/app/views/form/guidance/_mortgage_lender.html.erb b/app/views/form/guidance/_mortgage_lender.html.erb new file mode 100644 index 000000000..7991182ed --- /dev/null +++ b/app/views/form/guidance/_mortgage_lender.html.erb @@ -0,0 +1,7 @@ +<%= govuk_details(summary_text: "Can’t find the mortgage lender you’re looking for?") do %> + +<% end %> diff --git a/db/migrate/20230109144039_add_mortgage_lender.rb b/db/migrate/20230109144039_add_mortgage_lender.rb new file mode 100644 index 000000000..7e5b63d92 --- /dev/null +++ b/db/migrate/20230109144039_add_mortgage_lender.rb @@ -0,0 +1,8 @@ +class AddMortgageLender < ActiveRecord::Migration[7.0] + def change + change_table :sales_logs, bulk: true do |t| + t.column :mortgagelender, :integer + t.column :mortgagelenderother, :string + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 1a280f737..87f656bc7 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -491,6 +491,8 @@ ActiveRecord::Schema[7.0].define(version: 2023_01_13_125117) do t.integer "pcodenk" t.string "postcode_full" t.boolean "is_la_inferred" + t.integer "mortgagelender" + t.string "mortgagelenderother" 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/factories/sales_log.rb b/spec/factories/sales_log.rb index 105008350..bdb71ac1c 100644 --- a/spec/factories/sales_log.rb +++ b/spec/factories/sales_log.rb @@ -98,6 +98,7 @@ FactoryBot.define do mortlen { 10 } pcodenk { 1 } is_la_inferred { false } + mortgagelender { 5 } end end end diff --git a/spec/models/form/sales/pages/mortgage_lender_other_spec.rb b/spec/models/form/sales/pages/mortgage_lender_other_spec.rb new file mode 100644 index 000000000..32ad5bb6b --- /dev/null +++ b/spec/models/form/sales/pages/mortgage_lender_other_spec.rb @@ -0,0 +1,35 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Pages::MortgageLenderOther, type: :model do + subject(:page) { described_class.new(page_id, page_definition, subsection) } + + let(:page_id) { "mortgage_lender_other" } + 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[mortgagelenderother]) + end + + it "has the correct id" do + expect(page.id).to eq("mortgage_lender_other") + 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([{ + "mortgagelender" => 40, + }]) + end +end diff --git a/spec/models/form/sales/pages/mortgage_lender_spec.rb b/spec/models/form/sales/pages/mortgage_lender_spec.rb new file mode 100644 index 000000000..430e7ea1c --- /dev/null +++ b/spec/models/form/sales/pages/mortgage_lender_spec.rb @@ -0,0 +1,33 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Pages::MortgageLender, type: :model do + subject(:page) { described_class.new(page_id, page_definition, subsection) } + + let(:page_id) { "mortgage_lender" } + 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[mortgagelender]) + end + + it "has the correct id" do + expect(page.id).to eq("mortgage_lender") + 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 diff --git a/spec/models/form/sales/questions/mortgage_lender_other_spec.rb b/spec/models/form/sales/questions/mortgage_lender_other_spec.rb new file mode 100644 index 000000000..e5a8a3869 --- /dev/null +++ b/spec/models/form/sales/questions/mortgage_lender_other_spec.rb @@ -0,0 +1,37 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Questions::MortgageLenderOther, 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("mortgagelenderother") + end + + it "has the correct header" do + expect(question.header).to eq("What is the other mortgage lender?") + end + + it "has the correct check_answer_label" do + expect(question.check_answer_label).to eq("Other Mortgage Lender") + 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 + + it "has the correct hint" do + expect(question.hint_text).to be_nil + end +end diff --git a/spec/models/form/sales/questions/mortgage_lender_spec.rb b/spec/models/form/sales/questions/mortgage_lender_spec.rb new file mode 100644 index 000000000..659cf7070 --- /dev/null +++ b/spec/models/form/sales/questions/mortgage_lender_spec.rb @@ -0,0 +1,88 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Questions::MortgageLender, 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("mortgagelender") + end + + it "has the correct header" do + expect(question.header).to eq("What is the name of the mortgage lender?") + end + + it "has the correct check_answer_label" do + expect(question.check_answer_label).to eq("Mortgage Lender") + end + + it "has the correct type" do + expect(question.type).to eq("select") + end + + it "is not marked as derived" do + expect(question.derived?).to be false + end + + it "is has correct guidance_position" do + expect(question.top_guidance?).to be false + expect(question.bottom_guidance?).to be true + end + + it "is has correct guidance_partial" do + expect(question.guidance_partial).to eq("mortgage_lender") + end + + it "has the correct answer_options" do + expect(question.answer_options).to eq({ + "" => "Select an option", + "1" => "Atom Bank", + "2" => "Barclays Bank PLC", + "3" => "Bath Building Society", + "4" => "Buckinghamshire Building Society", + "5" => "Cambridge Building Society", + "6" => "Coventry Building Society", + "7" => "Cumberland Building Society", + "8" => "Darlington Building Society", + "9" => "Dudley Building Society", + "10" => "Ecology Building Society", + "11" => "Halifax", + "12" => "Hanley Economic Building Society", + "13" => "Hinckley and Rugby Building Society", + "14" => "Holmesdale Building Society", + "15" => "Ipswich Building Society", + "16" => "Leeds Building Society", + "17" => "Lloyds Bank", + "18" => "Mansfield Building Society", + "19" => "Market Harborough Building Society", + "20" => "Melton Mowbray Building Society", + "21" => "Nationwide Building Society", + "22" => "Natwest", + "23" => "Nedbank Private Wealth", + "24" => "Newbury Building Society", + "25" => "OneSavings Bank", + "26" => "Parity Trust", + "27" => "Penrith Building Society", + "28" => "Pepper Homeloans", + "29" => "Royal Bank of Scotland", + "30" => "Santander", + "31" => "Skipton Building Society", + "32" => "Teachers Building Society", + "33" => "The Co-operative Bank", + "34" => "Tipton & Coseley Building Society", + "35" => "TSB", + "36" => "Ulster Bank", + "37" => "Virgin Money", + "38" => "West Bromwich Building Society", + "39" => "Yorkshire Building Society", + "40" => "Other", + }) + 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 a19617d82..221c8e4f3 100644 --- a/spec/models/form/sales/subsections/discounted_ownership_scheme_spec.rb +++ b/spec/models/form/sales/subsections/discounted_ownership_scheme_spec.rb @@ -19,6 +19,8 @@ RSpec.describe Form::Sales::Subsections::DiscountedOwnershipScheme, type: :model about_price_not_rtb mortgage_used_discounted_ownership mortgage_amount_discounted_ownership + mortgage_lender_discounted_ownership + mortgage_lender_other_discounted_ownership mortgage_length_discounted_ownership about_deposit_discounted_ownership discounted_ownership_deposit_value_check diff --git a/spec/models/form/sales/subsections/outright_sale_spec.rb b/spec/models/form/sales/subsections/outright_sale_spec.rb index 8dfc45d7d..b1617a85b 100644 --- a/spec/models/form/sales/subsections/outright_sale_spec.rb +++ b/spec/models/form/sales/subsections/outright_sale_spec.rb @@ -17,6 +17,8 @@ RSpec.describe Form::Sales::Subsections::OutrightSale, type: :model do purchase_price mortgage_used_outright_sale mortgage_amount_outright_sale + mortgage_lender_outright_sale + mortgage_lender_other_outright_sale mortgage_length_outright_sale about_deposit_outright_sale outright_sale_deposit_value_check 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 315afb64d..7ee4e4f79 100644 --- a/spec/models/form/sales/subsections/shared_ownership_scheme_spec.rb +++ b/spec/models/form/sales/subsections/shared_ownership_scheme_spec.rb @@ -28,6 +28,8 @@ RSpec.describe Form::Sales::Subsections::SharedOwnershipScheme, type: :model do about_price_shared_ownership mortgage_used_shared_ownership mortgage_amount_shared_ownership + mortgage_lender_shared_ownership + mortgage_lender_other_shared_ownership mortgage_length_shared_ownership about_deposit_with_discount about_deposit_shared_ownership diff --git a/spec/models/form_handler_spec.rb b/spec/models/form_handler_spec.rb index 4365eedcb..404a464cc 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(138) + expect(form.pages.count).to eq(144) 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(138) + expect(form.pages.count).to eq(144) expect(form.name).to eq("2021_2022_sales") end end