Add AiohttpClientMocker type hints in tests (#118373)

This commit is contained in:
epenet 2024-05-29 14:38:46 +02:00 committed by GitHub
parent d69431ea48
commit d10362e226
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 41 additions and 19 deletions

View File

@ -7,10 +7,11 @@ import pytest
from homeassistant.const import CONTENT_TYPE_JSON from homeassistant.const import CONTENT_TYPE_JSON
from tests.common import load_fixture from tests.common import load_fixture
from tests.test_util.aiohttp import AiohttpClientMocker
@pytest.fixture @pytest.fixture
def aioclient_mock_fixture(aioclient_mock) -> None: def aioclient_mock_fixture(aioclient_mock: AiohttpClientMocker) -> None:
"""Fixture to provide a aioclient mocker.""" """Fixture to provide a aioclient mocker."""
aioclient_mock.get( aioclient_mock.get(
"http://1.1.1.1:8080/status.json?show_avail=1", "http://1.1.1.1:8080/status.json?show_avail=1",

View File

@ -175,7 +175,7 @@ class OAuthFixture:
async def oauth_fixture( async def oauth_fixture(
hass: HomeAssistant, hass: HomeAssistant,
hass_client_no_auth: ClientSessionGenerator, hass_client_no_auth: ClientSessionGenerator,
aioclient_mock: Any, aioclient_mock: AiohttpClientMocker,
) -> OAuthFixture: ) -> OAuthFixture:
"""Fixture for testing the OAuth flow.""" """Fixture for testing the OAuth flow."""
return OAuthFixture(hass, hass_client_no_auth, aioclient_mock) return OAuthFixture(hass, hass_client_no_auth, aioclient_mock)

View File

@ -33,7 +33,7 @@ async def async_set_txt(hass, txt):
@pytest.fixture @pytest.fixture
def setup_duckdns(hass, aioclient_mock): def setup_duckdns(hass: HomeAssistant, aioclient_mock: AiohttpClientMocker) -> None:
"""Fixture that sets up DuckDNS.""" """Fixture that sets up DuckDNS."""
aioclient_mock.get( aioclient_mock.get(
duckdns.UPDATE_URL, params={"domains": DOMAIN, "token": TOKEN}, text="OK" duckdns.UPDATE_URL, params={"domains": DOMAIN, "token": TOKEN}, text="OK"

View File

@ -12,6 +12,7 @@ from homeassistant.const import CONF_PASSWORD, CONF_USERNAME, CONTENT_TYPE_JSON
from .common import TEST_EMAIL_ADDRESS, TEST_PASSWORD, TEST_TOKEN, TEST_USER_ID from .common import TEST_EMAIL_ADDRESS, TEST_PASSWORD, TEST_TOKEN, TEST_USER_ID
from tests.common import MockConfigEntry, load_fixture from tests.common import MockConfigEntry, load_fixture
from tests.test_util.aiohttp import AiohttpClientMocker
@pytest.fixture @pytest.fixture
@ -25,7 +26,7 @@ def config_entry(hass):
@pytest.fixture @pytest.fixture
def aioclient_mock_fixture(aioclient_mock): def aioclient_mock_fixture(aioclient_mock: AiohttpClientMocker) -> None:
"""Fixture to provide a aioclient mocker.""" """Fixture to provide a aioclient mocker."""
now = round(time.time()) now = round(time.time())
# Mocks the login response for flo. # Mocks the login response for flo.

View File

@ -16,7 +16,7 @@ UPDATE_URL = freedns.UPDATE_URL
@pytest.fixture @pytest.fixture
def setup_freedns(hass, aioclient_mock): def setup_freedns(hass: HomeAssistant, aioclient_mock: AiohttpClientMocker) -> None:
"""Fixture that sets up FreeDNS.""" """Fixture that sets up FreeDNS."""
params = {} params = {}
params[ACCESS_TOKEN] = "" params[ACCESS_TOKEN] = ""

View File

@ -20,7 +20,9 @@ UPDATE_URL = f"https://{USERNAME}:{PASSWORD}@domains.google.com/nic/update"
@pytest.fixture @pytest.fixture
def setup_google_domains(hass, aioclient_mock): def setup_google_domains(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Fixture that sets up NamecheapDNS.""" """Fixture that sets up NamecheapDNS."""
aioclient_mock.get(UPDATE_URL, params={"hostname": DOMAIN}, text="ok 0.0.0.0") aioclient_mock.get(UPDATE_URL, params={"hostname": DOMAIN}, text="ok 0.0.0.0")

View File

@ -17,6 +17,7 @@ from homeassistant.const import ATTR_NAME
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from tests.common import MockConfigEntry, async_capture_events from tests.common import MockConfigEntry, async_capture_events
from tests.test_util.aiohttp import AiohttpClientMocker
TEST_API_CALL_ARGS = {"text": "Use API from Home Assistant", "type": "todo"} TEST_API_CALL_ARGS = {"text": "Use API from Home Assistant", "type": "todo"}
TEST_USER_NAME = "test_user" TEST_USER_NAME = "test_user"
@ -45,7 +46,7 @@ def habitica_entry(hass):
@pytest.fixture @pytest.fixture
def common_requests(aioclient_mock): def common_requests(aioclient_mock: AiohttpClientMocker) -> AiohttpClientMocker:
"""Register requests for the tests.""" """Register requests for the tests."""
aioclient_mock.get( aioclient_mock.get(
"https://habitica.com/api/v3/user", "https://habitica.com/api/v3/user",

View File

@ -7,13 +7,14 @@ from unittest.mock import Mock, patch
import pytest import pytest
from homeassistant.components.hassio.handler import HassIO, HassioAPIError from homeassistant.components.hassio.handler import HassIO, HassioAPIError
from homeassistant.core import CoreState from homeassistant.core import CoreState, HomeAssistant
from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.aiohttp_client import async_get_clientsession
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from . import SUPERVISOR_TOKEN from . import SUPERVISOR_TOKEN
from tests.test_util.aiohttp import AiohttpClientMocker from tests.test_util.aiohttp import AiohttpClientMocker
from tests.typing import ClientSessionGenerator
@pytest.fixture(autouse=True) @pytest.fixture(autouse=True)
@ -45,7 +46,12 @@ def hassio_env():
@pytest.fixture @pytest.fixture
def hassio_stubs(hassio_env, hass, hass_client, aioclient_mock): def hassio_stubs(
hassio_env,
hass: HomeAssistant,
hass_client: ClientSessionGenerator,
aioclient_mock: AiohttpClientMocker,
):
"""Create mock hassio http client.""" """Create mock hassio http client."""
with ( with (
patch( patch(
@ -100,7 +106,7 @@ async def hassio_client_supervisor(hass, aiohttp_client, hassio_stubs):
@pytest.fixture @pytest.fixture
async def hassio_handler(hass, aioclient_mock): async def hassio_handler(hass: HomeAssistant, aioclient_mock: AiohttpClientMocker):
"""Create mock hassio handler.""" """Create mock hassio handler."""
with patch.dict(os.environ, {"SUPERVISOR_TOKEN": SUPERVISOR_TOKEN}): with patch.dict(os.environ, {"SUPERVISOR_TOKEN": SUPERVISOR_TOKEN}):
yield HassIO(hass.loop, async_get_clientsession(hass), "127.0.0.1") yield HassIO(hass.loop, async_get_clientsession(hass), "127.0.0.1")
@ -109,7 +115,7 @@ async def hassio_handler(hass, aioclient_mock):
@pytest.fixture @pytest.fixture
def all_setup_requests( def all_setup_requests(
aioclient_mock: AiohttpClientMocker, request: pytest.FixtureRequest aioclient_mock: AiohttpClientMocker, request: pytest.FixtureRequest
): ) -> None:
"""Mock all setup requests.""" """Mock all setup requests."""
include_addons = hasattr(request, "param") and request.param.get( include_addons = hasattr(request, "param") and request.param.get(
"include_addons", False "include_addons", False

View File

@ -10,13 +10,15 @@ from homeassistant.core import HomeAssistant
from homeassistant.exceptions import HomeAssistantError from homeassistant.exceptions import HomeAssistantError
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from tests.common import MockConfigEntry from tests.common import MockConfigEntry, MockUser
from tests.test_util.aiohttp import AiohttpClientMocker from tests.test_util.aiohttp import AiohttpClientMocker
from tests.typing import WebSocketGenerator from tests.typing import WebSocketGenerator
@pytest.fixture @pytest.fixture
async def setup_push_receiver(hass, aioclient_mock, hass_admin_user): async def setup_push_receiver(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker, hass_admin_user: MockUser
) -> None:
"""Fixture that sets up a mocked push receiver.""" """Fixture that sets up a mocked push receiver."""
push_url = "https://mobile-push.home-assistant.dev/push" push_url = "https://mobile-push.home-assistant.dev/push"

View File

@ -24,9 +24,9 @@ CURRENT_SCOPE = "WRITESYSTEM READSYSTEM offline_access"
async def test_full_flow( async def test_full_flow(
hass: HomeAssistant, hass: HomeAssistant,
hass_client_no_auth, hass_client_no_auth: ClientSessionGenerator,
aioclient_mock, aioclient_mock: AiohttpClientMocker,
current_request_with_host, current_request_with_host: None,
setup_credentials, setup_credentials,
) -> None: ) -> None:
"""Check full flow.""" """Check full flow."""

View File

@ -18,7 +18,9 @@ PASSWORD = "abcdefgh"
@pytest.fixture @pytest.fixture
def setup_namecheapdns(hass, aioclient_mock): def setup_namecheapdns(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Fixture that sets up NamecheapDNS.""" """Fixture that sets up NamecheapDNS."""
aioclient_mock.get( aioclient_mock.get(
namecheapdns.UPDATE_URL, namecheapdns.UPDATE_URL,

View File

@ -35,6 +35,8 @@ from .common import (
) )
from tests.common import MockConfigEntry from tests.common import MockConfigEntry
from tests.test_util.aiohttp import AiohttpClientMocker
from tests.typing import ClientSessionGenerator
WEB_REDIRECT_URL = "https://example.com/auth/external/callback" WEB_REDIRECT_URL = "https://example.com/auth/external/callback"
APP_REDIRECT_URL = "urn:ietf:wg:oauth:2.0:oob" APP_REDIRECT_URL = "urn:ietf:wg:oauth:2.0:oob"
@ -189,7 +191,12 @@ class OAuthFixture:
@pytest.fixture @pytest.fixture
async def oauth(hass, hass_client_no_auth, aioclient_mock, current_request_with_host): async def oauth(
hass: HomeAssistant,
hass_client_no_auth: ClientSessionGenerator,
aioclient_mock: AiohttpClientMocker,
current_request_with_host: None,
) -> OAuthFixture:
"""Create the simulated oauth flow.""" """Create the simulated oauth flow."""
return OAuthFixture(hass, hass_client_no_auth, aioclient_mock) return OAuthFixture(hass, hass_client_no_auth, aioclient_mock)

View File

@ -22,7 +22,7 @@ USERNAME = "abc@123.com"
@pytest.fixture @pytest.fixture
def setup_no_ip(hass, aioclient_mock): def setup_no_ip(hass: HomeAssistant, aioclient_mock: AiohttpClientMocker) -> None:
"""Fixture that sets up NO-IP.""" """Fixture that sets up NO-IP."""
aioclient_mock.get(UPDATE_URL, params={"hostname": DOMAIN}, text="good 0.0.0.0") aioclient_mock.get(UPDATE_URL, params={"hostname": DOMAIN}, text="good 0.0.0.0")