mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 19:27:45 +00:00
Fail tests which JSON serialize mocks (#144261)
* Fail tests which JSON serialize mocks * Patch JSON helper earlier * Check type instead of attribute
This commit is contained in:
parent
8a95fffbab
commit
36a08d04c5
@ -42,11 +42,14 @@ import respx
|
|||||||
from syrupy.assertion import SnapshotAssertion
|
from syrupy.assertion import SnapshotAssertion
|
||||||
from syrupy.session import SnapshotSession
|
from syrupy.session import SnapshotSession
|
||||||
|
|
||||||
|
# Setup patching of JSON functions before any other Home Assistant imports
|
||||||
|
from . import patch_json # isort:skip
|
||||||
|
|
||||||
from homeassistant import block_async_io
|
from homeassistant import block_async_io
|
||||||
from homeassistant.exceptions import ServiceNotFound
|
from homeassistant.exceptions import ServiceNotFound
|
||||||
|
|
||||||
# Setup patching of recorder functions before any other Home Assistant imports
|
# Setup patching of recorder functions before any other Home Assistant imports
|
||||||
from . import patch_recorder
|
from . import patch_recorder # isort:skip
|
||||||
|
|
||||||
# Setup patching of dt_util time functions before any other Home Assistant imports
|
# Setup patching of dt_util time functions before any other Home Assistant imports
|
||||||
from . import patch_time # noqa: F401, isort:skip
|
from . import patch_time # noqa: F401, isort:skip
|
||||||
@ -449,6 +452,12 @@ def reset_globals() -> Generator[None]:
|
|||||||
frame.async_setup(None)
|
frame.async_setup(None)
|
||||||
frame._REPORTED_INTEGRATIONS.clear()
|
frame._REPORTED_INTEGRATIONS.clear()
|
||||||
|
|
||||||
|
# Reset patch_json
|
||||||
|
if patch_json.mock_objects:
|
||||||
|
obj = patch_json.mock_objects.pop()
|
||||||
|
patch_json.mock_objects.clear()
|
||||||
|
pytest.fail(f"Test attempted to serialize mock object {obj}")
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(autouse=True, scope="session")
|
@pytest.fixture(autouse=True, scope="session")
|
||||||
def bcrypt_cost() -> Generator[None]:
|
def bcrypt_cost() -> Generator[None]:
|
||||||
|
37
tests/patch_json.py
Normal file
37
tests/patch_json.py
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
"""Patch JSON related functions."""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import functools
|
||||||
|
from typing import Any
|
||||||
|
from unittest import mock
|
||||||
|
|
||||||
|
import orjson
|
||||||
|
|
||||||
|
from homeassistant.helpers import json as json_helper
|
||||||
|
|
||||||
|
real_json_encoder_default = json_helper.json_encoder_default
|
||||||
|
|
||||||
|
mock_objects = []
|
||||||
|
|
||||||
|
|
||||||
|
def json_encoder_default(obj: Any) -> Any:
|
||||||
|
"""Convert Home Assistant objects.
|
||||||
|
|
||||||
|
Hand other objects to the original method.
|
||||||
|
"""
|
||||||
|
if isinstance(obj, mock.Base):
|
||||||
|
mock_objects.append(obj)
|
||||||
|
raise TypeError(f"Attempting to serialize mock object {obj}")
|
||||||
|
return real_json_encoder_default(obj)
|
||||||
|
|
||||||
|
|
||||||
|
json_helper.json_encoder_default = json_encoder_default
|
||||||
|
json_helper.json_bytes = functools.partial(
|
||||||
|
orjson.dumps, option=orjson.OPT_NON_STR_KEYS, default=json_encoder_default
|
||||||
|
)
|
||||||
|
json_helper.json_bytes_sorted = functools.partial(
|
||||||
|
orjson.dumps,
|
||||||
|
option=orjson.OPT_NON_STR_KEYS | orjson.OPT_SORT_KEYS,
|
||||||
|
default=json_encoder_default,
|
||||||
|
)
|
Loading…
x
Reference in New Issue
Block a user