Files
core/tests/components/config/conftest.py
T
J. Nick Koston 3f9dbd3e25 Fix config modules being imported in the event loop (#112462)
* Fix config modules being imported in the event loop

There was a late import in this integration because of the circular import.

The code has been rearranged to avoid the circular imports

* fixes

* fixes

* fix patching

* make eager

* remove unrelated change from this branch
2024-03-05 21:18:57 -05:00

74 lines
2.2 KiB
Python

"""Test fixtures for the config integration."""
from contextlib import contextmanager
from copy import deepcopy
import json
import logging
from os.path import basename
from unittest.mock import patch
import pytest
from homeassistant.core import HomeAssistant
from tests.common import raise_contains_mocks
_LOGGER = logging.getLogger(__name__)
@contextmanager
def mock_config_store(data=None):
"""Mock config yaml store.
Data is a dict {'key': {'version': version, 'data': data}}
Written data will be converted to JSON to ensure JSON parsing works.
"""
if data is None:
data = {}
def mock_read(path):
"""Mock version of load."""
file_name = basename(path)
_LOGGER.info("Reading data from %s: %s", file_name, data.get(file_name))
return deepcopy(data.get(file_name))
def mock_write(path, data_to_write):
"""Mock version of write."""
file_name = basename(path)
_LOGGER.info("Writing data to %s: %s", file_name, data_to_write)
raise_contains_mocks(data_to_write)
# To ensure that the data can be serialized
data[file_name] = json.loads(json.dumps(data_to_write))
async def mock_async_hass_config_yaml(hass: HomeAssistant) -> dict:
"""Mock version of async_hass_config_yaml."""
result = {}
# Return a configuration.yaml with "automation" mapped to the contents of
# automations.yaml and so on.
for key, value in data.items():
result[key.partition(".")[0][0:-1]] = deepcopy(value)
_LOGGER.info("Reading data from configuration.yaml: %s", result)
return result
with patch(
"homeassistant.components.config.view._read",
side_effect=mock_read,
autospec=True,
), patch(
"homeassistant.components.config.view._write",
side_effect=mock_write,
autospec=True,
), patch(
"homeassistant.config.async_hass_config_yaml",
side_effect=mock_async_hass_config_yaml,
autospec=True,
):
yield data
@pytest.fixture
def hass_config_store():
"""Fixture to mock config yaml store."""
with mock_config_store() as stored_data:
yield stored_data