| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 347bf9a commit a87926f
2 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -4,8 +4,10 @@ | |||
| 4 | 4 | ||
| 5 | 5 | from datetime import datetime | |
| 6 | 6 | from enum import Enum | |
| 7 | + from typing import TYPE_CHECKING | ||
| 7 | 8 | ||
| 8 | 9 | from ...feature import Feature | |
| 10 | + from ...interfaces.time import Time | ||
| 9 | 11 | from ..smartmodule import Module, SmartModule | |
| 10 | 12 | ||
| 11 | 13 | ||
@@ -76,6 +78,17 @@ def alert(self) -> bool: | |||
| 76 | 78 | """Return true if alarm is active.""" | |
| 77 | 79 | return self._device.sys_info["in_alarm"] | |
| 78 | 80 | ||
| 81 | + @property | ||
| 82 | + def _time_module(self) -> Time: | ||
| 83 | + """Return time module from the parent for timestamp calculation.""" | ||
| 84 | + parent = self._device.parent | ||
| 85 | + if TYPE_CHECKING: | ||
| 86 | + from ..smartdevice import SmartDevice | ||
| 87 | + | ||
| 88 | + assert isinstance(parent, SmartDevice) | ||
| 89 | + | ||
| 90 | + return parent.modules[Module.Time] | ||
| 91 | + | ||
| 79 | 92 | @property | |
| 80 | 93 | def alert_timestamp(self) -> datetime | None: | |
| 81 | 94 | """Return timestamp of the last leak trigger.""" | |
@@ -84,5 +97,5 @@ def alert_timestamp(self) -> datetime | None: | |||
| 84 | 97 | return None | |
| 85 | 98 | ||
| 86 | 99 | ts = self._device.sys_info["trigger_timestamp"] | |
| 87 | - tz = self._device.modules[Module.Time].timezone | ||
| 100 | + tz = self._time_module.timezone | ||
| 88 | 101 | return datetime.fromtimestamp(ts, tz=tz) | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -5,13 +5,20 @@ | |||
| 5 | 5 | ||
| 6 | 6 | from kasa.smart.modules import WaterleakSensor | |
| 7 | 7 | ||
| 8 | + from ...conftest import get_device_for_fixture_protocol | ||
| 8 | 9 | from ...device_fixtures import parametrize | |
| 9 | 10 | ||
| 10 | 11 | waterleak = parametrize( | |
| 11 | 12 | "has waterleak", component_filter="sensor_alarm", protocol_filter={"SMART.CHILD"} | |
| 12 | 13 | ) | |
| 13 | 14 | ||
| 14 | 15 | ||
| 16 | + @pytest.fixture | ||
| 17 | + async def parent(request): | ||
| 18 | + """Get a dummy parent for tz tests.""" | ||
| 19 | + return await get_device_for_fixture_protocol("H100(EU)_1.0_1.5.5.json", "SMART") | ||
| 20 | + | ||
| 21 | + | ||
| 15 | 22 | @waterleak | |
| 16 | 23 | @pytest.mark.parametrize( | |
| 17 | 24 | ("feature", "prop_name", "type"), | |
@@ -21,8 +28,9 @@ | |||
| 21 | 28 | ("water_leak", "status", Enum), | |
| 22 | 29 | ], | |
| 23 | 30 | ) | |
| 24 | - async def test_waterleak_properties(dev, feature, prop_name, type): | ||
| 31 | + async def test_waterleak_properties(dev, parent, feature, prop_name, type): | ||
| 25 | 32 | """Test that features are registered and work as expected.""" | |
| 33 | + dev._parent = parent | ||
| 26 | 34 | waterleak: WaterleakSensor = dev.modules["WaterleakSensor"] | |
| 27 | 35 | ||
| 28 | 36 | prop = getattr(waterleak, prop_name) | |
@@ -34,12 +42,16 @@ async def test_waterleak_properties(dev, feature, prop_name, type): | |||
| 34 | 42 | ||
| 35 | 43 | ||
| 36 | 44 | @waterleak | |
| 37 | - async def test_waterleak_features(dev): | ||
| 45 | + async def test_waterleak_features(dev, parent): | ||
| 38 | 46 | """Test waterleak features.""" | |
| 47 | + dev._parent = parent | ||
| 39 | 48 | waterleak: WaterleakSensor = dev.modules["WaterleakSensor"] | |
| 40 | 49 | ||
| 41 | 50 | assert "water_leak" in dev.features | |
| 42 | 51 | assert dev.features["water_leak"].value == waterleak.status | |
| 43 | 52 | ||
| 44 | 53 | assert "water_alert" in dev.features | |
| 45 | 54 | assert dev.features["water_alert"].value == waterleak.alert | |
| 55 | + | ||
| 56 | + assert "water_alert_timestamp" in dev.features | ||
| 57 | + assert dev.features["water_alert_timestamp"].value == waterleak.alert_timestamp | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments