home-assistant-core/tests/components/rituals_perfume_genie/common.py

102 lines
3.5 KiB
Python

"""Common methods used across tests for Rituals Perfume Genie."""
from __future__ import annotations
from unittest.mock import AsyncMock, MagicMock, patch
from homeassistant.components.rituals_perfume_genie.const import ACCOUNT_HASH, DOMAIN
from homeassistant.config_entries import ConfigEntryState
from homeassistant.core import HomeAssistant
from tests.common import MockConfigEntry, load_json_object_fixture
def mock_config_entry(unique_id: str, entry_id: str = "an_entry_id") -> MockConfigEntry:
"""Return a mock Config Entry for the Rituals Perfume Genie integration."""
return MockConfigEntry(
domain=DOMAIN,
title="name@example.com",
unique_id=unique_id,
data={ACCOUNT_HASH: "an_account_hash"},
entry_id=entry_id,
)
def mock_diffuser(
hublot: str,
available: bool = True,
battery_percentage: int | Exception = 100,
charging: bool | Exception = True,
fill: str = "90-100%",
has_battery: bool = True,
has_cartridge: bool = True,
is_on: bool = True,
name: str = "Genie",
perfume: str = "Ritual of Sakura",
perfume_amount: int = 2,
room_size_square_meter: int = 60,
version: str = "4.0",
wifi_percentage: int = 75,
) -> MagicMock:
"""Return a mock Diffuser initialized with the given data."""
diffuser_mock = MagicMock()
diffuser_mock.available = available
diffuser_mock.battery_percentage = battery_percentage
diffuser_mock.charging = charging
diffuser_mock.fill = fill
diffuser_mock.has_battery = has_battery
diffuser_mock.has_cartridge = has_cartridge
diffuser_mock.hublot = hublot
diffuser_mock.is_on = is_on
diffuser_mock.name = name
diffuser_mock.perfume = perfume
diffuser_mock.perfume_amount = perfume_amount
diffuser_mock.room_size_square_meter = room_size_square_meter
diffuser_mock.set_perfume_amount = AsyncMock()
diffuser_mock.set_room_size_square_meter = AsyncMock()
diffuser_mock.turn_off = AsyncMock()
diffuser_mock.turn_on = AsyncMock()
diffuser_mock.update_data = AsyncMock()
diffuser_mock.version = version
diffuser_mock.wifi_percentage = wifi_percentage
diffuser_mock.data = load_json_object_fixture("data.json", DOMAIN)
return diffuser_mock
def mock_diffuser_v1_battery_cartridge() -> MagicMock:
"""Create and return a mock version 1 Diffuser with battery and a cartridge."""
return mock_diffuser(hublot="lot123v1")
def mock_diffuser_v2_no_battery_no_cartridge() -> MagicMock:
"""Create and return a mock version 2 Diffuser without battery and cartridge."""
return mock_diffuser(
hublot="lot123v2",
battery_percentage=Exception(),
charging=Exception(),
has_battery=False,
has_cartridge=False,
name="Genie V2",
perfume="No Cartridge",
version="5.0",
)
async def init_integration(
hass: HomeAssistant,
mock_config_entry: MockConfigEntry,
mock_diffusers: list[MagicMock] = [mock_diffuser(hublot="lot123")],
) -> None:
"""Initialize the Rituals Perfume Genie integration with the given Config Entry and Diffuser list."""
mock_config_entry.add_to_hass(hass)
with patch(
"homeassistant.components.rituals_perfume_genie.Account.get_devices",
return_value=mock_diffusers,
):
await hass.config_entries.async_setup(mock_config_entry.entry_id)
assert mock_config_entry.state is ConfigEntryState.LOADED
assert mock_config_entry.entry_id in hass.data[DOMAIN]
assert hass.data[DOMAIN]
await hass.async_block_till_done()