Browse Source

Merge branch 'main' into CLDC-1583-extrabor-compound-validation

pull/1201/head
natdeanlewissoftwire 3 years ago
parent
commit
c7f91f43b2
  1. 7
      app/frontend/styles/_document-list.scss
  2. 6
      app/models/form/sales/pages/handover_date.rb
  3. 1
      app/models/form/sales/questions/deposit_amount.rb
  4. 1
      app/models/form/sales/questions/mortgage_amount.rb
  5. 4
      app/models/sales_log.rb
  6. 9
      app/models/validations/sales/sale_information_validations.rb
  7. 18
      app/views/layouts/_collection_resources.html.erb
  8. 8
      db/seeds.rb
  9. 4
      spec/models/form/sales/pages/handover_date_spec.rb
  10. 4
      spec/models/form/sales/questions/deposit_amount_spec.rb
  11. 2
      spec/models/form/sales/questions/mortgage_amount_spec.rb
  12. 16
      spec/models/validations/sales/household_validations_spec.rb
  13. 49
      spec/models/validations/sales/sale_information_validations_spec.rb
  14. 2
      spec/requests/form_controller_spec.rb

7
app/frontend/styles/_document-list.scss

@ -1,5 +1,10 @@
.app-document-list {
margin-top: govuk-spacing(3);
margin-bottom: govuk-spacing(6);
}
.app-document-list__item {
margin-bottom: govuk-spacing(4);
margin-bottom: govuk-spacing(3);
&:last-child {
margin-bottom: 0;

6
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

1
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

1
app/models/form/sales/questions/mortgage_amount.rb

@ -8,5 +8,6 @@ class Form::Sales::Questions::MortgageAmount < ::Form::Question
@min = 0
@width = 5
@prefix = "£"
@hint_text = "Enter the amount of mortgage agreed with the mortgage lender. Exclude any deposits or cash payments. Numeric in pounds. Rounded to the nearest pound."
end
end

4
app/models/sales_log.rb

@ -1,7 +1,9 @@
class SalesLogValidator < ActiveModel::Validator
include Validations::Sales::HouseholdValidations
include Validations::SharedValidations
include Validations::Sales::FinancialValidations
include Validations::Sales::SaleInformationValidations
include Validations::SharedValidations
include Validations::LocalAuthorityValidations
def validate(record)

9
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

18
app/views/layouts/_collection_resources.html.erb

@ -1,16 +1,22 @@
<div class="app-card">
<h2 class="govuk-heading-s">Collection resources</h2>
<p class="govuk-body-l govuk-!-margin-bottom-3">Collection resources</p>
<p class="govuk-body govuk-!-margin-bottom-6">For lettings starting during 1 April 2023 - 31 March 2024 and sales completing during the same period, use the 23/24 forms.</p>
<h2 class="govuk-body-l govuk-!-margin-bottom-3">Lettings 23/24</h2>
<%= render DocumentListComponent.new(items: [
{
name: "Lettings log for tenants (2023/24)",
href: "https://core.communities.gov.uk/public/download/guides-and-manuals/2023-24%20Lettings%20paper%20form.pdf?download-format=pdf",
metadata: "PDF, 281 KB, 8 pages",
},
]) %>
<h2 class="govuk-body-l govuk-!-margin-bottom-3">Lettings 22/23</h2>
<%= render DocumentListComponent.new(items: [
{
name: "Lettings log for tenants (2022/23)",
href: "https://core.communities.gov.uk/public/download/guides-and-manuals/2022-23%20Lettings%20paper%20form.pdf?download-format=pdf",
metadata: "PDF, 654 KB, 4 pages",
},
{
name: "Lettings log for tenants (2021/22)",
href: "https://core.communities.gov.uk/public/download/guides-and-manuals/2021_22%20Lettings%20Log.pdf?download-format=pdf",
metadata: "PDF, 302 KB, 3 pages",
},
]) %>
</div>

8
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|

4
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

4
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

2
spec/models/form/sales/questions/mortgage_amount_spec.rb

@ -32,7 +32,7 @@ RSpec.describe Form::Sales::Questions::MortgageAmount, type: :model do
end
it "has the correct hint" do
expect(question.hint_text).to be_nil
expect(question.hint_text).to eq("Enter the amount of mortgage agreed with the mortgage lender. Exclude any deposits or cash payments. Numeric in pounds. Rounded to the nearest pound.")
end
it "has correct width" do

16
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

49
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

2
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 })

Loading…
Cancel
Save