58 lines
2.0 KiB
Python
58 lines
2.0 KiB
Python
"""Shared pytest fixtures for the NestQuest test suite.
|
|
|
|
pytest-homeassistant-custom-component could not be adopted: it pins
|
|
``pytest==9.0.3`` and ``voluptuous==0.13.1``, which conflicts with the dev
|
|
group's ``voluptuous>=0.14`` (used directly by the options flow's schema and
|
|
its tests), and its back-releases raise the floor to Python >=3.12 while this
|
|
project supports >=3.11. The documented fallback is therefore used:
|
|
``pytest-asyncio`` plus a standard-shaped ``hass`` fixture below.
|
|
|
|
The tests mock the ``homeassistant`` package via ``sys.modules`` injection;
|
|
this conftest wires the mock modules before any test module import and
|
|
provides the standard ``hass`` fixture shape (``config``, ``config_entries``,
|
|
``data``, ``loop``) that HA's own harness exposes.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import asyncio
|
|
import sys
|
|
from types import SimpleNamespace
|
|
from unittest.mock import MagicMock
|
|
|
|
import pytest
|
|
|
|
# Mock homeassistant modules if not installed in the environment. Runs in
|
|
# conftest so it precedes every test module's import of the integration.
|
|
for _mod in (
|
|
"homeassistant",
|
|
"homeassistant.core",
|
|
"homeassistant.config_entries",
|
|
"homeassistant.data_entry_flow",
|
|
):
|
|
sys.modules.setdefault(_mod, MagicMock())
|
|
|
|
# Wire parent package attributes so "from homeassistant import config_entries"
|
|
# resolves to the mocked submodule, mirroring real HA's package layout.
|
|
sys.modules["homeassistant"].config_entries = sys.modules["homeassistant.config_entries"]
|
|
sys.modules["homeassistant"].data_entry_flow = sys.modules["homeassistant.data_entry_flow"]
|
|
|
|
|
|
@pytest.fixture
|
|
def hass():
|
|
"""Provide a standard-shaped hass fixture.
|
|
|
|
Mirrors the surface of Home Assistant's ``hass`` fixture: a ``config``
|
|
namespace, a ``config_entries`` manager, a ``data`` dict for integration
|
|
state, and the running event ``loop``.
|
|
"""
|
|
hass = SimpleNamespace(
|
|
data={},
|
|
config=MagicMock(),
|
|
config_entries=MagicMock(),
|
|
)
|
|
hass.loop = asyncio.new_event_loop()
|
|
try:
|
|
yield hass
|
|
finally:
|
|
hass.loop.close() |