"""Tests for the APCUPSd component.""" from collections import OrderedDict from typing import Final from unittest.mock import patch from homeassistant.components.apcupsd import DOMAIN from homeassistant.config_entries import SOURCE_USER from homeassistant.const import CONF_HOST, CONF_PORT from homeassistant.core import HomeAssistant from tests.common import MockConfigEntry CONF_DATA: Final = {CONF_HOST: "test", CONF_PORT: 1234} MOCK_STATUS: Final = OrderedDict( [ ("APC", "001,038,0985"), ("DATE", "1970-01-01 00:00:00 0000"), ("VERSION", "3.14.14 (31 May 2016) unknown"), ("CABLE", "USB Cable"), ("DRIVER", "USB UPS Driver"), ("UPSMODE", "Stand Alone"), ("MODEL", "Back-UPS ES 600"), ("STATUS", "ONLINE"), ("LINEV", "124.0 Volts"), ("LOADPCT", "14.0 Percent"), ("BCHARGE", "100.0 Percent"), ("TIMELEFT", "51.0 Minutes"), ("MBATTCHG", "5 Percent"), ("MINTIMEL", "3 Minutes"), ("MAXTIME", "0 Seconds"), ("SENSE", "Medium"), ("LOTRANS", "92.0 Volts"), ("HITRANS", "139.0 Volts"), ("ALARMDEL", "30 Seconds"), ("BATTV", "13.7 Volts"), ("LASTXFER", "Automatic or explicit self test"), ("NUMXFERS", "1"), ("XONBATT", "1970-01-01 00:00:00 0000"), ("TONBATT", "0 Seconds"), ("CUMONBATT", "8 Seconds"), ("XOFFBATT", "1970-01-01 00:00:00 0000"), ("LASTSTEST", "1970-01-01 00:00:00 0000"), ("SELFTEST", "NO"), ("STATFLAG", "0x05000008"), ("SERIALNO", "XXXXXXXXXXXX"), ("BATTDATE", "1970-01-01"), ("NOMINV", "120 Volts"), ("NOMBATTV", "12.0 Volts"), ("NOMPOWER", "330 Watts"), ("FIRMWARE", "928.a8 .D USB FW:a8"), ("END APC", "1970-01-01 00:00:00 0000"), ] ) # Minimal status adapted from http://www.apcupsd.org/manual/manual.html#apcaccess-test. # Most importantly, the "MODEL" and "SERIALNO" fields are removed to test the ability # of the integration to handle such cases. MOCK_MINIMAL_STATUS: Final = OrderedDict( [ ("APC", "001,012,0319"), ("DATE", "1970-01-01 00:00:00 0000"), ("RELEASE", "3.8.5"), ("CABLE", "APC Cable 940-0128A"), ("UPSMODE", "Stand Alone"), ("STARTTIME", "1970-01-01 00:00:00 0000"), ("LINEFAIL", "OK"), ("BATTSTAT", "OK"), ("STATFLAG", "0x008"), ("END APC", "1970-01-01 00:00:00 0000"), ] ) async def init_integration( hass: HomeAssistant, host: str = "test", status=None ) -> MockConfigEntry: """Set up the APC UPS Daemon integration in HomeAssistant.""" if status is None: status = MOCK_STATUS entry = MockConfigEntry( version=1, domain=DOMAIN, title="APCUPSd", data=CONF_DATA | {CONF_HOST: host}, unique_id=status.get("SERIALNO", None), source=SOURCE_USER, ) entry.add_to_hass(hass) with patch("apcaccess.status.parse", return_value=status), patch( "apcaccess.status.get", return_value=b"" ): await hass.config_entries.async_setup(entry.entry_id) await hass.async_block_till_done() return entry