CLDC-3787: Autocomplete address uprn search (#2967)
* Prototype
* Remove git from dockerfile
* UPRN search too
* Revert address client and use uprn client
* Add address search to lettings too
* Updates with lettings logs
* Update copy
* Move guidance to partial
* Fix uprn return
* Delete new db file, restore old
* Lint
* Remove old db file
* Lint
* Add new db file, remove old
* JS lint
* Update schema
* Add manual entry option
* Update derived variables
* Comment out old version of find address in 2024
* Remove db column
* Add new db columns
* Update guidance partial
* Add unless to migration
* Add migration files to remove and readd
* authenticate user
* Remove file
* Delete migration files
* Add search url
* Add search url
* Fix onConfirm
* Add manual entry button instead of change skip link
* Revert "Add manual entry button instead of change skip link"
This reverts commit 22577c801aca940acfc16caf94d3159071ea8258.
* Revert "Revert "Add manual entry button instead of change skip link""
This reverts commit 9f0a2111a58e933a28105e54aba6ca08c2d043b7.
* Replace uprn question
* Update question copy
* Allow changing the address search value
* Rename address autocomplete to address search
* Add buttons to switch between address questions
* Fix controller logic
* Enable adding question numbers to page headers
* Update skip links
* Add js disabled message to select
* Alternative way to handle js disabled users
* Revert "Alternative way to handle js disabled users"
This reverts commit 10da3d61e2f89ec29ef9f9071c63eb99aa2bb482.
* Fix typo
* Fix address options for address search question
* Reuse AddressDataPresenter where appropriate
* Lint
* Remove uprn selection question tests
* Reuse UprnDataPresenter where appropriate
* CSV export, exclude address_search
* Add address search to sales and lettings factory bots
* Exclude old address questions from routing, keep as exported values
* lint
* Update uprn value
* Add address search input boolean and switch between questions
* Reword copy, remove "Find" and "Search by"
* Align address questions, add question number and question text
* Remove old wip depends on
* Update some tests
* Update migration, move default value from db to model
* Update test
* Remove binding pry
* Lint
* Update test
* Lint
* Update test
* Update routes with underscores
* Remove debugging
* Limit visible logs to user
* Add manual address entry selected variable
* Change address search min length to 3chars
* Remove binding.pry
* Update factory bots, manual_address_entry_selected to true for preexisting tests
* Update model tests
* Update sales model tests excl E-code tests
* Update address search request test
* Reuse uprn id instead of address_search
* Set manual address entry selected as false when creating test logs
* Update model test
* Update request tests and remove old questions
* Add back test
* Update services
* Update more tests
Co-authored-by: kosiakkatrina <kosiakkatrina@users.noreply.github.com>
* Update request tests
* update model tests
* Also update sales log
* Update service csv uprn_selection values to 1
* Add tests for pages and questions
* Update test
* Update uprn_known
* Lint
* Add feature test
* Update test
* Update tests
* Remove test
* pre-consolidate migration files
* Indentation
* Controller method improvements
* Update question numbers for 2025/26
* Update question numbers tests
* consolidate and delete old migration files
* undo changes to schema.rb
* Update 2025 property information translation files
* Update answer options to show singular previously selected result if present
* Move buttons to bottom guidance partials
* Small improvements, make address search and existing search more similar
* Validate entered addresses as within England
* Update test
* Revert "Validate entered addresses as within England"
This reverts commit 2dbfbcc8a5188cde7fb0ac0dcdbc5919eefd6a12.
* Add missing button to sales address page
* Change error code
* Clear invalid options
* Edit no results message method
* Keep no result logic just change text
* Display uprn value with address value
* Still show no results message when characters entered is less than 3 rather than nothing
* Fix uprn result when query is ambiguous
* Reduce min match for address search
* Hide no result found message just before results are populated
* Prevent changing logs to 2025 with invalid addresses
* Correct attribute name
* Handle nil
* Remove custom error message
* Remove unused variables from factory
* Update tests, remove address and postcode from old find address
* Fix bug clearing uprn from see all answers
* Revert "Fix bug clearing uprn from see all answers"
This reverts commit a66c47a1abf7a429f25e0a016fedb0b92e92f15c.
* Undo changes to validation method
* Fix unchanged uprn_selection when clearing or changing uprn
* Undo a change
* Update bulk upload 2025
* Fix typo
* Remove redundant line
---------
Co-authored-by: Kat <54268893+kosiakkatrina@users.noreply.github.com>
Co-authored-by: kosiakkatrina <kosiakkatrina@users.noreply.github.com>
1 week ago
|
|
|
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, manual_address_entry_selected: false, 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.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.uprn_known).to eq(1)
|
|
|
|
expect(lettings_log.uprn).to eq("10033558653")
|
|
|
|
expect(lettings_log.uprn_confirmed).to eq(1)
|
|
|
|
expect(lettings_log.uprn_selection).to eq("10033558653")
|
|
|
|
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.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.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.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
|
|
|
|
|
|
|
|
context "when searching by address and UPRN" do
|
|
|
|
let(:sales_log) { create(:sales_log, :completed, manual_address_entry_selected: false, assigned_to: user) }
|
|
|
|
|
|
|
|
context "and theres no uprn returned" do
|
|
|
|
before do
|
|
|
|
body = { results: [{ DPA: { "ADDRESS": "1, Test Street", "UPRN": "123" } }] }.to_json
|
|
|
|
uprn_body = { results: [{ DPA: nil }] }.to_json
|
|
|
|
WebMock.stub_request(:get, "https://api.os.uk/search/places/v1/find?key=OS_DATA_KEY&maxresults=10&minmatch=0.2&query=100")
|
|
|
|
.to_return(status: 200, body:, headers: {})
|
|
|
|
WebMock.stub_request(:get, "https://api.os.uk/search/places/v1/uprn?dataset=DPA,LPI&key=OS_DATA_KEY&uprn=100")
|
|
|
|
.to_return(status: 200, body: uprn_body, headers: {})
|
|
|
|
end
|
|
|
|
|
|
|
|
it "returns the address results" do
|
|
|
|
get "/address-search?query=100"
|
|
|
|
|
|
|
|
expect(response).to have_http_status(:ok)
|
|
|
|
expect(response.body).to eq([{ text: "1, Test Street", value: "123" }].to_json)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "and theres no address returned" do
|
|
|
|
before do
|
|
|
|
body = { results: [{ DPA: nil }] }.to_json
|
|
|
|
uprn_body = { results: [{ DPA: { "ADDRESS": "2, Test Street", UPRN: "321" } }] }.to_json
|
|
|
|
WebMock.stub_request(:get, "https://api.os.uk/search/places/v1/find?key=OS_DATA_KEY&maxresults=10&minmatch=0.2&query=100")
|
|
|
|
.to_return(status: 200, body:, headers: {})
|
|
|
|
WebMock.stub_request(:get, "https://api.os.uk/search/places/v1/uprn?dataset=DPA,LPI&key=OS_DATA_KEY&uprn=100")
|
|
|
|
.to_return(status: 200, body: uprn_body, headers: {})
|
|
|
|
end
|
|
|
|
|
|
|
|
it "returns the address results" do
|
|
|
|
get "/address-search?query=100"
|
|
|
|
|
|
|
|
expect(response).to have_http_status(:ok)
|
|
|
|
expect(response.body).to eq([{ text: "2, Test Street", value: "321" }].to_json)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
CLDC-3787: Autocomplete address uprn search (#2967)
* Prototype
* Remove git from dockerfile
* UPRN search too
* Revert address client and use uprn client
* Add address search to lettings too
* Updates with lettings logs
* Update copy
* Move guidance to partial
* Fix uprn return
* Delete new db file, restore old
* Lint
* Remove old db file
* Lint
* Add new db file, remove old
* JS lint
* Update schema
* Add manual entry option
* Update derived variables
* Comment out old version of find address in 2024
* Remove db column
* Add new db columns
* Update guidance partial
* Add unless to migration
* Add migration files to remove and readd
* authenticate user
* Remove file
* Delete migration files
* Add search url
* Add search url
* Fix onConfirm
* Add manual entry button instead of change skip link
* Revert "Add manual entry button instead of change skip link"
This reverts commit 22577c801aca940acfc16caf94d3159071ea8258.
* Revert "Revert "Add manual entry button instead of change skip link""
This reverts commit 9f0a2111a58e933a28105e54aba6ca08c2d043b7.
* Replace uprn question
* Update question copy
* Allow changing the address search value
* Rename address autocomplete to address search
* Add buttons to switch between address questions
* Fix controller logic
* Enable adding question numbers to page headers
* Update skip links
* Add js disabled message to select
* Alternative way to handle js disabled users
* Revert "Alternative way to handle js disabled users"
This reverts commit 10da3d61e2f89ec29ef9f9071c63eb99aa2bb482.
* Fix typo
* Fix address options for address search question
* Reuse AddressDataPresenter where appropriate
* Lint
* Remove uprn selection question tests
* Reuse UprnDataPresenter where appropriate
* CSV export, exclude address_search
* Add address search to sales and lettings factory bots
* Exclude old address questions from routing, keep as exported values
* lint
* Update uprn value
* Add address search input boolean and switch between questions
* Reword copy, remove "Find" and "Search by"
* Align address questions, add question number and question text
* Remove old wip depends on
* Update some tests
* Update migration, move default value from db to model
* Update test
* Remove binding pry
* Lint
* Update test
* Lint
* Update test
* Update routes with underscores
* Remove debugging
* Limit visible logs to user
* Add manual address entry selected variable
* Change address search min length to 3chars
* Remove binding.pry
* Update factory bots, manual_address_entry_selected to true for preexisting tests
* Update model tests
* Update sales model tests excl E-code tests
* Update address search request test
* Reuse uprn id instead of address_search
* Set manual address entry selected as false when creating test logs
* Update model test
* Update request tests and remove old questions
* Add back test
* Update services
* Update more tests
Co-authored-by: kosiakkatrina <kosiakkatrina@users.noreply.github.com>
* Update request tests
* update model tests
* Also update sales log
* Update service csv uprn_selection values to 1
* Add tests for pages and questions
* Update test
* Update uprn_known
* Lint
* Add feature test
* Update test
* Update tests
* Remove test
* pre-consolidate migration files
* Indentation
* Controller method improvements
* Update question numbers for 2025/26
* Update question numbers tests
* consolidate and delete old migration files
* undo changes to schema.rb
* Update 2025 property information translation files
* Update answer options to show singular previously selected result if present
* Move buttons to bottom guidance partials
* Small improvements, make address search and existing search more similar
* Validate entered addresses as within England
* Update test
* Revert "Validate entered addresses as within England"
This reverts commit 2dbfbcc8a5188cde7fb0ac0dcdbc5919eefd6a12.
* Add missing button to sales address page
* Change error code
* Clear invalid options
* Edit no results message method
* Keep no result logic just change text
* Display uprn value with address value
* Still show no results message when characters entered is less than 3 rather than nothing
* Fix uprn result when query is ambiguous
* Reduce min match for address search
* Hide no result found message just before results are populated
* Prevent changing logs to 2025 with invalid addresses
* Correct attribute name
* Handle nil
* Remove custom error message
* Remove unused variables from factory
* Update tests, remove address and postcode from old find address
* Fix bug clearing uprn from see all answers
* Revert "Fix bug clearing uprn from see all answers"
This reverts commit a66c47a1abf7a429f25e0a016fedb0b92e92f15c.
* Undo changes to validation method
* Fix unchanged uprn_selection when clearing or changing uprn
* Undo a change
* Update bulk upload 2025
* Fix typo
* Remove redundant line
---------
Co-authored-by: Kat <54268893+kosiakkatrina@users.noreply.github.com>
Co-authored-by: kosiakkatrina <kosiakkatrina@users.noreply.github.com>
1 week ago
|
|
|
end
|
|
|
|
end
|