mirror of
https://github.com/home-assistant/core.git
synced 2025-07-22 12:47:08 +00:00
Improve type hints in Config entry oauth2 tests (#120090)
This commit is contained in:
parent
5c2f78a4b9
commit
e2a34d209f
@ -8,6 +8,7 @@ from unittest.mock import patch
|
|||||||
|
|
||||||
import aiohttp
|
import aiohttp
|
||||||
import pytest
|
import pytest
|
||||||
|
from typing_extensions import Generator
|
||||||
|
|
||||||
from homeassistant import config_entries, data_entry_flow, setup
|
from homeassistant import config_entries, data_entry_flow, setup
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
@ -29,7 +30,9 @@ TOKEN_URL = "https://example.como/auth/token"
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
async def local_impl(hass):
|
async def local_impl(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
) -> config_entry_oauth2_flow.LocalOAuth2Implementation:
|
||||||
"""Local implementation."""
|
"""Local implementation."""
|
||||||
assert await setup.async_setup_component(hass, "auth", {})
|
assert await setup.async_setup_component(hass, "auth", {})
|
||||||
return config_entry_oauth2_flow.LocalOAuth2Implementation(
|
return config_entry_oauth2_flow.LocalOAuth2Implementation(
|
||||||
@ -38,7 +41,9 @@ async def local_impl(hass):
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def flow_handler(hass):
|
def flow_handler(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
) -> Generator[type[config_entry_oauth2_flow.AbstractOAuth2FlowHandler]]:
|
||||||
"""Return a registered config flow."""
|
"""Return a registered config flow."""
|
||||||
|
|
||||||
mock_platform(hass, f"{TEST_DOMAIN}.config_flow")
|
mock_platform(hass, f"{TEST_DOMAIN}.config_flow")
|
||||||
@ -111,7 +116,10 @@ def test_inherit_enforces_domain_set() -> None:
|
|||||||
TestFlowHandler()
|
TestFlowHandler()
|
||||||
|
|
||||||
|
|
||||||
async def test_abort_if_no_implementation(hass: HomeAssistant, flow_handler) -> None:
|
async def test_abort_if_no_implementation(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
flow_handler: type[config_entry_oauth2_flow.AbstractOAuth2FlowHandler],
|
||||||
|
) -> None:
|
||||||
"""Check flow abort when no implementations."""
|
"""Check flow abort when no implementations."""
|
||||||
flow = flow_handler()
|
flow = flow_handler()
|
||||||
flow.hass = hass
|
flow.hass = hass
|
||||||
@ -121,7 +129,8 @@ async def test_abort_if_no_implementation(hass: HomeAssistant, flow_handler) ->
|
|||||||
|
|
||||||
|
|
||||||
async def test_missing_credentials_for_domain(
|
async def test_missing_credentials_for_domain(
|
||||||
hass: HomeAssistant, flow_handler
|
hass: HomeAssistant,
|
||||||
|
flow_handler: type[config_entry_oauth2_flow.AbstractOAuth2FlowHandler],
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Check flow abort for integration supporting application credentials."""
|
"""Check flow abort for integration supporting application credentials."""
|
||||||
flow = flow_handler()
|
flow = flow_handler()
|
||||||
@ -135,7 +144,9 @@ async def test_missing_credentials_for_domain(
|
|||||||
|
|
||||||
@pytest.mark.usefixtures("current_request_with_host")
|
@pytest.mark.usefixtures("current_request_with_host")
|
||||||
async def test_abort_if_authorization_timeout(
|
async def test_abort_if_authorization_timeout(
|
||||||
hass: HomeAssistant, flow_handler, local_impl
|
hass: HomeAssistant,
|
||||||
|
flow_handler: type[config_entry_oauth2_flow.AbstractOAuth2FlowHandler],
|
||||||
|
local_impl: config_entry_oauth2_flow.LocalOAuth2Implementation,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Check timeout generating authorization url."""
|
"""Check timeout generating authorization url."""
|
||||||
flow_handler.async_register_implementation(hass, local_impl)
|
flow_handler.async_register_implementation(hass, local_impl)
|
||||||
@ -155,7 +166,9 @@ async def test_abort_if_authorization_timeout(
|
|||||||
|
|
||||||
@pytest.mark.usefixtures("current_request_with_host")
|
@pytest.mark.usefixtures("current_request_with_host")
|
||||||
async def test_abort_if_no_url_available(
|
async def test_abort_if_no_url_available(
|
||||||
hass: HomeAssistant, flow_handler, local_impl
|
hass: HomeAssistant,
|
||||||
|
flow_handler: type[config_entry_oauth2_flow.AbstractOAuth2FlowHandler],
|
||||||
|
local_impl: config_entry_oauth2_flow.LocalOAuth2Implementation,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Check no_url_available generating authorization url."""
|
"""Check no_url_available generating authorization url."""
|
||||||
flow_handler.async_register_implementation(hass, local_impl)
|
flow_handler.async_register_implementation(hass, local_impl)
|
||||||
@ -176,8 +189,8 @@ async def test_abort_if_no_url_available(
|
|||||||
@pytest.mark.usefixtures("current_request_with_host")
|
@pytest.mark.usefixtures("current_request_with_host")
|
||||||
async def test_abort_if_oauth_error(
|
async def test_abort_if_oauth_error(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
flow_handler,
|
flow_handler: type[config_entry_oauth2_flow.AbstractOAuth2FlowHandler],
|
||||||
local_impl,
|
local_impl: config_entry_oauth2_flow.LocalOAuth2Implementation,
|
||||||
hass_client_no_auth: ClientSessionGenerator,
|
hass_client_no_auth: ClientSessionGenerator,
|
||||||
aioclient_mock: AiohttpClientMocker,
|
aioclient_mock: AiohttpClientMocker,
|
||||||
expires_in_dict: dict[str, str],
|
expires_in_dict: dict[str, str],
|
||||||
@ -239,8 +252,8 @@ async def test_abort_if_oauth_error(
|
|||||||
@pytest.mark.usefixtures("current_request_with_host")
|
@pytest.mark.usefixtures("current_request_with_host")
|
||||||
async def test_abort_if_oauth_rejected(
|
async def test_abort_if_oauth_rejected(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
flow_handler,
|
flow_handler: type[config_entry_oauth2_flow.AbstractOAuth2FlowHandler],
|
||||||
local_impl,
|
local_impl: config_entry_oauth2_flow.LocalOAuth2Implementation,
|
||||||
hass_client_no_auth: ClientSessionGenerator,
|
hass_client_no_auth: ClientSessionGenerator,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Check bad oauth token."""
|
"""Check bad oauth token."""
|
||||||
@ -293,8 +306,8 @@ async def test_abort_if_oauth_rejected(
|
|||||||
@pytest.mark.usefixtures("current_request_with_host")
|
@pytest.mark.usefixtures("current_request_with_host")
|
||||||
async def test_abort_on_oauth_timeout_error(
|
async def test_abort_on_oauth_timeout_error(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
flow_handler,
|
flow_handler: type[config_entry_oauth2_flow.AbstractOAuth2FlowHandler],
|
||||||
local_impl,
|
local_impl: config_entry_oauth2_flow.LocalOAuth2Implementation,
|
||||||
hass_client_no_auth: ClientSessionGenerator,
|
hass_client_no_auth: ClientSessionGenerator,
|
||||||
aioclient_mock: AiohttpClientMocker,
|
aioclient_mock: AiohttpClientMocker,
|
||||||
) -> None:
|
) -> None:
|
||||||
@ -346,7 +359,11 @@ async def test_abort_on_oauth_timeout_error(
|
|||||||
assert result["reason"] == "oauth_timeout"
|
assert result["reason"] == "oauth_timeout"
|
||||||
|
|
||||||
|
|
||||||
async def test_step_discovery(hass: HomeAssistant, flow_handler, local_impl) -> None:
|
async def test_step_discovery(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
flow_handler: type[config_entry_oauth2_flow.AbstractOAuth2FlowHandler],
|
||||||
|
local_impl: config_entry_oauth2_flow.LocalOAuth2Implementation,
|
||||||
|
) -> None:
|
||||||
"""Check flow triggers from discovery."""
|
"""Check flow triggers from discovery."""
|
||||||
flow_handler.async_register_implementation(hass, local_impl)
|
flow_handler.async_register_implementation(hass, local_impl)
|
||||||
config_entry_oauth2_flow.async_register_implementation(
|
config_entry_oauth2_flow.async_register_implementation(
|
||||||
@ -364,7 +381,9 @@ async def test_step_discovery(hass: HomeAssistant, flow_handler, local_impl) ->
|
|||||||
|
|
||||||
|
|
||||||
async def test_abort_discovered_multiple(
|
async def test_abort_discovered_multiple(
|
||||||
hass: HomeAssistant, flow_handler, local_impl
|
hass: HomeAssistant,
|
||||||
|
flow_handler: type[config_entry_oauth2_flow.AbstractOAuth2FlowHandler],
|
||||||
|
local_impl: config_entry_oauth2_flow.LocalOAuth2Implementation,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test if aborts when discovered multiple times."""
|
"""Test if aborts when discovered multiple times."""
|
||||||
flow_handler.async_register_implementation(hass, local_impl)
|
flow_handler.async_register_implementation(hass, local_impl)
|
||||||
@ -427,8 +446,8 @@ async def test_abort_discovered_multiple(
|
|||||||
@pytest.mark.usefixtures("current_request_with_host")
|
@pytest.mark.usefixtures("current_request_with_host")
|
||||||
async def test_abort_if_oauth_token_error(
|
async def test_abort_if_oauth_token_error(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
flow_handler,
|
flow_handler: type[config_entry_oauth2_flow.AbstractOAuth2FlowHandler],
|
||||||
local_impl,
|
local_impl: config_entry_oauth2_flow.LocalOAuth2Implementation,
|
||||||
hass_client_no_auth: ClientSessionGenerator,
|
hass_client_no_auth: ClientSessionGenerator,
|
||||||
aioclient_mock: AiohttpClientMocker,
|
aioclient_mock: AiohttpClientMocker,
|
||||||
status_code: HTTPStatus,
|
status_code: HTTPStatus,
|
||||||
@ -491,8 +510,8 @@ async def test_abort_if_oauth_token_error(
|
|||||||
@pytest.mark.usefixtures("current_request_with_host")
|
@pytest.mark.usefixtures("current_request_with_host")
|
||||||
async def test_abort_if_oauth_token_closing_error(
|
async def test_abort_if_oauth_token_closing_error(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
flow_handler,
|
flow_handler: type[config_entry_oauth2_flow.AbstractOAuth2FlowHandler],
|
||||||
local_impl,
|
local_impl: config_entry_oauth2_flow.LocalOAuth2Implementation,
|
||||||
hass_client_no_auth: ClientSessionGenerator,
|
hass_client_no_auth: ClientSessionGenerator,
|
||||||
aioclient_mock: AiohttpClientMocker,
|
aioclient_mock: AiohttpClientMocker,
|
||||||
caplog: pytest.LogCaptureFixture,
|
caplog: pytest.LogCaptureFixture,
|
||||||
@ -550,7 +569,9 @@ async def test_abort_if_oauth_token_closing_error(
|
|||||||
|
|
||||||
|
|
||||||
async def test_abort_discovered_existing_entries(
|
async def test_abort_discovered_existing_entries(
|
||||||
hass: HomeAssistant, flow_handler, local_impl
|
hass: HomeAssistant,
|
||||||
|
flow_handler: type[config_entry_oauth2_flow.AbstractOAuth2FlowHandler],
|
||||||
|
local_impl: config_entry_oauth2_flow.LocalOAuth2Implementation,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test if abort discovery when entries exists."""
|
"""Test if abort discovery when entries exists."""
|
||||||
flow_handler.async_register_implementation(hass, local_impl)
|
flow_handler.async_register_implementation(hass, local_impl)
|
||||||
@ -577,8 +598,8 @@ async def test_abort_discovered_existing_entries(
|
|||||||
@pytest.mark.usefixtures("current_request_with_host")
|
@pytest.mark.usefixtures("current_request_with_host")
|
||||||
async def test_full_flow(
|
async def test_full_flow(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
flow_handler,
|
flow_handler: type[config_entry_oauth2_flow.AbstractOAuth2FlowHandler],
|
||||||
local_impl,
|
local_impl: config_entry_oauth2_flow.LocalOAuth2Implementation,
|
||||||
hass_client_no_auth: ClientSessionGenerator,
|
hass_client_no_auth: ClientSessionGenerator,
|
||||||
aioclient_mock: AiohttpClientMocker,
|
aioclient_mock: AiohttpClientMocker,
|
||||||
) -> None:
|
) -> None:
|
||||||
@ -653,7 +674,9 @@ async def test_full_flow(
|
|||||||
|
|
||||||
|
|
||||||
async def test_local_refresh_token(
|
async def test_local_refresh_token(
|
||||||
hass: HomeAssistant, local_impl, aioclient_mock: AiohttpClientMocker
|
hass: HomeAssistant,
|
||||||
|
local_impl: config_entry_oauth2_flow.LocalOAuth2Implementation,
|
||||||
|
aioclient_mock: AiohttpClientMocker,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test we can refresh token."""
|
"""Test we can refresh token."""
|
||||||
aioclient_mock.post(
|
aioclient_mock.post(
|
||||||
@ -687,7 +710,10 @@ async def test_local_refresh_token(
|
|||||||
|
|
||||||
|
|
||||||
async def test_oauth_session(
|
async def test_oauth_session(
|
||||||
hass: HomeAssistant, flow_handler, local_impl, aioclient_mock: AiohttpClientMocker
|
hass: HomeAssistant,
|
||||||
|
flow_handler: type[config_entry_oauth2_flow.AbstractOAuth2FlowHandler],
|
||||||
|
local_impl: config_entry_oauth2_flow.LocalOAuth2Implementation,
|
||||||
|
aioclient_mock: AiohttpClientMocker,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test the OAuth2 session helper."""
|
"""Test the OAuth2 session helper."""
|
||||||
flow_handler.async_register_implementation(hass, local_impl)
|
flow_handler.async_register_implementation(hass, local_impl)
|
||||||
@ -734,7 +760,10 @@ async def test_oauth_session(
|
|||||||
|
|
||||||
|
|
||||||
async def test_oauth_session_with_clock_slightly_out_of_sync(
|
async def test_oauth_session_with_clock_slightly_out_of_sync(
|
||||||
hass: HomeAssistant, flow_handler, local_impl, aioclient_mock: AiohttpClientMocker
|
hass: HomeAssistant,
|
||||||
|
flow_handler: type[config_entry_oauth2_flow.AbstractOAuth2FlowHandler],
|
||||||
|
local_impl: config_entry_oauth2_flow.LocalOAuth2Implementation,
|
||||||
|
aioclient_mock: AiohttpClientMocker,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test the OAuth2 session helper when the remote clock is slightly out of sync."""
|
"""Test the OAuth2 session helper when the remote clock is slightly out of sync."""
|
||||||
flow_handler.async_register_implementation(hass, local_impl)
|
flow_handler.async_register_implementation(hass, local_impl)
|
||||||
@ -781,7 +810,10 @@ async def test_oauth_session_with_clock_slightly_out_of_sync(
|
|||||||
|
|
||||||
|
|
||||||
async def test_oauth_session_no_token_refresh_needed(
|
async def test_oauth_session_no_token_refresh_needed(
|
||||||
hass: HomeAssistant, flow_handler, local_impl, aioclient_mock: AiohttpClientMocker
|
hass: HomeAssistant,
|
||||||
|
flow_handler: type[config_entry_oauth2_flow.AbstractOAuth2FlowHandler],
|
||||||
|
local_impl: config_entry_oauth2_flow.LocalOAuth2Implementation,
|
||||||
|
aioclient_mock: AiohttpClientMocker,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test the OAuth2 session helper when no refresh is needed."""
|
"""Test the OAuth2 session helper when no refresh is needed."""
|
||||||
flow_handler.async_register_implementation(hass, local_impl)
|
flow_handler.async_register_implementation(hass, local_impl)
|
||||||
@ -879,7 +911,10 @@ async def test_implementation_provider(hass: HomeAssistant, local_impl) -> None:
|
|||||||
|
|
||||||
|
|
||||||
async def test_oauth_session_refresh_failure(
|
async def test_oauth_session_refresh_failure(
|
||||||
hass: HomeAssistant, flow_handler, local_impl, aioclient_mock: AiohttpClientMocker
|
hass: HomeAssistant,
|
||||||
|
flow_handler: type[config_entry_oauth2_flow.AbstractOAuth2FlowHandler],
|
||||||
|
local_impl: config_entry_oauth2_flow.LocalOAuth2Implementation,
|
||||||
|
aioclient_mock: AiohttpClientMocker,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test the OAuth2 session helper when no refresh is needed."""
|
"""Test the OAuth2 session helper when no refresh is needed."""
|
||||||
flow_handler.async_register_implementation(hass, local_impl)
|
flow_handler.async_register_implementation(hass, local_impl)
|
||||||
@ -908,7 +943,8 @@ async def test_oauth_session_refresh_failure(
|
|||||||
|
|
||||||
|
|
||||||
async def test_oauth2_without_secret_init(
|
async def test_oauth2_without_secret_init(
|
||||||
local_impl, hass_client_no_auth: ClientSessionGenerator
|
local_impl: config_entry_oauth2_flow.LocalOAuth2Implementation,
|
||||||
|
hass_client_no_auth: ClientSessionGenerator,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Check authorize callback without secret initalizated."""
|
"""Check authorize callback without secret initalizated."""
|
||||||
client = await hass_client_no_auth()
|
client = await hass_client_no_auth()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user