From ecdc4d99c5d6d730e5484a335272c38fb4265f60 Mon Sep 17 00:00:00 2001 From: natdeanlewissoftwire <94526761+natdeanlewissoftwire@users.noreply.github.com> Date: Wed, 18 Jan 2023 11:20:07 +0000 Subject: [PATCH 1/7] CLDC-1726 Update scheme and location display pages (#1190) * feat: update scheme and log displays * test: update tests * test: update tests --- app/helpers/tab_nav_helper.rb | 4 ++-- app/views/locations/index.html.erb | 4 ++++ spec/features/schemes_spec.rb | 10 ++++++---- spec/helpers/tab_nav_helper_spec.rb | 4 ++-- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/app/helpers/tab_nav_helper.rb b/app/helpers/tab_nav_helper.rb index 3c61c9de0..801560b91 100644 --- a/app/helpers/tab_nav_helper.rb +++ b/app/helpers/tab_nav_helper.rb @@ -8,13 +8,13 @@ module TabNavHelper def location_cell_postcode(location, link) link_text = location.postcode || "Add postcode" - [govuk_link_to(link_text, link, method: :patch), "Location #{location.name}"].join("\n") + [govuk_link_to(link_text, link, method: :patch), "Location"].join("\n") end def scheme_cell(scheme) link_text = scheme.service_name link = scheme.confirmed? ? scheme : scheme_check_answers_path(scheme) - [govuk_link_to(link_text, link), "Scheme #{scheme.primary_client_group}"].join("\n") + [govuk_link_to(link_text, link), "Scheme"].join("\n") end def org_cell(user) diff --git a/app/views/locations/index.html.erb b/app/views/locations/index.html.erb index 5040120d0..469768b11 100644 --- a/app/views/locations/index.html.erb +++ b/app/views/locations/index.html.erb @@ -39,6 +39,9 @@ <% row.cell(header: true, text: "Postcode", html_attributes: { scope: "col", }) %> + <% row.cell(header: true, text: "Name", html_attributes: { + scope: "col", + }) %> <% row.cell(header: true, text: "Location code", html_attributes: { scope: "col", }) %> @@ -55,6 +58,7 @@ else location.postcode.present? ? scheme_location_check_answers_path(@scheme, location, route: "locations") : scheme_location_postcode_path(@scheme, location) end), { class: "govuk-!-font-weight-bold" }, wrapper_tag: "div")) %> + <% row.cell(text: location.name) %> <% row.cell(text: location.id) %> <% row.cell(text: status_tag(location.status)) %> <% end %> diff --git a/spec/features/schemes_spec.rb b/spec/features/schemes_spec.rb index c51a5eea5..fefa3ea56 100644 --- a/spec/features/schemes_spec.rb +++ b/spec/features/schemes_spec.rb @@ -101,9 +101,9 @@ RSpec.describe "Schemes scheme Features" do it "shows a list of schemes" do schemes.each do |scheme| - expect(page).to have_content(scheme.id) expect(page).to have_link(scheme.service_name) - expect(page).to have_content(scheme.primary_client_group) + expect(page).to have_content(scheme.id_to_display) + expect(page).to have_content(scheme.locations&.count) end end @@ -175,7 +175,8 @@ RSpec.describe "Schemes scheme Features" do click_on("Back") schemes.each do |scheme| expect(page).to have_link(scheme.service_name) - expect(page).to have_content(scheme.primary_client_group) + expect(page).to have_content(scheme.id_to_display) + expect(page).to have_content(scheme.locations&.count) end end end @@ -671,7 +672,8 @@ RSpec.describe "Schemes scheme Features" do it "shows list of links to schemes" do schemes.each do |scheme| expect(page).to have_link(scheme.service_name) - expect(page).to have_content(scheme.primary_client_group) + expect(page).to have_content(scheme.id_to_display) + expect(page).to have_content(scheme.locations&.count) end end diff --git a/spec/helpers/tab_nav_helper_spec.rb b/spec/helpers/tab_nav_helper_spec.rb index b73200c4a..b2273aa11 100644 --- a/spec/helpers/tab_nav_helper_spec.rb +++ b/spec/helpers/tab_nav_helper_spec.rb @@ -23,14 +23,14 @@ RSpec.describe TabNavHelper do describe "#location_cell" do it "returns the location link to the postcode with optional name" do link = "/schemes/#{location.scheme.id}/locations/#{location.id}/edit" - expected_html = "#{location.postcode}\nLocation #{location.name}" + expected_html = "#{location.postcode}\nLocation" expect(location_cell_postcode(location, link)).to match(expected_html) end end describe "#scheme_cell" do it "returns the scheme link service name and primary user group separated by a newline character" do - expected_html = "#{scheme.service_name}\nScheme #{scheme.primary_client_group}" + expected_html = "#{scheme.service_name}\nScheme" expect(scheme_cell(scheme)).to match(expected_html) end end From 0099f7f46f51ce6f27e30bd55e78ca00cb96689c Mon Sep 17 00:00:00 2001 From: natdeanlewissoftwire <94526761+natdeanlewissoftwire@users.noreply.github.com> Date: Wed, 18 Jan 2023 12:11:28 +0000 Subject: [PATCH 2/7] feat: remove association (#1196) --- app/models/organisation.rb | 1 - 1 file changed, 1 deletion(-) 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" From c07dde67945f96ec99f888f1bd97be6da5221c98 Mon Sep 17 00:00:00 2001 From: SamSeed-Softwire <63662292+SamSeed-Softwire@users.noreply.github.com> Date: Wed, 18 Jan 2023 14:01:01 +0000 Subject: [PATCH 3/7] fix: correct no-stock user names + update emails to prevent duplicates (#1185) --- db/seeds.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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| From 826eaf22f11d718aca5df9dad659651099d27f26 Mon Sep 17 00:00:00 2001 From: Jack <113976590+bibblobcode@users.noreply.github.com> Date: Thu, 19 Jan 2023 09:24:09 +0000 Subject: [PATCH 4/7] CLDC-1746 Show Handover question also on not on resale (#1183) --- app/models/form/sales/pages/handover_date.rb | 6 +++--- spec/models/form/sales/pages/handover_date_spec.rb | 4 +--- 2 files changed, 4 insertions(+), 6 deletions(-) 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/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 From 45710ed66164d69793fe0dfef34586973de2e179 Mon Sep 17 00:00:00 2001 From: Jack <113976590+bibblobcode@users.noreply.github.com> Date: Thu, 19 Jan 2023 09:24:45 +0000 Subject: [PATCH 5/7] CLDC 911 add hard validation to cash deposit (#1186) * Tidy up test file * Add hard validation to cash deposit * Load validations --- .../form/sales/questions/deposit_amount.rb | 1 + app/models/sales_log.rb | 4 +- .../sales/sale_information_validations.rb | 9 ++++ .../sales/questions/deposit_amount_spec.rb | 4 ++ .../sales/household_validations_spec.rb | 16 +++--- .../sale_information_validations_spec.rb | 49 +++++++++++++++++++ spec/requests/form_controller_spec.rb | 2 +- 7 files changed, 75 insertions(+), 10 deletions(-) create mode 100644 app/models/validations/sales/sale_information_validations.rb create mode 100644 spec/models/validations/sales/sale_information_validations_spec.rb 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/sales_log.rb b/app/models/sales_log.rb index df76ffcbf..0f660ceb0 100644 --- a/app/models/sales_log.rb +++ b/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) 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/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 }) From 47ddf87282660de598727de85192fdd3997319fd Mon Sep 17 00:00:00 2001 From: natdeanlewissoftwire <94526761+natdeanlewissoftwire@users.noreply.github.com> Date: Fri, 20 Jan 2023 08:32:42 +0000 Subject: [PATCH 6/7] CLDC-1858 Add new collection resources design (#1204) * feat: update collection resources with new lettings log link and design * refactor: linting * feat: update size (previously was using in browser size not post-download) --- app/frontend/styles/_document-list.scss | 7 ++++++- .../layouts/_collection_resources.html.erb | 18 ++++++++++++------ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/app/frontend/styles/_document-list.scss b/app/frontend/styles/_document-list.scss index d3f632b27..47936a365 100644 --- a/app/frontend/styles/_document-list.scss +++ b/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; diff --git a/app/views/layouts/_collection_resources.html.erb b/app/views/layouts/_collection_resources.html.erb index 4be268e7a..726cd1a86 100644 --- a/app/views/layouts/_collection_resources.html.erb +++ b/app/views/layouts/_collection_resources.html.erb @@ -1,16 +1,22 @@
Collection resources
+For lettings starting during 1 April 2023 - 31 March 2024 and sales completing during the same period, use the 23/24 forms.
+