diff --git a/app/services/uprn_client.rb b/app/services/uprn_client.rb index 7c9bf8940..edc91ffb7 100644 --- a/app/services/uprn_client.rb +++ b/app/services/uprn_client.rb @@ -20,7 +20,7 @@ class UprnClient end def result - @result ||= JSON.parse(response.body).dig("results", 0, "DPA") + @result ||= JSON.parse(response.body).dig("results", 0, "DPA") || JSON.parse(response.body).dig("results", 0, "LPI") end private @@ -39,6 +39,7 @@ private params = { uprn:, key: ENV["OS_DATA_KEY"], + dataset: %w[DPA LPI].join(","), } uri.query = URI.encode_www_form(params) uri.to_s diff --git a/spec/services/exports/lettings_log_export_service_spec.rb b/spec/services/exports/lettings_log_export_service_spec.rb index 253dc455d..b3f33f24f 100644 --- a/spec/services/exports/lettings_log_export_service_spec.rb +++ b/spec/services/exports/lettings_log_export_service_spec.rb @@ -181,7 +181,7 @@ RSpec.describe Exports::LettingsLogExportService do before do Timecop.freeze(Time.zone.local(2023, 4, 3)) Singleton.__init__(FormHandler) - stub_request(:get, "https://api.os.uk/search/places/v1/uprn?key=OS_DATA_KEY&uprn=100023336956") + stub_request(:get, "https://api.os.uk/search/places/v1/uprn?dataset=DPA,LPI&key=OS_DATA_KEY&uprn=100023336956") .to_return(status: 200, body: '{"status":200,"results":[{"DPA":{ "PO_BOX_NUMBER": "fake", "ORGANISATION_NAME": "org", diff --git a/spec/services/uprn_client_spec.rb b/spec/services/uprn_client_spec.rb index b595b7e76..e329f9948 100644 --- a/spec/services/uprn_client_spec.rb +++ b/spec/services/uprn_client_spec.rb @@ -8,7 +8,7 @@ describe UprnClient do end def stub_api_request(body:, status: 200) - stub_request(:get, "https://api.os.uk/search/places/v1/uprn?key=OS_DATA_KEY&uprn=123") + stub_request(:get, "https://api.os.uk/search/places/v1/uprn?dataset=DPA,LPI&key=OS_DATA_KEY&uprn=123") .to_return(status:, body:, headers: {}) end @@ -37,15 +37,37 @@ describe UprnClient do end end - context "when results empty" do - before do - stub_api_request(body: {}.to_json) + context "when DPA results empty" do + context "and LPI result is present" do + let(:valid_lpi_response) do + { results: [{ LPI: { postcode: "LPI postcode" } }] }.to_json + end - client.call + before do + stub_api_request(body: valid_lpi_response, status: 200) + + client.call + end + + it "returns result" do + expect(client.result).to eq({ "postcode" => "LPI postcode" }) + end + + it "returns no error" do + expect(client.error).to be_nil + end end - it "returns error" do - expect(client.error).to eq("UPRN is not recognised. Check the number, or enter the address") + context "and LPI results empty" do + before do + stub_api_request(body: {}.to_json) + + client.call + end + + it "returns error" do + expect(client.error).to eq("UPRN is not recognised. Check the number, or enter the address") + end end end