mirror of
https://github.com/home-assistant/core.git
synced 2025-07-21 12:17:07 +00:00
Use fixtures in UniFi update tests (#118818)
This commit is contained in:
parent
513262c0ff
commit
c2e245f9d4
@ -3,6 +3,7 @@
|
|||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
|
|
||||||
from aiounifi.models.message import MessageKey
|
from aiounifi.models.message import MessageKey
|
||||||
|
import pytest
|
||||||
from yarl import URL
|
from yarl import URL
|
||||||
|
|
||||||
from homeassistant.components.unifi.const import CONF_SITE_ID
|
from homeassistant.components.unifi.const import CONF_SITE_ID
|
||||||
@ -26,8 +27,6 @@ from homeassistant.const import (
|
|||||||
)
|
)
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
|
|
||||||
from .test_hub import SITE, setup_unifi_integration
|
|
||||||
|
|
||||||
from tests.test_util.aiohttp import AiohttpClientMocker
|
from tests.test_util.aiohttp import AiohttpClientMocker
|
||||||
|
|
||||||
DEVICE_1 = {
|
DEVICE_1 = {
|
||||||
@ -60,28 +59,14 @@ DEVICE_2 = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
async def test_no_entities(
|
@pytest.mark.parametrize("device_payload", [[DEVICE_1, DEVICE_2]])
|
||||||
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
|
@pytest.mark.usefixtures("config_entry_setup")
|
||||||
) -> None:
|
async def test_device_updates(hass: HomeAssistant, mock_unifi_websocket) -> None:
|
||||||
"""Test the update_clients function when no clients are found."""
|
|
||||||
await setup_unifi_integration(hass, aioclient_mock)
|
|
||||||
|
|
||||||
assert len(hass.states.async_entity_ids(UPDATE_DOMAIN)) == 0
|
|
||||||
|
|
||||||
|
|
||||||
async def test_device_updates(
|
|
||||||
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker, mock_unifi_websocket
|
|
||||||
) -> None:
|
|
||||||
"""Test the update_items function with some devices."""
|
"""Test the update_items function with some devices."""
|
||||||
device_1 = deepcopy(DEVICE_1)
|
|
||||||
await setup_unifi_integration(
|
|
||||||
hass,
|
|
||||||
aioclient_mock,
|
|
||||||
devices_response=[device_1, DEVICE_2],
|
|
||||||
)
|
|
||||||
|
|
||||||
assert len(hass.states.async_entity_ids(UPDATE_DOMAIN)) == 2
|
assert len(hass.states.async_entity_ids(UPDATE_DOMAIN)) == 2
|
||||||
|
|
||||||
|
# Device with new firmware available
|
||||||
|
|
||||||
device_1_state = hass.states.get("update.device_1")
|
device_1_state = hass.states.get("update.device_1")
|
||||||
assert device_1_state.state == STATE_ON
|
assert device_1_state.state == STATE_ON
|
||||||
assert device_1_state.attributes[ATTR_INSTALLED_VERSION] == "4.0.42.10433"
|
assert device_1_state.attributes[ATTR_INSTALLED_VERSION] == "4.0.42.10433"
|
||||||
@ -93,6 +78,8 @@ async def test_device_updates(
|
|||||||
== UpdateEntityFeature.PROGRESS | UpdateEntityFeature.INSTALL
|
== UpdateEntityFeature.PROGRESS | UpdateEntityFeature.INSTALL
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Device without new firmware available
|
||||||
|
|
||||||
device_2_state = hass.states.get("update.device_2")
|
device_2_state = hass.states.get("update.device_2")
|
||||||
assert device_2_state.state == STATE_OFF
|
assert device_2_state.state == STATE_OFF
|
||||||
assert device_2_state.attributes[ATTR_INSTALLED_VERSION] == "4.0.42.10433"
|
assert device_2_state.attributes[ATTR_INSTALLED_VERSION] == "4.0.42.10433"
|
||||||
@ -106,6 +93,7 @@ async def test_device_updates(
|
|||||||
|
|
||||||
# Simulate start of update
|
# Simulate start of update
|
||||||
|
|
||||||
|
device_1 = deepcopy(DEVICE_1)
|
||||||
device_1["state"] = 4
|
device_1["state"] = 4
|
||||||
mock_unifi_websocket(message=MessageKey.DEVICE, data=device_1)
|
mock_unifi_websocket(message=MessageKey.DEVICE, data=device_1)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
@ -132,17 +120,14 @@ async def test_device_updates(
|
|||||||
assert device_1_state.attributes[ATTR_IN_PROGRESS] is False
|
assert device_1_state.attributes[ATTR_IN_PROGRESS] is False
|
||||||
|
|
||||||
|
|
||||||
async def test_not_admin(
|
@pytest.mark.parametrize("device_payload", [[DEVICE_1]])
|
||||||
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
|
@pytest.mark.parametrize(
|
||||||
) -> None:
|
"site_payload",
|
||||||
|
[[{"desc": "Site name", "name": "site_id", "role": "not admin", "_id": "1"}]],
|
||||||
|
)
|
||||||
|
@pytest.mark.usefixtures("config_entry_setup")
|
||||||
|
async def test_not_admin(hass: HomeAssistant) -> None:
|
||||||
"""Test that the INSTALL feature is not available on a non-admin account."""
|
"""Test that the INSTALL feature is not available on a non-admin account."""
|
||||||
site = deepcopy(SITE)
|
|
||||||
site[0]["role"] = "not admin"
|
|
||||||
|
|
||||||
await setup_unifi_integration(
|
|
||||||
hass, aioclient_mock, sites=site, devices_response=[DEVICE_1]
|
|
||||||
)
|
|
||||||
|
|
||||||
assert len(hass.states.async_entity_ids(UPDATE_DOMAIN)) == 1
|
assert len(hass.states.async_entity_ids(UPDATE_DOMAIN)) == 1
|
||||||
device_state = hass.states.get("update.device_1")
|
device_state = hass.states.get("update.device_1")
|
||||||
assert device_state.state == STATE_ON
|
assert device_state.state == STATE_ON
|
||||||
@ -151,13 +136,12 @@ async def test_not_admin(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("device_payload", [[DEVICE_1]])
|
||||||
async def test_install(
|
async def test_install(
|
||||||
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
|
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker, config_entry_setup
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test the device update install call."""
|
"""Test the device update install call."""
|
||||||
config_entry = await setup_unifi_integration(
|
config_entry = config_entry_setup
|
||||||
hass, aioclient_mock, devices_response=[DEVICE_1]
|
|
||||||
)
|
|
||||||
|
|
||||||
assert len(hass.states.async_entity_ids(UPDATE_DOMAIN)) == 1
|
assert len(hass.states.async_entity_ids(UPDATE_DOMAIN)) == 1
|
||||||
device_state = hass.states.get("update.device_1")
|
device_state = hass.states.get("update.device_1")
|
||||||
@ -187,12 +171,10 @@ async def test_install(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def test_hub_state_change(
|
@pytest.mark.parametrize("device_payload", [[DEVICE_1]])
|
||||||
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker, websocket_mock
|
@pytest.mark.usefixtures("config_entry_setup")
|
||||||
) -> None:
|
async def test_hub_state_change(hass: HomeAssistant, websocket_mock) -> None:
|
||||||
"""Verify entities state reflect on hub becoming unavailable."""
|
"""Verify entities state reflect on hub becoming unavailable."""
|
||||||
await setup_unifi_integration(hass, aioclient_mock, devices_response=[DEVICE_1])
|
|
||||||
|
|
||||||
assert len(hass.states.async_entity_ids(UPDATE_DOMAIN)) == 1
|
assert len(hass.states.async_entity_ids(UPDATE_DOMAIN)) == 1
|
||||||
assert hass.states.get("update.device_1").state == STATE_ON
|
assert hass.states.get("update.device_1").state == STATE_ON
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user