core/tests/components/iotty/test_api.py

83 lines
2.4 KiB
Python

"""Unit tests for iottycloud API."""
from unittest.mock import patch
from aiohttp import ClientSession
import pytest
from homeassistant.components.iotty import api
from homeassistant.components.iotty.const import DOMAIN
from homeassistant.core import HomeAssistant
from homeassistant.helpers import config_entry_oauth2_flow
from tests.common import MockConfigEntry
from tests.test_util.aiohttp import AiohttpClientMocker
async def test_api_create_fail(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test API creation with no session."""
with pytest.raises(ValueError, match="websession"):
api.IottyProxy(hass, None, None)
with pytest.raises(ValueError, match="oauth_session"):
api.IottyProxy(hass, aioclient_mock, None)
async def test_api_create_ok(
hass: HomeAssistant,
mock_config_entry: MockConfigEntry,
aiohttp_client_session: None,
local_oauth_impl: ClientSession,
) -> None:
"""Test API creation. We're checking that we can create an IottyProxy without raising."""
mock_config_entry.add_to_hass(hass)
assert mock_config_entry.data["auth_implementation"] is not None
config_entry_oauth2_flow.async_register_implementation(
hass, DOMAIN, local_oauth_impl
)
api.IottyProxy(hass, aiohttp_client_session, local_oauth_impl)
@patch(
"homeassistant.helpers.config_entry_oauth2_flow.OAuth2Session.valid_token", False
)
async def test_api_getaccesstoken_tokennotvalid_reloadtoken(
hass: HomeAssistant,
mock_config_entry: MockConfigEntry,
local_oauth_impl: ClientSession,
mock_aioclient: None,
aiohttp_client_session: ClientSession,
) -> None:
"""Test getting access token.
If a request with an invalid token is made, a request for a new token is done,
and the resulting token is used for future calls.
"""
config_entry_oauth2_flow.async_register_implementation(
hass, DOMAIN, local_oauth_impl
)
new_token = "ACCESS_TOKEN_1"
mock_aioclient.post(
"https://token.url", json={"access_token": new_token, "expires_in": 100}
)
mock_aioclient.post("https://example.com", status=201)
mock_config_entry.add_to_hass(hass)
oauth2_session = config_entry_oauth2_flow.OAuth2Session(
hass, mock_config_entry, local_oauth_impl
)
iotty = api.IottyProxy(hass, aiohttp_client_session, oauth2_session)
tok = await iotty.async_get_access_token()
assert tok == new_token