Browse Source

Add manual address entry selected variable

CLDC-3787-Autocomplete-address-search
Manny Dinssa 3 days ago
parent
commit
608633add2
  1. 4
      app/controllers/address_search_controller.rb
  2. 16
      app/models/derived_variables/lettings_log_variables.rb
  3. 19
      app/models/derived_variables/sales_log_variables.rb
  4. 2
      app/models/form/lettings/pages/address_fallback.rb
  5. 2
      app/models/form/lettings/pages/address_search.rb
  6. 2
      app/models/form/sales/pages/address_fallback.rb
  7. 2
      app/models/form/sales/pages/address_search.rb
  8. 7
      app/models/log.rb
  9. 9
      db/migrate/20250217145927_rename_address_search_input_in_logs.rb
  10. 6
      db/schema.rb
  11. 8
      spec/models/form/lettings/questions/uprn_spec.rb
  12. 2
      spec/request_helper.rb
  13. 7
      spec/requests/address_options_spec.rb
  14. 154
      spec/requests/address_search_controller_spec.rb

4
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

16
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?

19
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

2
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

2
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

2
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

2
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

7
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

9
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

6
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"

8
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

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

7
spec/requests/address_options_spec.rb

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

154
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
Loading…
Cancel
Save