|
1 | 1 | import asyncio |
2 | 2 | from collections.abc import Generator |
3 | 3 | from functools import lru_cache |
| 4 | +import inspect |
4 | 5 | import json |
5 | 6 | import logging |
6 | 7 | import os |
7 | 8 | import shutil |
8 | 9 | from typing import Any, Protocol, cast |
9 | | -from unittest.mock import AsyncMock, patch |
| 10 | +from unittest.mock import AsyncMock, Mock, patch |
10 | 11 | import uuid |
11 | 12 |
|
12 | 13 | from _pytest.fixtures import SubRequest |
| 14 | +import aiohttp |
| 15 | +import aioresponses.core |
13 | 16 | from homeassistant import loader |
14 | 17 | from homeassistant.const import CONF_ENTITY_ID |
15 | 18 | from homeassistant.core import HomeAssistant |
|
30 | 33 | from custom_components.powercalc.helpers import get_library_json_path, get_library_path |
31 | 34 | from tests.common import get_test_config_dir, mock_device |
32 | 35 |
|
| 36 | +# Remove this once aioresponses supports aiohttp 3.14+. |
| 37 | +# See https://github.com/pnuckowski/aioresponses/issues/289. |
| 38 | +_client_response_init = aiohttp.ClientResponse.__init__ |
| 39 | +if "stream_writer" in inspect.signature(_client_response_init).parameters: |
| 40 | + _client_response_init_any = cast(Any, _client_response_init) |
| 41 | + |
| 42 | + def _patched_client_response_init(self: aiohttp.ClientResponse, *args: object, **kwargs: object) -> None: |
| 43 | + kwargs.setdefault("stream_writer", Mock(output_size=0)) |
| 44 | + _client_response_init_any(self, *args, **kwargs) |
| 45 | + |
| 46 | + aiohttp.ClientResponse.__init__ = _patched_client_response_init # type: ignore[method-assign] |
| 47 | + |
| 48 | + def _patched_stream_reader_factory(loop: asyncio.AbstractEventLoop | None = None) -> aiohttp.StreamReader: |
| 49 | + return aiohttp.StreamReader(Mock(), limit=2**16, loop=loop) |
| 50 | + |
| 51 | + aioresponses.core.stream_reader_factory = _patched_stream_reader_factory |
| 52 | + |
33 | 53 |
|
34 | 54 | @lru_cache(maxsize=1) |
35 | 55 | def _load_test_library_json() -> dict[str, Any]: |
|
0 commit comments