Skip to content

Commit a642f35

Browse files
authored
Add zone and arming protocol tests (#125)
1 parent 2be157d commit a642f35

File tree

2 files changed

+67
-0
lines changed

2 files changed

+67
-0
lines changed

nessclient_tests/test_event.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,18 @@ def test_zone_in_alarm_with_zones(self):
151151
[ZoneUpdate_1_16.Zone.ZONE_3, ZoneUpdate_1_16.Zone.ZONE_5],
152152
)
153153

154+
def test_zone_detector_low_battery_with_zones(self):
155+
pkt = make_packet(CommandType.USER_INTERFACE, "110500")
156+
event = ZoneUpdate_1_16.decode(pkt)
157+
self.assertEqual(
158+
event.request_id,
159+
ZoneUpdate_1_16.RequestID.ZONE_1_16_DETECTOR_LOW_BATTERY,
160+
)
161+
self.assertEqual(
162+
event.included_zones,
163+
[ZoneUpdate_1_16.Zone.ZONE_1, ZoneUpdate_1_16.Zone.ZONE_3],
164+
)
165+
154166
def test_zone_1_16_excluded_plus_auto(self):
155167
pkt = make_packet(CommandType.USER_INTERFACE, "190500")
156168
event = ZoneUpdate_1_16.decode(pkt)
@@ -195,6 +207,18 @@ def test_zone_in_delay_with_zones(self):
195207
[ZoneUpdate_17_32.Zone.ZONE_17, ZoneUpdate_17_32.Zone.ZONE_19],
196208
)
197209

210+
def test_zone_detector_low_battery_with_zones(self):
211+
pkt = make_packet(CommandType.USER_INTERFACE, "310500")
212+
event = ZoneUpdate_17_32.decode(pkt)
213+
self.assertEqual(
214+
event.request_id,
215+
ZoneUpdate_17_32.RequestID.ZONE_17_32_DETECTOR_LOW_BATTERY,
216+
)
217+
self.assertEqual(
218+
event.included_zones,
219+
[ZoneUpdate_17_32.Zone.ZONE_17, ZoneUpdate_17_32.Zone.ZONE_19],
220+
)
221+
198222
def test_zone_excluded_plus_auto(self):
199223
pkt = make_packet(CommandType.USER_INTERFACE, "330500")
200224
event = ZoneUpdate_17_32.decode(pkt)

nessclient_tests/test_integration.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,19 @@ async def test_zone_events_update_zone_state(
3636
assert alarm.zones[2].triggered is False
3737

3838

39+
@pytest.mark.asyncio
40+
async def test_zone_23_events_update_zone_state(
41+
client: Client, connection: Connection, alarm: Alarm
42+
) -> None:
43+
# Zone 23 unsealed at 23:45 on 10/5/2008
44+
await _feed_ascii(client, connection, "87020361002301080510234500E3")
45+
assert alarm.zones[22].triggered is True
46+
47+
# Zone 23 sealed one minute later
48+
await _feed_ascii(client, connection, "87020361012301080510234600E1")
49+
assert alarm.zones[22].triggered is False
50+
51+
3952
@pytest.mark.asyncio
4053
async def test_arming_events_update_alarm_state(
4154
client: Client, connection: Connection, alarm: Alarm
@@ -49,6 +62,36 @@ async def test_arming_events_update_alarm_state(
4962
assert alarm.arming_state == ArmingState.DISARMED
5063

5164

65+
@pytest.mark.asyncio
66+
async def test_armed_vacation_event_updates_alarm_state(
67+
client: Client, connection: Connection, alarm: Alarm
68+
) -> None:
69+
callback = Mock()
70+
client.on_state_change(callback)
71+
72+
await _feed_ascii(client, connection, "87020361280101080510234500DD")
73+
assert alarm._arming_mode == ArmingMode.ARMED_VACATION
74+
75+
assert callback.call_args_list == [
76+
call(ArmingState.ARMING, ArmingMode.ARMED_VACATION),
77+
]
78+
79+
80+
@pytest.mark.asyncio
81+
async def test_armed_highest_event_updates_alarm_state(
82+
client: Client, connection: Connection, alarm: Alarm
83+
) -> None:
84+
callback = Mock()
85+
client.on_state_change(callback)
86+
87+
await _feed_ascii(client, connection, "870203612E0101080510234500D0")
88+
assert alarm._arming_mode == ArmingMode.ARMED_HIGHEST
89+
90+
assert callback.call_args_list == [
91+
call(ArmingState.ARMING, ArmingMode.ARMED_HIGHEST),
92+
]
93+
94+
5295
@pytest.mark.asyncio
5396
async def test_arm_away_emits_ascii_payload(
5497
client: Client, connection: Connection

0 commit comments

Comments
 (0)