Add basic tests for powerview scenes (#108818)

This commit is contained in:
J. Nick Koston 2024-01-24 17:50:06 -10:00 committed by GitHub
parent c01e8288c1
commit 0628546a0e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 114 additions and 2 deletions

View file

@ -1 +1,3 @@
"""Tests for the Hunter Douglas PowerView integration."""
MOCK_MAC = "AA::BB::CC::DD::EE::FF"

View file

@ -0,0 +1,47 @@
"""Tests for the Hunter Douglas PowerView integration."""
import json
from unittest.mock import patch
import pytest
from tests.common import load_fixture
@pytest.fixture(scope="session")
def powerview_userdata():
"""Return the userdata fixture."""
return json.loads(load_fixture("hunterdouglas_powerview/userdata.json"))
@pytest.fixture(scope="session")
def powerview_fwversion():
"""Return the fwversion fixture."""
return json.loads(load_fixture("hunterdouglas_powerview/fwversion.json"))
@pytest.fixture(scope="session")
def powerview_scenes():
"""Return the scenes fixture."""
return json.loads(load_fixture("hunterdouglas_powerview/scenes.json"))
@pytest.fixture
def mock_powerview_v2_hub(powerview_userdata, powerview_fwversion, powerview_scenes):
"""Mock a Powerview v2 hub."""
with patch(
"homeassistant.components.hunterdouglas_powerview.UserData.get_resources",
return_value=powerview_userdata,
), patch(
"homeassistant.components.hunterdouglas_powerview.Rooms.get_resources",
return_value={"roomData": []},
), patch(
"homeassistant.components.hunterdouglas_powerview.Scenes.get_resources",
return_value=powerview_scenes,
), patch(
"homeassistant.components.hunterdouglas_powerview.Shades.get_resources",
return_value={"shadeData": []},
), patch(
"homeassistant.components.hunterdouglas_powerview.ApiEntryPoint",
return_value=powerview_fwversion,
):
yield

View file

@ -0,0 +1,25 @@
{
"sceneIds": [46274, 21015],
"sceneData": [
{
"roomId": 12538,
"name": "one",
"colorId": 12,
"iconId": 0,
"networkNumber": 250,
"id": 46274,
"order": 0,
"hkAssist": false
},
{
"roomId": 12538,
"name": "two",
"colorId": 14,
"iconId": 0,
"networkNumber": 231,
"id": 21015,
"order": 1,
"hkAssist": false
}
]
}

View file

@ -1,4 +1,4 @@
"""Test the Logitech Harmony Hub config flow."""
"""Test the Hunter Douglas Powerview config flow."""
import asyncio
from ipaddress import ip_address
import json
@ -11,6 +11,8 @@ from homeassistant.components import dhcp, zeroconf
from homeassistant.components.hunterdouglas_powerview.const import DOMAIN
from homeassistant.core import HomeAssistant
from . import MOCK_MAC
from tests.common import MockConfigEntry, load_fixture
ZEROCONF_HOST = "1.2.3.4"
@ -20,7 +22,7 @@ HOMEKIT_DISCOVERY_INFO = zeroconf.ZeroconfServiceInfo(
hostname="mock_hostname",
name="Hunter Douglas Powerview Hub._hap._tcp.local.",
port=None,
properties={zeroconf.ATTR_PROPERTIES_ID: "AA::BB::CC::DD::EE::FF"},
properties={zeroconf.ATTR_PROPERTIES_ID: MOCK_MAC},
type="mock_type",
)

View file

@ -0,0 +1,36 @@
"""Test the Hunter Douglas Powerview scene platform."""
from unittest.mock import patch
from homeassistant.components.hunterdouglas_powerview.const import DOMAIN
from homeassistant.components.scene import DOMAIN as SCENE_DOMAIN, SERVICE_TURN_ON
from homeassistant.const import STATE_UNKNOWN
from homeassistant.core import HomeAssistant
from . import MOCK_MAC
from tests.common import MockConfigEntry
async def test_scenes(hass: HomeAssistant, mock_powerview_v2_hub: None) -> None:
"""Test the scenes."""
entry = MockConfigEntry(domain=DOMAIN, data={"host": "1.2.3.4"}, unique_id=MOCK_MAC)
entry.add_to_hass(hass)
await hass.config_entries.async_setup(entry.entry_id)
await hass.async_block_till_done()
assert len(hass.states.async_all()) == 2
assert hass.states.get("scene.alexanderhd_one").state == STATE_UNKNOWN
assert hass.states.get("scene.alexanderhd_two").state == STATE_UNKNOWN
with patch(
"homeassistant.components.hunterdouglas_powerview.scene.PvScene.activate"
) as mock_activate:
await hass.services.async_call(
SCENE_DOMAIN,
SERVICE_TURN_ON,
{"entity_id": "scene.alexanderhd_one"},
blocking=True,
)
await hass.async_block_till_done()
mock_activate.assert_called_once()