mobilizon.chapril.org-mobil.../test/service/geospatial/map_quest_test.exs
setop bd3087d121
Fix geospatial clients
add json plus to base client and rename to geospacial client
geospatial http client with json plug
2020-09-21 14:46:07 +02:00

102 lines
3.0 KiB
Elixir

defmodule Mobilizon.Service.Geospatial.MapQuestTest do
use Mobilizon.DataCase
import Mox
alias Mobilizon.Addresses.Address
alias Mobilizon.Service.Geospatial.MapQuest
alias Mobilizon.Service.HTTP.GeospatialClient.Mock
describe "search address" do
test "without API Key triggers an error" do
assert_raise ArgumentError, "API Key required to use MapQuest", fn ->
MapQuest.search("10 Rue Jangot")
end
end
test "triggers an error with an invalid API Key" do
Mock
|> expect(:call, fn
%{
method: :get,
url:
"https://open.mapquestapi.com/geocoding/v1/address?key=secret_key&location=10%20rue%20Jangot&maxResults=10"
},
_opts ->
{:ok,
%Tesla.Env{status: 403, body: "The AppKey submitted with this request is invalid."}}
end)
assert_raise ArgumentError, "The AppKey submitted with this request is invalid.", fn ->
MapQuest.search("10 rue Jangot", api_key: "secret_key")
end
end
test "returns a valid address from search" do
data =
File.read!("test/fixtures/geospatial/map_quest/search.json")
|> Jason.decode!()
Mock
|> expect(:call, fn
%{
method: :get,
url:
"https://open.mapquestapi.com/geocoding/v1/address?key=secret_key&location=10%20rue%20Jangot&maxResults=10"
},
_opts ->
{:ok, %Tesla.Env{status: 200, body: data}}
end)
assert %Address{
locality: "Lyon",
description: "10 Rue Jangot",
region: "Auvergne-Rhône-Alpes",
country: "FR",
postal_code: "69007",
street: "10 Rue Jangot",
geom: %Geo.Point{
coordinates: {4.842566, 45.751714},
properties: %{},
srid: 4326
}
} ==
MapQuest.search("10 rue Jangot", api_key: "secret_key")
|> hd
end
test "returns a valid address from reverse geocode" do
data =
File.read!("test/fixtures/geospatial/map_quest/geocode.json")
|> Jason.decode!()
Mock
|> expect(:call, fn
%{
method: :get,
url:
"https://open.mapquestapi.com/geocoding/v1/reverse?key=secret_key&location=45.751718,4.842569&maxResults=10"
},
_opts ->
{:ok, %Tesla.Env{status: 200, body: data}}
end)
assert %Address{
locality: "Lyon",
description: "10 Rue Jangot",
region: "Auvergne-Rhône-Alpes",
country: "FR",
postal_code: "69007",
street: "10 Rue Jangot",
geom: %Geo.Point{
coordinates: {4.842569, 45.751718},
properties: %{},
srid: 4326
}
} ==
MapQuest.geocode(4.842569, 45.751718, api_key: "secret_key")
|> hd
end
end
end