2020-02-12 06:13:54 +00:00
|
|
|
"""The tests for the august platform."""
|
2020-02-16 05:08:52 +00:00
|
|
|
import asyncio
|
2020-02-12 23:35:07 +00:00
|
|
|
from unittest.mock import MagicMock
|
2020-02-12 06:13:54 +00:00
|
|
|
|
|
|
|
from homeassistant.components import august
|
2020-02-17 18:30:14 +00:00
|
|
|
from homeassistant.exceptions import HomeAssistantError
|
2020-02-12 06:13:54 +00:00
|
|
|
|
2020-02-12 23:35:07 +00:00
|
|
|
from tests.components.august.mocks import (
|
2020-02-17 18:30:14 +00:00
|
|
|
MockAugustApiFailing,
|
|
|
|
MockAugustComponentData,
|
2020-02-12 23:35:07 +00:00
|
|
|
_mock_august_authentication,
|
|
|
|
_mock_august_authenticator,
|
2020-02-17 18:30:14 +00:00
|
|
|
_mock_august_lock,
|
2020-02-12 23:35:07 +00:00
|
|
|
)
|
2020-02-12 06:13:54 +00:00
|
|
|
|
|
|
|
|
2020-02-17 18:30:14 +00:00
|
|
|
def test_get_lock_name():
|
|
|
|
"""Get the lock name from August data."""
|
|
|
|
data = MockAugustComponentData(last_lock_status_update_timestamp=1)
|
|
|
|
lock = _mock_august_lock()
|
|
|
|
data.set_mocked_locks([lock])
|
|
|
|
assert data.get_lock_name("mockdeviceid1") == "Mocked Lock 1"
|
|
|
|
|
|
|
|
|
|
|
|
def test_unlock_throws_august_api_http_error():
|
|
|
|
"""Test unlock."""
|
|
|
|
data = MockAugustComponentData(api=MockAugustApiFailing())
|
|
|
|
lock = _mock_august_lock()
|
|
|
|
data.set_mocked_locks([lock])
|
|
|
|
last_err = None
|
|
|
|
try:
|
|
|
|
data.unlock("mockdeviceid1")
|
|
|
|
except HomeAssistantError as err:
|
|
|
|
last_err = err
|
|
|
|
assert (
|
|
|
|
str(last_err) == "Mocked Lock 1: This should bubble up as its user consumable"
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
def test_lock_throws_august_api_http_error():
|
|
|
|
"""Test lock."""
|
|
|
|
data = MockAugustComponentData(api=MockAugustApiFailing())
|
|
|
|
lock = _mock_august_lock()
|
|
|
|
data.set_mocked_locks([lock])
|
|
|
|
last_err = None
|
|
|
|
try:
|
|
|
|
data.unlock("mockdeviceid1")
|
|
|
|
except HomeAssistantError as err:
|
|
|
|
last_err = err
|
|
|
|
assert (
|
|
|
|
str(last_err) == "Mocked Lock 1: This should bubble up as its user consumable"
|
|
|
|
)
|
|
|
|
|
|
|
|
|
2020-02-16 05:08:52 +00:00
|
|
|
async def test__refresh_access_token(hass):
|
2020-02-17 18:30:14 +00:00
|
|
|
"""Test refresh of the access token."""
|
2020-02-12 06:13:54 +00:00
|
|
|
authentication = _mock_august_authentication("original_token", 1234)
|
|
|
|
authenticator = _mock_august_authenticator()
|
2020-02-16 05:08:52 +00:00
|
|
|
token_refresh_lock = asyncio.Lock()
|
|
|
|
|
2020-02-12 06:13:54 +00:00
|
|
|
data = august.AugustData(
|
2020-02-16 05:08:52 +00:00
|
|
|
hass, MagicMock(name="api"), authentication, authenticator, token_refresh_lock
|
2020-02-12 06:13:54 +00:00
|
|
|
)
|
2020-02-16 05:08:52 +00:00
|
|
|
await data._async_refresh_access_token_if_needed()
|
2020-02-12 06:13:54 +00:00
|
|
|
authenticator.refresh_access_token.assert_not_called()
|
|
|
|
|
|
|
|
authenticator.should_refresh.return_value = 1
|
|
|
|
authenticator.refresh_access_token.return_value = _mock_august_authentication(
|
|
|
|
"new_token", 5678
|
|
|
|
)
|
2020-02-16 05:08:52 +00:00
|
|
|
await data._async_refresh_access_token_if_needed()
|
2020-02-12 06:13:54 +00:00
|
|
|
authenticator.refresh_access_token.assert_called()
|
|
|
|
assert data._access_token == "new_token"
|
|
|
|
assert data._access_token_expires == 5678
|