|
|
|
require "rails_helper"
|
|
|
|
|
|
|
|
describe UprnClient do
|
|
|
|
let(:client) { described_class.new("123") }
|
|
|
|
|
|
|
|
let(:valid_response) do
|
|
|
|
{ results: [{ DPA: { postcode: "12345" } }] }.to_json
|
|
|
|
end
|
|
|
|
|
|
|
|
def stub_api_request(body:, status: 200)
|
|
|
|
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
|
|
|
|
|
|
|
|
describe "call" do
|
|
|
|
context "when json parse error" do
|
|
|
|
before do
|
|
|
|
stub_api_request(body: "{", status: 200)
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
context "when http error" do
|
|
|
|
before do
|
|
|
|
stub_api_request(body: valid_response, status: 500)
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
context "when DPA results empty" do
|
|
|
|
context "and LPI result is present" do
|
|
|
|
let(:valid_lpi_response) do
|
|
|
|
{ results: [{ LPI: { postcode_locator: "LPI postcode", LPI_KEY: "123" } }] }.to_json
|
|
|
|
end
|
|
|
|
|
|
|
|
before do
|
|
|
|
stub_api_request(body: valid_lpi_response, status: 200)
|
|
|
|
|
|
|
|
client.call
|
|
|
|
end
|
|
|
|
|
|
|
|
it "returns result" do
|
|
|
|
expect(client.result).to eq({ "postcode_locator" => "LPI postcode", "LPI_KEY" => "123" })
|
|
|
|
end
|
|
|
|
|
|
|
|
it "returns no error" do
|
|
|
|
expect(client.error).to be_nil
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
context "with results" do
|
|
|
|
before do
|
|
|
|
stub_api_request(body: valid_response)
|
|
|
|
|
|
|
|
client.call
|
|
|
|
end
|
|
|
|
|
|
|
|
it "returns result" do
|
|
|
|
expect(client.result).to eq({ "postcode" => "12345" })
|
|
|
|
end
|
|
|
|
|
|
|
|
it "returns no error" do
|
|
|
|
expect(client.error).to be_nil
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|