core/tests/components/sense/conftest.py

85 lines
2.5 KiB
Python

"""Common methods for Sense."""
from __future__ import annotations
from collections.abc import Generator
import datetime
from unittest.mock import AsyncMock, MagicMock, PropertyMock, patch
import pytest
from sense_energy import Scale
from homeassistant.components.sense.binary_sensor import SenseDevice
from homeassistant.components.sense.const import DOMAIN
from .const import (
DEVICE_1_DAY_ENERGY,
DEVICE_1_ID,
DEVICE_1_NAME,
DEVICE_1_POWER,
DEVICE_2_DAY_ENERGY,
DEVICE_2_ID,
DEVICE_2_NAME,
DEVICE_2_POWER,
MOCK_CONFIG,
MONITOR_ID,
)
from tests.common import MockConfigEntry
@pytest.fixture
def mock_setup_entry() -> Generator[AsyncMock]:
"""Override async_setup_entry."""
with patch(
"homeassistant.components.sense.async_setup_entry", return_value=True
) as mock_setup_entry:
yield mock_setup_entry
@pytest.fixture
def config_entry() -> MockConfigEntry:
"""Mock sense config entry."""
return MockConfigEntry(
domain=DOMAIN,
data=MOCK_CONFIG,
unique_id="test-email",
)
@pytest.fixture
def mock_sense() -> Generator[MagicMock]:
"""Mock an ASyncSenseable object with a split foundation."""
with patch("homeassistant.components.sense.ASyncSenseable", autospec=True) as mock:
gateway = mock.return_value
gateway.sense_monitor_id = MONITOR_ID
gateway.get_monitor_data.return_value = None
gateway.update_realtime.return_value = None
gateway.fetch_devices.return_value = None
gateway.update_trend_data.return_value = None
type(gateway).active_power = PropertyMock(return_value=100)
type(gateway).active_solar_power = PropertyMock(return_value=500)
type(gateway).active_voltage = PropertyMock(return_value=[120, 240])
gateway.get_stat.return_value = 15
gateway.trend_start.return_value = datetime.datetime.fromisoformat(
"2024-01-01 01:01:00+00:00"
)
device_1 = SenseDevice(DEVICE_1_ID)
device_1.name = DEVICE_1_NAME
device_1.icon = "car"
device_1.is_on = False
device_1.power_w = DEVICE_1_POWER
device_1.energy_kwh[Scale.DAY] = DEVICE_1_DAY_ENERGY
device_2 = SenseDevice(DEVICE_2_ID)
device_2.name = DEVICE_2_NAME
device_2.icon = "stove"
device_2.is_on = False
device_2.power_w = DEVICE_2_POWER
device_2.energy_kwh[Scale.DAY] = DEVICE_2_DAY_ENERGY
type(gateway).devices = PropertyMock(return_value=[device_1, device_2])
yield gateway