Files
archived-teslamate/test/support/mocks/geocoder.ex
2021-03-13 13:14:02 +01:00

164 lines
4.5 KiB
Elixir

defmodule GeocoderMock do
alias TeslaMate.Locations.Address
def reverse_lookup(%Decimal{} = lat, %Decimal{} = lon, lang) do
reverse_lookup(Decimal.to_float(lat), Decimal.to_float(lon), lang)
end
def reverse_lookup(99.9, 99.9, _lang) do
{:error, :induced_error}
end
def reverse_lookup(-99.9, -99.9, _lang) do
{:ok,
%{
display_name: "Unknown",
osm_type: "unknown",
osm_id: 0,
latitude: 0.0,
longitude: 0.0,
raw: %{"error" => "Unable to geocode"}
}}
end
def reverse_lookup(lat, lng, _lang)
when lat in [52.51599, 52.515, 52.514521] and lng in [13.35199, 13.351, 13.350144] do
{:ok,
%{
city: nil,
country: "Germany",
county: nil,
display_name: "1, Großer Stern, Tiergarten, Mitte, Berlin, 10787, Germany",
house_number: "1",
latitude: "52.5145069",
longitude: "13.3501101",
name: nil,
neighbourhood: "Tiergarten",
osm_id: 89_721_012,
osm_type: "way",
postcode: "10787",
raw: %{
"city_district" => "Mitte",
"country" => "Germany",
"country_code" => "de",
"house_number" => "1",
"postcode" => "10787",
"road" => "Großer Stern",
"state" => "Berlin",
"suburb" => "Tiergarten"
},
road: "Großer Stern",
state: "Berlin",
state_district: nil
}}
end
def reverse_lookup(52.394246, 13.542552, _lang) do
{:ok,
%{
city: nil,
country: "Germany",
county: nil,
display_name:
"Tesla Store & Service Center Berlin, 24-26, Alexander-Meißner-Straße, Altglienicke, Treptow-Köpenick, Berlin, 12526, Germany",
house_number: "24-26",
latitude: "52.3941049",
longitude: "13.5425707",
name: "Tesla Store & Service Center Berlin",
neighbourhood: "Altglienicke",
osm_id: 64_445_009,
osm_type: "way",
postcode: "12526",
raw: %{
"car" => "Tesla Store & Service Center Berlin",
"city_district" => "Treptow-Köpenick",
"country" => "Germany",
"country_code" => "de",
"house_number" => "24-26",
"postcode" => "12526",
"road" => "Alexander-Meißner-Straße",
"state" => "Berlin",
"suburb" => "Altglienicke"
},
road: "Alexander-Meißner-Straße",
state: "Berlin",
state_district: nil
}}
end
def reverse_lookup(-25.066188, -130.100502, _lang) do
{:ok,
%{
city: "Adamstown",
country: "Pitcairn Islands",
county: nil,
display_name: "Adamstown, Pitcairn Islands",
house_number: nil,
latitude: "-25.0661235097694",
longitude: "-130.100512324384",
name: nil,
neighbourhood: nil,
osm_id: 246_879_822,
osm_type: "way",
postcode: nil,
raw: %{
"country" => "Pitcairn Islands",
"country_code" => "pn",
"town" => "Adamstown"
},
road: nil,
state: nil,
state_district: nil
}}
end
def reverse_lookup(lat, lon, _lang) when is_number(lat) and is_number(lon) do
{:ok,
%{
city: "Bielefeld",
country: "Deutschland",
county: nil,
display_name:
"Von-der-Recke-Straße, Mitte, Bielefeld, Regierungsbezirk Detmold, Nordrhein-Westfalen, 33602, Deutschland",
house_number: nil,
latitude: "52.0196010141104",
longitude: "8.52631835353143",
name: "Von-der-Recke-Straße",
neighbourhood: "Mitte",
osm_id: 103_619_766,
osm_type: "way",
postcode: "33602",
raw: %{
"city" => "Bielefeld",
"country" => "Deutschland",
"country_code" => "de",
"postcode" => "33602",
"road" => "Von-der-Recke-Straße",
"state" => "Nordrhein-Westfalen",
"state_district" => "Regierungsbezirk Detmold",
"suburb" => "Mitte"
},
road: "Von-der-Recke-Straße",
state: "Nordrhein-Westfalen"
}}
end
def details(addresses, lang) do
{:ok,
Enum.map(addresses, fn
%Address{display_name: "error"} ->
throw({:error, :boom})
%Address{} = address ->
address
|> Map.from_struct()
|> Map.update(:name, "", fn val -> "#{val}_#{lang}" end)
|> Map.update(:state, "", fn val -> "#{val}_#{lang}" end)
|> Map.update(:country, "", fn _ -> "#{lang}" end)
end)}
catch
{:error, :boom} ->
{:error, :boom}
end
end