core/tests/components/p1_monitor/conftest.py

69 lines
2.0 KiB
Python

"""Fixtures for P1 Monitor integration tests."""
import json
from unittest.mock import AsyncMock, MagicMock, patch
from p1monitor import Phases, Settings, SmartMeter, WaterMeter
import pytest
from homeassistant.components.p1_monitor.const import DOMAIN
from homeassistant.const import CONF_HOST, CONF_PORT
from homeassistant.core import HomeAssistant
from tests.common import MockConfigEntry, load_fixture
@pytest.fixture
def mock_config_entry() -> MockConfigEntry:
"""Return the default mocked config entry."""
return MockConfigEntry(
title="monitor",
domain=DOMAIN,
data={CONF_HOST: "example", CONF_PORT: 80},
unique_id="unique_thingy",
version=2,
)
@pytest.fixture
def mock_p1monitor():
"""Return a mocked P1 Monitor client."""
with patch(
"homeassistant.components.p1_monitor.coordinator.P1Monitor"
) as p1monitor_mock:
client = p1monitor_mock.return_value
client.smartmeter = AsyncMock(
return_value=SmartMeter.from_dict(
json.loads(load_fixture("p1_monitor/smartmeter.json"))
)
)
client.phases = AsyncMock(
return_value=Phases.from_dict(
json.loads(load_fixture("p1_monitor/phases.json"))
)
)
client.settings = AsyncMock(
return_value=Settings.from_dict(
json.loads(load_fixture("p1_monitor/settings.json"))
)
)
client.watermeter = AsyncMock(
return_value=WaterMeter.from_dict(
json.loads(load_fixture("p1_monitor/watermeter.json"))
)
)
yield client
@pytest.fixture
async def init_integration(
hass: HomeAssistant, mock_config_entry: MockConfigEntry, mock_p1monitor: MagicMock
) -> MockConfigEntry:
"""Set up the P1 Monitor integration for testing."""
mock_config_entry.add_to_hass(hass)
await hass.config_entries.async_setup(mock_config_entry.entry_id)
await hass.async_block_till_done()
return mock_config_entry