Use whoami for location lookup (#50934)
This commit is contained in:
parent
0cbcb9e0d6
commit
7ff14b47a8
11 changed files with 121 additions and 152 deletions
|
@ -1,5 +1,5 @@
|
|||
"""Test Home Assistant location util methods."""
|
||||
from unittest.mock import Mock, patch
|
||||
from unittest.mock import Mock
|
||||
|
||||
import aiohttp
|
||||
import pytest
|
||||
|
@ -72,76 +72,25 @@ def test_get_miles():
|
|||
assert round(miles, 2) == DISTANCE_MILES
|
||||
|
||||
|
||||
async def test_detect_location_info_ipapi(aioclient_mock, session):
|
||||
"""Test detect location info using ipapi.co."""
|
||||
aioclient_mock.get(location_util.IPAPI, text=load_fixture("ipapi.co.json"))
|
||||
async def test_detect_location_info_whoami(aioclient_mock, session):
|
||||
"""Test detect location info using whoami.home-assistant.io."""
|
||||
aioclient_mock.get(location_util.WHOAMI_URL, text=load_fixture("whoami.json"))
|
||||
|
||||
info = await location_util.async_detect_location_info(session, _test_real=True)
|
||||
|
||||
assert info is not None
|
||||
assert info.ip == "1.2.3.4"
|
||||
assert info.country_code == "CH"
|
||||
assert info.country_name == "Switzerland"
|
||||
assert info.region_code == "BE"
|
||||
assert info.region_name == "Bern"
|
||||
assert info.city == "Bern"
|
||||
assert info.zip_code == "3000"
|
||||
assert info.time_zone == "Europe/Zurich"
|
||||
assert info.latitude == 46.9480278
|
||||
assert info.longitude == 7.4490812
|
||||
assert info.country_code == "XX"
|
||||
assert info.region_code == "00"
|
||||
assert info.city == "Gotham"
|
||||
assert info.zip_code == "12345"
|
||||
assert info.time_zone == "Earth/Gotham"
|
||||
assert info.latitude == 12.34567
|
||||
assert info.longitude == 12.34567
|
||||
assert info.use_metric
|
||||
|
||||
|
||||
async def test_detect_location_info_ipapi_exhaust(aioclient_mock, session):
|
||||
"""Test detect location info using ipapi.co."""
|
||||
aioclient_mock.get(location_util.IPAPI, json={"latitude": "Sign up to access"})
|
||||
aioclient_mock.get(location_util.IP_API, text=load_fixture("ip-api.com.json"))
|
||||
|
||||
info = await location_util.async_detect_location_info(session, _test_real=True)
|
||||
|
||||
assert info is not None
|
||||
# ip_api result because ipapi got skipped
|
||||
assert info.country_code == "US"
|
||||
assert len(aioclient_mock.mock_calls) == 2
|
||||
|
||||
|
||||
async def test_detect_location_info_ip_api(aioclient_mock, session):
|
||||
"""Test detect location info using ip-api.com."""
|
||||
aioclient_mock.get(location_util.IP_API, text=load_fixture("ip-api.com.json"))
|
||||
|
||||
with patch("homeassistant.util.location._get_ipapi", return_value=None):
|
||||
info = await location_util.async_detect_location_info(session, _test_real=True)
|
||||
|
||||
assert info is not None
|
||||
assert info.ip == "1.2.3.4"
|
||||
assert info.country_code == "US"
|
||||
assert info.country_name == "United States"
|
||||
assert info.region_code == "CA"
|
||||
assert info.region_name == "California"
|
||||
assert info.city == "San Diego"
|
||||
assert info.zip_code == "92122"
|
||||
assert info.time_zone == "America/Los_Angeles"
|
||||
assert info.latitude == 32.8594
|
||||
assert info.longitude == -117.2073
|
||||
assert not info.use_metric
|
||||
|
||||
|
||||
async def test_detect_location_info_both_queries_fail(session):
|
||||
"""Ensure we return None if both queries fail."""
|
||||
with patch("homeassistant.util.location._get_ipapi", return_value=None), patch(
|
||||
"homeassistant.util.location._get_ip_api", return_value=None
|
||||
):
|
||||
info = await location_util.async_detect_location_info(session, _test_real=True)
|
||||
assert info is None
|
||||
|
||||
|
||||
async def test_freegeoip_query_raises(raising_session):
|
||||
"""Test ipapi.co query when the request to API fails."""
|
||||
info = await location_util._get_ipapi(raising_session)
|
||||
assert info is None
|
||||
|
||||
|
||||
async def test_ip_api_query_raises(raising_session):
|
||||
"""Test ip api query when the request to API fails."""
|
||||
info = await location_util._get_ip_api(raising_session)
|
||||
async def test_whoami_query_raises(raising_session):
|
||||
"""Test whoami query when the request to API fails."""
|
||||
info = await location_util._get_whoami(raising_session)
|
||||
assert info is None
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue