From 608633add270544f0d2bd717fda51a686da5192c Mon Sep 17 00:00:00 2001 From: Manny Dinssa <44172848+Dinssa@users.noreply.github.com> Date: Mon, 17 Feb 2025 18:12:37 +0000 Subject: [PATCH] Add manual address entry selected variable --- app/controllers/address_search_controller.rb | 4 +- .../lettings_log_variables.rb | 16 +- .../derived_variables/sales_log_variables.rb | 19 +-- .../form/lettings/pages/address_fallback.rb | 2 +- .../form/lettings/pages/address_search.rb | 2 +- .../form/sales/pages/address_fallback.rb | 2 +- app/models/form/sales/pages/address_search.rb | 2 +- app/models/log.rb | 7 +- ...927_rename_address_search_input_in_logs.rb | 9 + db/schema.rb | 6 +- .../form/lettings/questions/uprn_spec.rb | 8 +- spec/request_helper.rb | 2 +- spec/requests/address_options_spec.rb | 7 - .../address_search_controller_spec.rb | 154 ++++++++++++++++++ 14 files changed, 192 insertions(+), 48 deletions(-) create mode 100644 db/migrate/20250217145927_rename_address_search_input_in_logs.rb delete mode 100644 spec/requests/address_options_spec.rb create mode 100644 spec/requests/address_search_controller_spec.rb diff --git a/app/controllers/address_search_controller.rb b/app/controllers/address_search_controller.rb index eac8831fe..b9b6cdcbf 100644 --- a/app/controllers/address_search_controller.rb +++ b/app/controllers/address_search_controller.rb @@ -53,13 +53,13 @@ class AddressSearchController < ApplicationController def manual_input log = params[:log_type] == "lettings_log" ? current_user.lettings_logs.find(params[:log_id]) : current_user.sales_logs.find(params[:log_id]) - log.update!(address_search_input: false) + log.update!(manual_address_entry_selected: true) redirect_to manual_address_link(log) end def search_input log = params[:log_type] == "lettings_log" ? current_user.lettings_logs.find(params[:log_id]) : current_user.sales_logs.find(params[:log_id]) - log.update!(address_search_input: true) + log.update!(manual_address_entry_selected: false) redirect_to search_address_link(log) end diff --git a/app/models/derived_variables/lettings_log_variables.rb b/app/models/derived_variables/lettings_log_variables.rb index 1c3487536..ba18a9991 100644 --- a/app/models/derived_variables/lettings_log_variables.rb +++ b/app/models/derived_variables/lettings_log_variables.rb @@ -95,8 +95,6 @@ module DerivedVariables::LettingsLogVariables self.postcode_known = nil self.postcode_full = nil self.la = nil - self.address_line1_input = nil - self.postcode_full_input = nil end end @@ -114,15 +112,13 @@ module DerivedVariables::LettingsLogVariables self.previous_la_known = nil if is_renewal? end - if address_search_input - self.uprn = address_search - self.uprn_known = 1 - self.uprn_confirmed = 1 - else - self.uprn = nil + if manual_address_entry_selected self.uprn_known = 0 - self.uprn_confirmed = 0 - reset_address_fields! if address_search_input_was == true + self.uprn_selection = nil + else + self.uprn = address_search + self.uprn_confirmed = 1 if uprn.present? + reset_address_fields! if uprn.blank? end if is_renewal? diff --git a/app/models/derived_variables/sales_log_variables.rb b/app/models/derived_variables/sales_log_variables.rb index c410b30db..cfcb44d82 100644 --- a/app/models/derived_variables/sales_log_variables.rb +++ b/app/models/derived_variables/sales_log_variables.rb @@ -60,19 +60,16 @@ module DerivedVariables::SalesLogVariables if uprn_known == 1 && uprn_confirmed&.zero? reset_address_fields! + self.uprn_known = 0 end - self.address_search_input = true if address_search_input.nil? - - if address_search_input - self.uprn = address_search - self.uprn_known = 1 - self.uprn_confirmed = 1 - else - self.uprn = nil + if manual_address_entry_selected self.uprn_known = 0 - self.uprn_confirmed = 0 - reset_address_fields! if address_search_input_was == true + self.uprn_selection = nil + else + self.uprn = address_search + self.uprn_confirmed = 1 if uprn + reset_address_fields! if uprn.blank? end if form.start_year_2025_or_later? && is_bedsit? @@ -240,7 +237,6 @@ private def reset_address_fields! self.uprn = nil self.uprn_known = nil - self.uprn_confirmed = nil self.address_line1 = nil self.address_line2 = nil self.town_or_city = nil @@ -252,5 +248,6 @@ private self.postcode_full_input = nil self.postcode_full = nil self.is_la_inferred = nil + self.la = nil end end diff --git a/app/models/form/lettings/pages/address_fallback.rb b/app/models/form/lettings/pages/address_fallback.rb index 13f680dfd..b28a98d82 100644 --- a/app/models/form/lettings/pages/address_fallback.rb +++ b/app/models/form/lettings/pages/address_fallback.rb @@ -3,7 +3,7 @@ class Form::Lettings::Pages::AddressFallback < ::Form::Page super @id = "address" @copy_key = "lettings.property_information.address" - @depends_on = [{ "is_supported_housing?" => false, "address_search_input" => false }] + @depends_on = [{ "is_supported_housing?" => false, "manual_address_entry_selected" => true }] @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] end diff --git a/app/models/form/lettings/pages/address_search.rb b/app/models/form/lettings/pages/address_search.rb index 018795dfc..9caf89a99 100644 --- a/app/models/form/lettings/pages/address_search.rb +++ b/app/models/form/lettings/pages/address_search.rb @@ -2,7 +2,7 @@ class Form::Lettings::Pages::AddressSearch < ::Form::Page def initialize(id, hsh, subsection) super @id = "address_search" - @depends_on = [{ "is_supported_housing?" => false, "address_search_input" => true }] + @depends_on = [{ "is_supported_housing?" => false, "manual_address_entry_selected" => false }] @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] end diff --git a/app/models/form/sales/pages/address_fallback.rb b/app/models/form/sales/pages/address_fallback.rb index 9542f5007..8db2f56ff 100644 --- a/app/models/form/sales/pages/address_fallback.rb +++ b/app/models/form/sales/pages/address_fallback.rb @@ -3,7 +3,7 @@ class Form::Sales::Pages::AddressFallback < ::Form::Page super @id = "address" @copy_key = "sales.property_information.address" - @depends_on = [{ "address_search_input" => false }] + @depends_on = [{ "manual_address_entry_selected" => true }] @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] end diff --git a/app/models/form/sales/pages/address_search.rb b/app/models/form/sales/pages/address_search.rb index acf74ae9e..1745e4f63 100644 --- a/app/models/form/sales/pages/address_search.rb +++ b/app/models/form/sales/pages/address_search.rb @@ -2,7 +2,7 @@ class Form::Sales::Pages::AddressSearch < ::Form::Page def initialize(id, hsh, subsection) super @id = "address_search" - @depends_on = [{ "address_search_input" => true }] + @depends_on = [{ "manual_address_entry_selected" => false }] @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] end diff --git a/app/models/log.rb b/app/models/log.rb index c02514d1a..d7868f8f6 100644 --- a/app/models/log.rb +++ b/app/models/log.rb @@ -9,7 +9,6 @@ class Log < ApplicationRecord belongs_to :updated_by, class_name: "User", optional: true belongs_to :bulk_upload, optional: true - before_create :set_default_address_search_input before_save :update_status! STATUS = { @@ -76,7 +75,7 @@ class Log < ApplicationRecord presenter = UprnDataPresenter.new(service.result) self.uprn_known = 1 - self.uprn_confirmed = nil unless skip_update_uprn_confirmed + # self.uprn_confirmed = nil unless skip_update_uprn_confirmed TODO: REMOVE self.uprn_selection = nil self.address_line1 = presenter.address_line1 self.address_line2 = presenter.address_line2 @@ -406,8 +405,4 @@ private self[is_inferred_key] = false self[postcode_key] = nil end - - def set_default_address_search_input - self.address_search_input = true if address_search_input.nil? - end end diff --git a/db/migrate/20250217145927_rename_address_search_input_in_logs.rb b/db/migrate/20250217145927_rename_address_search_input_in_logs.rb new file mode 100644 index 000000000..7140d2db1 --- /dev/null +++ b/db/migrate/20250217145927_rename_address_search_input_in_logs.rb @@ -0,0 +1,9 @@ +class RenameAddressSearchInputInLogs < ActiveRecord::Migration[7.2] + def change + rename_column :sales_logs, :address_search_input, :manual_address_entry_selected + rename_column :lettings_logs, :address_search_input, :manual_address_entry_selected + + change_column :sales_logs, :manual_address_entry_selected, :boolean, :default => false + change_column :lettings_logs, :manual_address_entry_selected, :boolean, :default => false + end +end diff --git a/db/schema.rb b/db/schema.rb index 44baaf582..31df8e783 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.2].define(version: 2025_02_14_133727) do +ActiveRecord::Schema[7.2].define(version: 2025_02_17_145927) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -374,7 +374,7 @@ ActiveRecord::Schema[7.2].define(version: 2025_02_14_133727) do t.integer "multiple_partners_value_check" t.bigint "created_by_id" t.string "address_search" - t.boolean "address_search_input" + t.boolean "manual_address_entry_selected", default: false t.index ["assigned_to_id"], name: "index_lettings_logs_on_assigned_to_id" t.index ["bulk_upload_id"], name: "index_lettings_logs_on_bulk_upload_id" t.index ["created_by_id"], name: "index_lettings_logs_on_created_by_id" @@ -772,7 +772,7 @@ ActiveRecord::Schema[7.2].define(version: 2025_02_14_133727) do t.integer "has_management_fee" t.decimal "management_fee", precision: 10, scale: 2 t.string "address_search" - t.boolean "address_search_input" + t.boolean "manual_address_entry_selected", default: false t.index ["assigned_to_id"], name: "index_sales_logs_on_assigned_to_id" t.index ["bulk_upload_id"], name: "index_sales_logs_on_bulk_upload_id" t.index ["created_by_id"], name: "index_sales_logs_on_created_by_id" diff --git a/spec/models/form/lettings/questions/uprn_spec.rb b/spec/models/form/lettings/questions/uprn_spec.rb index 7e54264bc..e48662240 100644 --- a/spec/models/form/lettings/questions/uprn_spec.rb +++ b/spec/models/form/lettings/questions/uprn_spec.rb @@ -53,7 +53,7 @@ RSpec.describe Form::Lettings::Questions::Uprn, type: :model do uprn_known:, uprn:, address_search:, - address_search_input:, + manual_address_entry_selected:, ) end @@ -61,7 +61,7 @@ RSpec.describe Form::Lettings::Questions::Uprn, type: :model do let(:uprn_known) { nil } let(:uprn) { nil } let(:address_search) { nil } - let(:address_search_input) { false } + let(:manual_address_entry_selected) { true } it "returns formatted value" do expect(question.get_extra_check_answer_value(log)).to be_nil @@ -72,7 +72,7 @@ RSpec.describe Form::Lettings::Questions::Uprn, type: :model do let(:uprn_known) { 1 } let(:uprn) { 1 } let(:address_search) { 1 } - let(:address_search_input) { true } + let(:manual_address_entry_selected) { false } it "returns formatted value" do expect(question.get_extra_check_answer_value(log)).to eq( @@ -85,7 +85,7 @@ RSpec.describe Form::Lettings::Questions::Uprn, type: :model do let(:uprn_known) { 0 } let(:uprn) { nil } let(:address_search) { nil } - let(:address_search_input) { false } + let(:manual_address_entry_selected) { true } it "returns formatted value" do expect(question.get_extra_check_answer_value(log)).to be_nil diff --git a/spec/request_helper.rb b/spec/request_helper.rb index f1f208ec6..2e0cc3d70 100644 --- a/spec/request_helper.rb +++ b/spec/request_helper.rb @@ -20,7 +20,7 @@ module RequestHelper body = { results: [{ DPA: { UPRN: "10033558653" } }] }.to_json WebMock.stub_request(:get, "https://api.os.uk/search/places/v1/find?key&maxresults=10&minmatch=0.4&query=Address%20line%201,%20SW1A%201AA") .to_return(status: 200, body:, headers: {}) - body = { results: [{ DPA: { "POSTCODE": "SW1A 1AA", "POST_TOWN": "London" } }] }.to_json + body = { results: [{ DPA: { "POSTCODE": "SW1A 1AA", "POST_TOWN": "London", "PO_BOX_NUMBER": "The Mall, City Of Westminster" } }] }.to_json WebMock.stub_request(:get, "https://api.os.uk/search/places/v1/uprn?dataset=DPA,LPI&key&uprn=1") .to_return(status: 200, body:, headers: {}) WebMock.stub_request(:get, "https://api.os.uk/search/places/v1/uprn?dataset=DPA,LPI&key&uprn=10033558653") diff --git a/spec/requests/address_options_spec.rb b/spec/requests/address_options_spec.rb deleted file mode 100644 index 3f50ee2d9..000000000 --- a/spec/requests/address_options_spec.rb +++ /dev/null @@ -1,7 +0,0 @@ -require "rails_helper" - -RSpec.describe "AddressOptions", type: :request do - describe "GET /index" do - pending "add some examples (or delete) #{__FILE__}" - end -end diff --git a/spec/requests/address_search_controller_spec.rb b/spec/requests/address_search_controller_spec.rb new file mode 100644 index 000000000..faa8045aa --- /dev/null +++ b/spec/requests/address_search_controller_spec.rb @@ -0,0 +1,154 @@ +require "rails_helper" + +RSpec.describe AddressSearchController, type: :request do + let(:user) { create(:user) } + + before do + sign_in user + end + + describe "#manual input" do + context "when no address data is given and user chooses to enter address manually" do + let(:sales_log) { create(:sales_log, :shared_ownership_setup_complete, assigned_to: user) } + + it "correctly sets address fields" do + sales_log.reload + expect(sales_log.manual_address_entry_selected).to eq(false) + expect(sales_log.address_search).to eq(nil) + expect(sales_log.uprn_known).to eq(nil) + expect(sales_log.uprn).to eq(nil) + expect(sales_log.uprn_confirmed).to eq(nil) + expect(sales_log.uprn_selection).to eq(nil) + expect(sales_log.pcodenk).to eq(nil) + expect(sales_log.postcode_full).to eq(nil) + expect(sales_log.address_line1).to eq(nil) + expect(sales_log.address_line2).to eq(nil) + expect(sales_log.town_or_city).to eq(nil) + expect(sales_log.la).to eq(nil) + + get "/address-search/manual-input/sales_log/#{sales_log.id}" + + sales_log.reload + expect(sales_log.manual_address_entry_selected).to eq(true) + expect(sales_log.uprn_known).to eq(0) + expect(sales_log.uprn).to eq(nil) + expect(sales_log.uprn_confirmed).to eq(nil) + expect(sales_log.uprn_selection).to eq(nil) + expect(sales_log.pcodenk).to eq(nil) + expect(sales_log.postcode_full).to eq(nil) + expect(sales_log.address_line1).to eq(nil) + expect(sales_log.address_line2).to eq(nil) + expect(sales_log.town_or_city).to eq(nil) + expect(sales_log.la).to eq(nil) + end + end + + context "when choosing to manually input an address for a log that has an address searched value" do + let(:lettings_log) { create(:lettings_log, :completed, manual_address_entry_selected: false, assigned_to: user) } + + it "correctly sets address fields" do + lettings_log.reload + expect(lettings_log.address_search).to eq("10033558653") + expect(lettings_log.uprn_known).to eq(1) + expect(lettings_log.uprn).to eq("10033558653") + binding.pry + expect(lettings_log.uprn_confirmed).to eq(1) + expect(lettings_log.uprn_selection).to eq(nil) + expect(lettings_log.postcode_known).to eq(1) + expect(lettings_log.postcode_full).to eq("SW1A 1AA") + expect(lettings_log.address_line1).to eq("The Mall, City Of Westminster") + expect(lettings_log.address_line2).to eq(nil) + expect(lettings_log.town_or_city).to eq("London") + expect(lettings_log.la).to eq("E09000033") + + get "/address-search/manual-input/lettings_log/#{lettings_log.id}" + + lettings_log.reload + expect(lettings_log.manual_address_entry_selected).to eq(true) + expect(lettings_log.uprn_known).to eq(0) + expect(lettings_log.uprn).to eq(nil) + expect(lettings_log.uprn_confirmed).to eq(nil) + expect(lettings_log.uprn_selection).to eq(nil) + expect(lettings_log.postcode_known).to eq(nil) + expect(lettings_log.postcode_full).to eq(nil) + expect(lettings_log.address_line1).to eq(nil) + expect(lettings_log.address_line2).to eq(nil) + expect(lettings_log.town_or_city).to eq(nil) + expect(lettings_log.la).to eq(nil) + end + end + end + + describe "#search input" do + context "when no address is entered manually and choosing to search instead" do + let(:lettings_log) { create(:lettings_log, :setup_completed, manual_address_entry_selected: true, assigned_to: user) } + + it "correctly sets address fields" do + lettings_log.reload + expect(lettings_log.manual_address_entry_selected).to eq(true) + expect(lettings_log.uprn_known).to eq(0) + expect(lettings_log.uprn).to eq(nil) + expect(lettings_log.uprn_confirmed).to eq(nil) + expect(lettings_log.uprn_selection).to eq(nil) + expect(lettings_log.postcode_known).to eq(nil) + expect(lettings_log.postcode_full).to eq(nil) + expect(lettings_log.address_line1).to eq(nil) + expect(lettings_log.address_line2).to eq(nil) + expect(lettings_log.town_or_city).to eq(nil) + expect(lettings_log.address_search_value_check).to eq(nil) + expect(lettings_log.la).to eq(nil) + + get "/address-search/search-input/lettings_log/#{lettings_log.id}" + + lettings_log.reload + expect(lettings_log.manual_address_entry_selected).to eq(false) + expect(lettings_log.uprn_known).to eq(nil) + expect(lettings_log.uprn).to eq(nil) + expect(lettings_log.uprn_confirmed).to eq(nil) + expect(lettings_log.uprn_selection).to eq(nil) + expect(lettings_log.postcode_known).to eq(nil) + expect(lettings_log.postcode_full).to eq(nil) + expect(lettings_log.address_line1).to eq(nil) + expect(lettings_log.address_line2).to eq(nil) + expect(lettings_log.town_or_city).to eq(nil) + expect(lettings_log.la).to eq(nil) + end + end + + context "when choosing to search for an address for a log that has an address searched value" do + let(:sales_log) { create(:sales_log, :completed, manual_address_entry_selected: true, town_or_city: "Test Town", assigned_to: user) } + + it "correctly sets address fields" do + sales_log.reload + expect(sales_log.manual_address_entry_selected).to eq(true) + expect(sales_log.address_search).to eq(nil) + expect(sales_log.uprn_known).to eq(0) + expect(sales_log.uprn).to eq(nil) + expect(sales_log.uprn_confirmed).to eq(nil) + expect(sales_log.uprn_selection).to eq(nil) + expect(sales_log.pcodenk).to eq(0) + expect(sales_log.postcode_full).to eq("SW1A 1AA") + expect(sales_log.address_line1).to eq("Address line 1") + expect(sales_log.address_line2).to eq(nil) + expect(sales_log.town_or_city).to eq("Test Town") + expect(sales_log.la).to eq("E09000033") + + get "/address-search/search-input/sales_log/#{sales_log.id}" + + sales_log.reload + expect(sales_log.manual_address_entry_selected).to eq(false) + expect(sales_log.address_search).to eq(nil) + expect(sales_log.uprn_known).to eq(nil) + expect(sales_log.uprn).to eq(nil) + expect(sales_log.uprn_confirmed).to eq(nil) + expect(sales_log.uprn_selection).to eq(nil) + expect(sales_log.pcodenk).to eq(nil) + expect(sales_log.postcode_full).to eq(nil) + expect(sales_log.address_line1).to eq(nil) + expect(sales_log.address_line2).to eq(nil) + expect(sales_log.town_or_city).to eq(nil) + expect(sales_log.la).to eq(nil) + end + end + end +end