Skip to content

Commit b4eb73b

Browse files
authored
Improve tests for Tuya alarm control panel (home-assistant#156481)
1 parent 0ac3f77 commit b4eb73b

File tree

1 file changed

+44
-35
lines changed

1 file changed

+44
-35
lines changed

tests/components/tuya/test_alarm_control_panel.py

Lines changed: 44 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -80,54 +80,63 @@ async def test_service(
8080
mock_manager.send_commands.assert_called_once_with(mock_device.id, [command])
8181

8282

83+
@patch("homeassistant.components.tuya.PLATFORMS", [Platform.ALARM_CONTROL_PANEL])
8384
@pytest.mark.parametrize(
8485
"mock_device_code",
8586
["mal_gyitctrjj1kefxp2"],
8687
)
87-
async def test_alarm_state_triggered(
88-
hass: HomeAssistant,
89-
mock_manager: Manager,
90-
mock_config_entry: MockConfigEntry,
91-
mock_device: CustomerDevice,
92-
) -> None:
93-
"""Test alarm state returns TRIGGERED for non-battery alarms."""
94-
entity_id = "alarm_control_panel.multifunction_alarm"
95-
96-
# Set up alarm state without battery warning
97-
mock_device.status["master_state"] = "alarm"
98-
mock_device.status["alarm_msg"] = (
99-
"AFQAZQBzAHQAIABTAGUAbgBzAG8Acg==" # "Test Sensor" in UTF-16BE
100-
)
101-
102-
await initialize_entry(hass, mock_manager, mock_config_entry, mock_device)
103-
104-
state = hass.states.get(entity_id)
105-
assert state is not None, f"{entity_id} does not exist"
106-
assert state.state == AlarmControlPanelState.TRIGGERED
107-
108-
10988
@pytest.mark.parametrize(
110-
"mock_device_code",
111-
["mal_gyitctrjj1kefxp2"],
89+
("status_updates", "expected_state"),
90+
[
91+
(
92+
{"master_mode": "disarmed"},
93+
AlarmControlPanelState.DISARMED,
94+
),
95+
(
96+
{"master_mode": "arm"},
97+
AlarmControlPanelState.ARMED_AWAY,
98+
),
99+
(
100+
{"master_mode": "home"},
101+
AlarmControlPanelState.ARMED_HOME,
102+
),
103+
(
104+
{"master_mode": "sos"},
105+
AlarmControlPanelState.TRIGGERED,
106+
),
107+
(
108+
{
109+
"master_mode": "home",
110+
"master_state": "alarm",
111+
# "Test Sensor" in UTF-16BE
112+
"alarm_msg": "AFQAZQBzAHQAIABTAGUAbgBzAG8Acg==",
113+
},
114+
AlarmControlPanelState.TRIGGERED,
115+
),
116+
(
117+
{
118+
"master_mode": "home",
119+
"master_state": "alarm",
120+
# "Sensor Low Battery Test Sensor" in UTF-16BE
121+
"alarm_msg": "AFMAZQBuAHMAbwByACAATABvAHcAIABCAGEAdAB0AGUAcgB5ACAAVABlAHMAdAAgAFMAZQBuAHMAbwBy",
122+
},
123+
AlarmControlPanelState.ARMED_HOME,
124+
),
125+
],
112126
)
113-
async def test_alarm_state_battery_warning(
127+
async def test_state(
114128
hass: HomeAssistant,
115129
mock_manager: Manager,
116130
mock_config_entry: MockConfigEntry,
117131
mock_device: CustomerDevice,
132+
status_updates: dict[str, Any],
133+
expected_state: str,
118134
) -> None:
119-
"""Test alarm state ignores battery warnings."""
135+
"""Test state."""
120136
entity_id = "alarm_control_panel.multifunction_alarm"
121-
122-
# Set up alarm state with battery warning
123-
mock_device.status["master_state"] = "alarm"
124-
mock_device.status["alarm_msg"] = (
125-
"AFMAZQBuAHMAbwByACAATABvAHcAIABCAGEAdAB0AGUAcgB5ACAAVABlAHMAdAAgAFMAZQBuAHMAbwBy" # "Sensor Low Battery Test Sensor" in UTF-16BE
126-
)
127-
137+
mock_device.status.update(status_updates)
128138
await initialize_entry(hass, mock_manager, mock_config_entry, mock_device)
129139

130140
state = hass.states.get(entity_id)
131141
assert state is not None, f"{entity_id} does not exist"
132-
# Should not be triggered for battery warnings
133-
assert state.state != AlarmControlPanelState.TRIGGERED
142+
assert state.state == expected_state

0 commit comments

Comments
 (0)