mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 19:27:45 +00:00
Add full device snapshot tests for Shelly (#145620)
This commit is contained in:
parent
f2944f4d8e
commit
438aa3486d
@ -9,6 +9,7 @@ from unittest.mock import Mock
|
|||||||
from aioshelly.const import MODEL_25
|
from aioshelly.const import MODEL_25
|
||||||
from freezegun.api import FrozenDateTimeFactory
|
from freezegun.api import FrozenDateTimeFactory
|
||||||
import pytest
|
import pytest
|
||||||
|
from syrupy.assertion import SnapshotAssertion
|
||||||
|
|
||||||
from homeassistant.components.shelly.const import (
|
from homeassistant.components.shelly.const import (
|
||||||
CONF_GEN,
|
CONF_GEN,
|
||||||
@ -151,3 +152,30 @@ def register_device(
|
|||||||
config_entry_id=config_entry.entry_id,
|
config_entry_id=config_entry.entry_id,
|
||||||
connections={(CONNECTION_NETWORK_MAC, format_mac(MOCK_MAC))},
|
connections={(CONNECTION_NETWORK_MAC, format_mac(MOCK_MAC))},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
async def snapshot_device_entities(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
entity_registry: er.EntityRegistry,
|
||||||
|
snapshot: SnapshotAssertion,
|
||||||
|
config_entry_id: str,
|
||||||
|
) -> None:
|
||||||
|
"""Snapshot all device entities."""
|
||||||
|
entity_entries = er.async_entries_for_config_entry(entity_registry, config_entry_id)
|
||||||
|
assert entity_entries
|
||||||
|
|
||||||
|
for entity_entry in entity_entries:
|
||||||
|
assert entity_entry == snapshot(name=f"{entity_entry.entity_id}-entry")
|
||||||
|
assert entity_entry.disabled_by is None, "Please enable all entities."
|
||||||
|
state = hass.states.get(entity_entry.entity_id)
|
||||||
|
assert state, f"State not found for {entity_entry.entity_id}"
|
||||||
|
assert state == snapshot(name=f"{entity_entry.entity_id}-state")
|
||||||
|
|
||||||
|
|
||||||
|
async def force_uptime_value(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
freezer: FrozenDateTimeFactory,
|
||||||
|
) -> None:
|
||||||
|
"""Force time to a specific point."""
|
||||||
|
await hass.config.async_set_time_zone("UTC")
|
||||||
|
freezer.move_to("2025-05-26 16:04:00+00:00")
|
||||||
|
4718
tests/components/shelly/snapshots/test_devices.ambr
Normal file
4718
tests/components/shelly/snapshots/test_devices.ambr
Normal file
File diff suppressed because it is too large
Load Diff
@ -3,24 +3,29 @@
|
|||||||
from unittest.mock import Mock
|
from unittest.mock import Mock
|
||||||
|
|
||||||
from aioshelly.const import MODEL_2PM_G3, MODEL_PRO_EM3
|
from aioshelly.const import MODEL_2PM_G3, MODEL_PRO_EM3
|
||||||
|
from freezegun.api import FrozenDateTimeFactory
|
||||||
import pytest
|
import pytest
|
||||||
|
from syrupy.assertion import SnapshotAssertion
|
||||||
|
|
||||||
from homeassistant.components.shelly.const import DOMAIN
|
from homeassistant.components.shelly.const import DOMAIN
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.helpers.device_registry import DeviceRegistry
|
from homeassistant.helpers.device_registry import DeviceRegistry
|
||||||
from homeassistant.helpers.entity_registry import EntityRegistry
|
from homeassistant.helpers.entity_registry import EntityRegistry
|
||||||
|
|
||||||
from . import init_integration
|
from . import force_uptime_value, init_integration, snapshot_device_entities
|
||||||
|
|
||||||
from tests.common import async_load_json_object_fixture
|
from tests.common import async_load_json_object_fixture
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
|
||||||
async def test_shelly_2pm_gen3_no_relay_names(
|
async def test_shelly_2pm_gen3_no_relay_names(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
mock_rpc_device: Mock,
|
mock_rpc_device: Mock,
|
||||||
entity_registry: EntityRegistry,
|
entity_registry: EntityRegistry,
|
||||||
device_registry: DeviceRegistry,
|
device_registry: DeviceRegistry,
|
||||||
monkeypatch: pytest.MonkeyPatch,
|
monkeypatch: pytest.MonkeyPatch,
|
||||||
|
snapshot: SnapshotAssertion,
|
||||||
|
freezer: FrozenDateTimeFactory,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test Shelly 2PM Gen3 without relay names.
|
"""Test Shelly 2PM Gen3 without relay names.
|
||||||
|
|
||||||
@ -32,7 +37,9 @@ async def test_shelly_2pm_gen3_no_relay_names(
|
|||||||
monkeypatch.setattr(mock_rpc_device, "status", device_fixture["status"])
|
monkeypatch.setattr(mock_rpc_device, "status", device_fixture["status"])
|
||||||
monkeypatch.setattr(mock_rpc_device, "config", device_fixture["config"])
|
monkeypatch.setattr(mock_rpc_device, "config", device_fixture["config"])
|
||||||
|
|
||||||
await init_integration(hass, gen=3, model=MODEL_2PM_G3)
|
await force_uptime_value(hass, freezer)
|
||||||
|
|
||||||
|
config_entry = await init_integration(hass, gen=3, model=MODEL_2PM_G3)
|
||||||
|
|
||||||
# Relay 0 sub-device
|
# Relay 0 sub-device
|
||||||
entity_id = "switch.test_name_switch_0"
|
entity_id = "switch.test_name_switch_0"
|
||||||
@ -97,6 +104,10 @@ async def test_shelly_2pm_gen3_no_relay_names(
|
|||||||
assert device_entry
|
assert device_entry
|
||||||
assert device_entry.name == "Test name"
|
assert device_entry.name == "Test name"
|
||||||
|
|
||||||
|
await snapshot_device_entities(
|
||||||
|
hass, entity_registry, snapshot, config_entry.entry_id
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
async def test_shelly_2pm_gen3_relay_names(
|
async def test_shelly_2pm_gen3_relay_names(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
@ -183,12 +194,15 @@ async def test_shelly_2pm_gen3_relay_names(
|
|||||||
assert device_entry.name == "Test name"
|
assert device_entry.name == "Test name"
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
|
||||||
async def test_shelly_2pm_gen3_cover(
|
async def test_shelly_2pm_gen3_cover(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
mock_rpc_device: Mock,
|
mock_rpc_device: Mock,
|
||||||
entity_registry: EntityRegistry,
|
entity_registry: EntityRegistry,
|
||||||
device_registry: DeviceRegistry,
|
device_registry: DeviceRegistry,
|
||||||
monkeypatch: pytest.MonkeyPatch,
|
monkeypatch: pytest.MonkeyPatch,
|
||||||
|
snapshot: SnapshotAssertion,
|
||||||
|
freezer: FrozenDateTimeFactory,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test Shelly 2PM Gen3 with cover profile.
|
"""Test Shelly 2PM Gen3 with cover profile.
|
||||||
|
|
||||||
@ -201,7 +215,9 @@ async def test_shelly_2pm_gen3_cover(
|
|||||||
monkeypatch.setattr(mock_rpc_device, "status", device_fixture["status"])
|
monkeypatch.setattr(mock_rpc_device, "status", device_fixture["status"])
|
||||||
monkeypatch.setattr(mock_rpc_device, "config", device_fixture["config"])
|
monkeypatch.setattr(mock_rpc_device, "config", device_fixture["config"])
|
||||||
|
|
||||||
await init_integration(hass, gen=3, model=MODEL_2PM_G3)
|
await force_uptime_value(hass, freezer)
|
||||||
|
|
||||||
|
config_entry = await init_integration(hass, gen=3, model=MODEL_2PM_G3)
|
||||||
|
|
||||||
entity_id = "cover.test_name"
|
entity_id = "cover.test_name"
|
||||||
|
|
||||||
@ -239,6 +255,10 @@ async def test_shelly_2pm_gen3_cover(
|
|||||||
assert device_entry
|
assert device_entry
|
||||||
assert device_entry.name == "Test name"
|
assert device_entry.name == "Test name"
|
||||||
|
|
||||||
|
await snapshot_device_entities(
|
||||||
|
hass, entity_registry, snapshot, config_entry.entry_id
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
async def test_shelly_2pm_gen3_cover_with_name(
|
async def test_shelly_2pm_gen3_cover_with_name(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
@ -298,12 +318,15 @@ async def test_shelly_2pm_gen3_cover_with_name(
|
|||||||
assert device_entry.name == "Test name"
|
assert device_entry.name == "Test name"
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
|
||||||
async def test_shelly_pro_3em(
|
async def test_shelly_pro_3em(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
mock_rpc_device: Mock,
|
mock_rpc_device: Mock,
|
||||||
entity_registry: EntityRegistry,
|
entity_registry: EntityRegistry,
|
||||||
device_registry: DeviceRegistry,
|
device_registry: DeviceRegistry,
|
||||||
monkeypatch: pytest.MonkeyPatch,
|
monkeypatch: pytest.MonkeyPatch,
|
||||||
|
snapshot: SnapshotAssertion,
|
||||||
|
freezer: FrozenDateTimeFactory,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test Shelly Pro 3EM.
|
"""Test Shelly Pro 3EM.
|
||||||
|
|
||||||
@ -314,7 +337,9 @@ async def test_shelly_pro_3em(
|
|||||||
monkeypatch.setattr(mock_rpc_device, "status", device_fixture["status"])
|
monkeypatch.setattr(mock_rpc_device, "status", device_fixture["status"])
|
||||||
monkeypatch.setattr(mock_rpc_device, "config", device_fixture["config"])
|
monkeypatch.setattr(mock_rpc_device, "config", device_fixture["config"])
|
||||||
|
|
||||||
await init_integration(hass, gen=2, model=MODEL_PRO_EM3)
|
await force_uptime_value(hass, freezer)
|
||||||
|
|
||||||
|
config_entry = await init_integration(hass, gen=2, model=MODEL_PRO_EM3)
|
||||||
|
|
||||||
# Main device
|
# Main device
|
||||||
entity_id = "sensor.test_name_total_active_power"
|
entity_id = "sensor.test_name_total_active_power"
|
||||||
@ -368,6 +393,10 @@ async def test_shelly_pro_3em(
|
|||||||
assert device_entry
|
assert device_entry
|
||||||
assert device_entry.name == "Test name Phase C"
|
assert device_entry.name == "Test name Phase C"
|
||||||
|
|
||||||
|
await snapshot_device_entities(
|
||||||
|
hass, entity_registry, snapshot, config_entry.entry_id
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
async def test_shelly_pro_3em_with_emeter_name(
|
async def test_shelly_pro_3em_with_emeter_name(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user