1
0
mirror of https://github.com/home-assistant/core.git synced 2025-12-20 19:09:45 +00:00
Files
core/tests/components/lamarzocco/conftest.py
2025-12-03 05:53:27 +01:00

234 lines
7.7 KiB
Python

"""Lamarzocco session fixtures."""
from collections.abc import Generator
from unittest.mock import AsyncMock, MagicMock, PropertyMock, patch
from bleak.backends.device import BLEDevice
from pylamarzocco.const import ModelName
from pylamarzocco.models import (
Thing,
ThingDashboardConfig,
ThingSchedulingSettings,
ThingSettings,
ThingStatistics,
)
from pylamarzocco.util import InstallationKey
import pytest
from homeassistant.components.lamarzocco.const import CONF_INSTALLATION_KEY, DOMAIN
from homeassistant.const import CONF_ADDRESS, CONF_MAC, CONF_TOKEN
from homeassistant.core import HomeAssistant
from . import MOCK_INSTALLATION_KEY, SERIAL_DICT, USER_INPUT, async_init_integration
from tests.common import MockConfigEntry, load_json_object_fixture
@pytest.fixture
def mock_config_entry(
hass: HomeAssistant, mock_lamarzocco: MagicMock
) -> MockConfigEntry:
"""Return the default mocked config entry."""
return MockConfigEntry(
title="My LaMarzocco",
domain=DOMAIN,
version=4,
data=USER_INPUT
| {
CONF_ADDRESS: "000000000000",
CONF_TOKEN: "token",
CONF_INSTALLATION_KEY: MOCK_INSTALLATION_KEY,
},
unique_id=mock_lamarzocco.serial_number,
)
@pytest.fixture
async def init_integration(
hass: HomeAssistant, mock_config_entry: MockConfigEntry, mock_lamarzocco: MagicMock
) -> MockConfigEntry:
"""Set up the La Marzocco integration for testing."""
await async_init_integration(hass, mock_config_entry)
return mock_config_entry
@pytest.fixture(autouse=True)
def mock_generate_installation_key() -> Generator[MagicMock]:
"""Return a mocked generate_installation_key."""
with (
patch(
"homeassistant.components.lamarzocco.generate_installation_key",
return_value=InstallationKey.from_json(MOCK_INSTALLATION_KEY),
) as mock_generate,
patch(
"homeassistant.components.lamarzocco.config_flow.generate_installation_key",
new=mock_generate,
),
):
yield mock_generate
@pytest.fixture
def device_fixture() -> ModelName:
"""Return the device fixture for a specific device."""
return ModelName.GS3_AV
@pytest.fixture(autouse=True)
def mock_cloud_client() -> Generator[MagicMock]:
"""Return a mocked LM cloud client."""
with (
patch(
"homeassistant.components.lamarzocco.config_flow.LaMarzoccoCloudClient",
autospec=True,
) as cloud_client,
patch(
"homeassistant.components.lamarzocco.LaMarzoccoCloudClient",
new=cloud_client,
),
):
client = cloud_client.return_value
client.list_things.return_value = [
Thing.from_dict(load_json_object_fixture("thing.json", DOMAIN))
]
client.get_thing_settings.return_value = ThingSettings.from_dict(
load_json_object_fixture("settings.json", DOMAIN)
)
yield client
@pytest.fixture
def mock_lamarzocco(device_fixture: ModelName) -> Generator[MagicMock]:
"""Return a mocked LM client."""
if device_fixture == ModelName.LINEA_MINI:
config = load_json_object_fixture("config_mini.json", DOMAIN)
elif device_fixture == ModelName.LINEA_MICRA:
config = load_json_object_fixture("config_micra.json", DOMAIN)
else:
config = load_json_object_fixture("config_gs3.json", DOMAIN)
schedule = load_json_object_fixture("schedule.json", DOMAIN)
settings = load_json_object_fixture("settings.json", DOMAIN)
statistics = load_json_object_fixture("statistics.json", DOMAIN)
with (
patch(
"homeassistant.components.lamarzocco.LaMarzoccoMachine",
autospec=True,
) as machine_mock_init,
):
machine_mock = machine_mock_init.return_value
machine_mock.serial_number = SERIAL_DICT[device_fixture]
machine_mock.dashboard = ThingDashboardConfig.from_dict(config)
machine_mock.schedule = ThingSchedulingSettings.from_dict(schedule)
machine_mock.settings = ThingSettings.from_dict(settings)
machine_mock.statistics = ThingStatistics.from_dict(statistics)
machine_mock.dashboard.model_name = device_fixture
machine_mock.to_dict.return_value = {
"serial_number": machine_mock.serial_number,
"dashboard": machine_mock.dashboard.to_dict(),
"schedule": machine_mock.schedule.to_dict(),
"settings": machine_mock.settings.to_dict(),
}
machine_mock.connect_dashboard_websocket = AsyncMock()
machine_mock.websocket = MagicMock()
machine_mock.websocket.connected = True
machine_mock.websocket.disconnect = AsyncMock()
yield machine_mock
@pytest.fixture(autouse=True)
def mock_bluetooth(enable_bluetooth: None) -> None:
"""Auto mock bluetooth."""
@pytest.fixture
def mock_ble_device() -> BLEDevice:
"""Return a mock BLE device."""
return BLEDevice("00:00:00:00:00:00", "GS_GS012345", details={"path": "path"})
@pytest.fixture
def mock_bluetooth_client() -> Generator[MagicMock]:
"""Return a mocked Bluetooth client."""
with patch(
"homeassistant.components.lamarzocco.LaMarzoccoBluetoothClient",
autospec=True,
) as mock_bt_client_cls:
mock_bt_client = mock_bt_client_cls.return_value
mock_bt_client.disconnect = AsyncMock()
yield mock_bt_client
@pytest.fixture
def mock_ble_device_from_address(
mock_ble_device: BLEDevice,
) -> Generator[MagicMock]:
"""Return a mocked async_ble_device_from_address."""
with patch(
"homeassistant.components.lamarzocco.async_ble_device_from_address",
return_value=mock_ble_device,
) as mock_ble_device_from_address:
yield mock_ble_device_from_address
@pytest.fixture
def mock_lamarzocco_bluetooth(mock_lamarzocco: MagicMock) -> MagicMock:
"""Return a mocked LM client with Bluetooth config."""
if mock_lamarzocco.dashboard.model_name == ModelName.LINEA_MICRA:
config = load_json_object_fixture("config_micra_bluetooth.json", DOMAIN)
else:
config = load_json_object_fixture("config_gs3_bluetooth.json", DOMAIN)
mock_lamarzocco.dashboard = ThingDashboardConfig.from_dict(config)
mock_lamarzocco.dashboard.model_name = mock_lamarzocco.dashboard.model_name
mock_lamarzocco.schedule = ThingSchedulingSettings(
serial_number=mock_lamarzocco.serial_number
)
mock_lamarzocco.settings = ThingSettings(
serial_number=mock_lamarzocco.serial_number
)
mock_lamarzocco.statistics = ThingStatistics(
serial_number=mock_lamarzocco.serial_number
)
mock_lamarzocco.to_dict.return_value = {
"serial_number": mock_lamarzocco.serial_number,
"dashboard": mock_lamarzocco.dashboard.to_dict(),
}
return mock_lamarzocco
@pytest.fixture
def mock_config_entry_bluetooth(
mock_lamarzocco: MagicMock,
mock_ble_device: BLEDevice,
) -> MockConfigEntry:
"""Return a mocked config entry with Bluetooth enabled."""
return MockConfigEntry(
title=mock_lamarzocco.serial_number,
domain=DOMAIN,
version=4,
data=USER_INPUT
| {
CONF_MAC: mock_ble_device.address,
CONF_TOKEN: "token",
CONF_INSTALLATION_KEY: MOCK_INSTALLATION_KEY,
},
unique_id=mock_lamarzocco.serial_number,
)
@pytest.fixture
def mock_websocket_terminated() -> Generator[PropertyMock]:
"""Mock websocket terminated."""
with patch(
"homeassistant.components.lamarzocco.coordinator.LaMarzoccoUpdateCoordinator.websocket_terminated",
new_callable=PropertyMock,
) as mock_websocket_terminated:
mock_websocket_terminated.return_value = False
yield mock_websocket_terminated