diff --git a/tests/conftest.py b/tests/conftest.py index 777b2073847..1e70ad48065 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -487,6 +487,8 @@ def aiohttp_client( if isinstance(__param, Application): server_kwargs = server_kwargs or {} server = TestServer(__param, loop=loop, **server_kwargs) + # Registering a view after starting the server should still work. + server.app._router.freeze = lambda: None client = CoalescingClient(server, loop=loop, **kwargs) elif isinstance(__param, BaseTestServer): client = TestClient(__param, loop=loop, **kwargs) diff --git a/tests/test_test_fixtures.py b/tests/test_test_fixtures.py index 1c0fe0a7eaa..eb2103d4272 100644 --- a/tests/test_test_fixtures.py +++ b/tests/test_test_fixtures.py @@ -1,10 +1,16 @@ """Test test fixture configuration.""" +from http import HTTPStatus import socket +from aiohttp import web import pytest import pytest_socket +from homeassistant.components.http import HomeAssistantView from homeassistant.core import HomeAssistant, async_get_hass +from homeassistant.setup import async_setup_component + +from .typing import ClientSessionGenerator def test_sockets_disabled() -> None: @@ -27,3 +33,38 @@ async def test_hass_cv(hass: HomeAssistant) -> None: in the fixture and that async_get_hass() works correctly. """ assert async_get_hass() is hass + + +def register_view(hass: HomeAssistant) -> None: + """Register a view.""" + + class TestView(HomeAssistantView): + """Test view to serve the test.""" + + requires_auth = False + url = "/api/test" + name = "api:test" + + async def get(self, request: web.Request) -> web.Response: + """Return a test result.""" + return self.json({"test": True}) + + hass.http.register_view(TestView()) + + +async def test_aiohttp_client_frozen_router_view( + hass: HomeAssistant, + hass_client: ClientSessionGenerator, +) -> None: + """Test aiohttp_client fixture patches frozen router for views.""" + assert await async_setup_component(hass, "http", {}) + await hass.async_block_till_done() + + # Registering the view after starting the server should still work. + client = await hass_client() + register_view(hass) + + response = await client.get("/api/test") + assert response.status == HTTPStatus.OK + result = await response.json() + assert result["test"] is True