diff --git a/app/models/form/sales/pages/handover_date.rb b/app/models/form/sales/pages/handover_date.rb index eeeb48333..35fbe7822 100644 --- a/app/models/form/sales/pages/handover_date.rb +++ b/app/models/form/sales/pages/handover_date.rb @@ -2,9 +2,9 @@ class Form::Sales::Pages::HandoverDate < ::Form::Page def initialize(id, hsh, subsection) super @id = "handover_date" - @depends_on = [{ - "ownershipsch" => 1, - }] + @depends_on = [ + { "ownershipsch" => 1, "resale" => 2 }, + ] end def questions diff --git a/app/models/form/sales/questions/deposit_amount.rb b/app/models/form/sales/questions/deposit_amount.rb index 094f47697..05403dbab 100644 --- a/app/models/form/sales/questions/deposit_amount.rb +++ b/app/models/form/sales/questions/deposit_amount.rb @@ -7,6 +7,7 @@ class Form::Sales::Questions::DepositAmount < ::Form::Question @type = "numeric" @min = 0 @width = 5 + @max = 9_999_999 @prefix = "£" @hint_text = "Enter the total cash sum paid by the buyer towards the property that was not funded by the mortgage" @derived = true diff --git a/app/models/organisation.rb b/app/models/organisation.rb index fa675b36c..8e68500a4 100644 --- a/app/models/organisation.rb +++ b/app/models/organisation.rb @@ -7,7 +7,6 @@ class Organisation < ApplicationRecord has_many :data_protection_confirmations has_many :organisation_rent_periods has_many :owned_schemes, class_name: "Scheme", foreign_key: "owning_organisation_id", dependent: :delete_all - has_many :managed_schemes, class_name: "Scheme", foreign_key: "managing_organisation_id" has_many :parent_organisation_relationships, foreign_key: :child_organisation_id, class_name: "OrganisationRelationship" has_many :parent_organisations, through: :parent_organisation_relationships has_many :child_organisation_relationships, foreign_key: :parent_organisation_id, class_name: "OrganisationRelationship" diff --git a/app/models/sales_log.rb b/app/models/sales_log.rb index aa2d8dbcc..d166974ba 100644 --- a/app/models/sales_log.rb +++ b/app/models/sales_log.rb @@ -3,6 +3,9 @@ class SalesLogValidator < ActiveModel::Validator include Validations::Sales::PropertyValidations include Validations::SharedValidations include Validations::Sales::FinancialValidations + include Validations::Sales::SaleInformationValidations + + include Validations::SharedValidations include Validations::LocalAuthorityValidations def validate(record) diff --git a/app/models/validations/sales/sale_information_validations.rb b/app/models/validations/sales/sale_information_validations.rb new file mode 100644 index 000000000..4c8747f18 --- /dev/null +++ b/app/models/validations/sales/sale_information_validations.rb @@ -0,0 +1,9 @@ +module Validations::Sales::SaleInformationValidations + def validate_deposit_range(record) + return if record.deposit.blank? + + unless record.deposit >= 0 && record.deposit <= 999_999 + record.errors.add :deposit, "Cash deposit must be £0 - £999,999" + end + end +end diff --git a/db/seeds.rb b/db/seeds.rb index cf6895501..8dea68d80 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -110,8 +110,8 @@ unless Rails.env.test? ) User.find_or_create_by!( - name: "Provider Owns Stock", - email: "provider.nostock1@example.com", + name: "Provider No Stock", + email: "provider.nostock@example.com", organisation: standalone_no_stock, role: "data_provider", ) do |user| @@ -120,8 +120,8 @@ unless Rails.env.test? end User.find_or_create_by!( - name: "Coordinator Owns Stock", - email: "coordinator.nostock1@example.com", + name: "Coordinator No Stock", + email: "coordinator.nostock@example.com", organisation: standalone_no_stock, role: "data_coordinator", ) do |user| diff --git a/spec/models/form/sales/pages/handover_date_spec.rb b/spec/models/form/sales/pages/handover_date_spec.rb index fa2156cf7..1699dbf9e 100644 --- a/spec/models/form/sales/pages/handover_date_spec.rb +++ b/spec/models/form/sales/pages/handover_date_spec.rb @@ -28,8 +28,6 @@ RSpec.describe Form::Sales::Pages::HandoverDate, type: :model do end it "has the correct depends_on" do - expect(page.depends_on).to eq([{ - "ownershipsch" => 1, - }]) + expect(page.depends_on).to eq([{ "ownershipsch" => 1, "resale" => 2 }]) end end diff --git a/spec/models/form/sales/questions/deposit_amount_spec.rb b/spec/models/form/sales/questions/deposit_amount_spec.rb index db47387d3..961576d62 100644 --- a/spec/models/form/sales/questions/deposit_amount_spec.rb +++ b/spec/models/form/sales/questions/deposit_amount_spec.rb @@ -46,4 +46,8 @@ RSpec.describe Form::Sales::Questions::DepositAmount, type: :model do it "has correct min" do expect(question.min).to eq(0) end + + it "has correct max" do + expect(question.max).to eq(9_999_999) + end end diff --git a/spec/models/validations/sales/household_validations_spec.rb b/spec/models/validations/sales/household_validations_spec.rb index ea581c096..b7ea4f663 100644 --- a/spec/models/validations/sales/household_validations_spec.rb +++ b/spec/models/validations/sales/household_validations_spec.rb @@ -7,42 +7,42 @@ RSpec.describe Validations::Sales::HouseholdValidations do describe "#validate_number_of_other_people_living_in_the_property" do context "when within permitted bounds" do - let(:record) { FactoryBot.build(:sales_log, hholdcount: 2) } + let(:record) { build(:sales_log, hholdcount: 2) } it "does not add an error" do household_validator.validate_number_of_other_people_living_in_the_property(record) - expect(record.errors).not_to be_present + expect(record.errors[:hholdcount]).not_to be_present end end context "when blank" do - let(:record) { FactoryBot.build(:sales_log, hholdcount: nil) } + let(:record) { build(:sales_log, hholdcount: nil) } it "does not add an error" do household_validator.validate_number_of_other_people_living_in_the_property(record) - expect(record.errors).not_to be_present + expect(record.errors[:hholdcount]).not_to be_present end end context "when below lower bound" do - let(:record) { FactoryBot.build(:sales_log, hholdcount: -1) } + let(:record) { build(:sales_log, hholdcount: -1) } it "adds an error" do household_validator.validate_number_of_other_people_living_in_the_property(record) - expect(record.errors).to be_present + expect(record.errors[:hholdcount]).to be_present end end context "when higher than upper bound" do - let(:record) { FactoryBot.build(:sales_log, hholdcount: 5) } + let(:record) { build(:sales_log, hholdcount: 5) } it "adds an error" do household_validator.validate_number_of_other_people_living_in_the_property(record) - expect(record.errors).to be_present + expect(record.errors[:hholdcount]).to be_present end end end diff --git a/spec/models/validations/sales/sale_information_validations_spec.rb b/spec/models/validations/sales/sale_information_validations_spec.rb new file mode 100644 index 000000000..575eedfff --- /dev/null +++ b/spec/models/validations/sales/sale_information_validations_spec.rb @@ -0,0 +1,49 @@ +require "rails_helper" + +RSpec.describe Validations::Sales::SaleInformationValidations do + subject(:sale_information_validator) { validator_class.new } + + let(:validator_class) { Class.new { include Validations::Sales::SaleInformationValidations } } + + describe "#validate_deposit_range" do + context "when within permitted bounds" do + let(:record) { build(:sales_log, deposit: 0) } + + it "does not add an error" do + sale_information_validator.validate_deposit_range(record) + + expect(record.errors[:deposit]).not_to be_present + end + end + + context "when blank" do + let(:record) { build(:sales_log, deposit: nil) } + + it "does not add an error" do + sale_information_validator.validate_deposit_range(record) + + expect(record.errors[:deposit]).not_to be_present + end + end + + context "when below lower bound" do + let(:record) { build(:sales_log, deposit: -1) } + + it "adds an error" do + sale_information_validator.validate_deposit_range(record) + + expect(record.errors[:deposit]).to be_present + end + end + + context "when higher than upper bound" do + let(:record) { build(:sales_log, deposit: 1_000_000) } + + it "adds an error" do + sale_information_validator.validate_deposit_range(record) + + expect(record.errors[:deposit]).to be_present + end + end + end +end diff --git a/spec/requests/form_controller_spec.rb b/spec/requests/form_controller_spec.rb index 04a740dc1..dcf67cb71 100644 --- a/spec/requests/form_controller_spec.rb +++ b/spec/requests/form_controller_spec.rb @@ -658,7 +658,7 @@ RSpec.describe FormController, type: :request do let(:referrer) { "/lettings-logs/#{completed_lettings_log.id}/net-income-value-check?referrer=check_answers" } before do - completed_lettings_log.update!(ecstat1: 1, earnings: 130, hhmemb: 1) # we're not routing to that page, so it gets cleared?§ + completed_lettings_log.update!(ecstat1: 1, earnings: 130, hhmemb: 1) # we're not routing to that page, so it gets cleared? allow(completed_lettings_log).to receive(:net_income_soft_validation_triggered?).and_return(true) allow(completed_lettings_log.form).to receive(:end_date).and_return(Time.zone.today + 1.day) post "/lettings-logs/#{completed_lettings_log.id}/form", params: interrupt_params, headers: headers.merge({ "HTTP_REFERER" => referrer })