Do not specify the code_format when a code is not required (#148698)

This commit is contained in:
ekutner 2025-07-14 13:11:36 +03:00 committed by GitHub
parent dcbdce4b2b
commit 25f64a2f36
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 150 additions and 7 deletions

View File

@ -82,7 +82,6 @@ async def async_setup_entry(
class RiscoAlarm(AlarmControlPanelEntity):
"""Representation of a Risco cloud partition."""
_attr_code_format = CodeFormat.NUMBER
_attr_has_entity_name = True
_attr_name = None
@ -100,8 +99,13 @@ class RiscoAlarm(AlarmControlPanelEntity):
self._partition_id = partition_id
self._partition = partition
self._code = code
self._attr_code_arm_required = options[CONF_CODE_ARM_REQUIRED]
self._code_disarm_required = options[CONF_CODE_DISARM_REQUIRED]
arm_required = options[CONF_CODE_ARM_REQUIRED]
disarm_required = options[CONF_CODE_DISARM_REQUIRED]
self._attr_code_arm_required = arm_required
self._code_disarm_required = disarm_required
self._attr_code_format = (
CodeFormat.NUMBER if arm_required or disarm_required else None
)
self._risco_to_ha = options[CONF_RISCO_STATES_TO_HA]
self._ha_to_risco = options[CONF_HA_STATES_TO_RISCO]
for state in self._ha_to_risco:

View File

@ -35,6 +35,7 @@ FIRST_LOCAL_ENTITY_ID = "alarm_control_panel.name_0"
SECOND_LOCAL_ENTITY_ID = "alarm_control_panel.name_1"
CODES_REQUIRED_OPTIONS = {"code_arm_required": True, "code_disarm_required": True}
CODES_NOT_REQUIRED_OPTIONS = {"code_arm_required": False, "code_disarm_required": False}
TEST_RISCO_TO_HA = {
"arm": AlarmControlPanelState.ARMED_AWAY,
"partial_arm": AlarmControlPanelState.ARMED_HOME,
@ -388,7 +389,8 @@ async def test_cloud_sets_full_custom_mapping(
@pytest.mark.parametrize(
"options", [{**CUSTOM_MAPPING_OPTIONS, **CODES_REQUIRED_OPTIONS}]
"options",
[{**CUSTOM_MAPPING_OPTIONS, **CODES_REQUIRED_OPTIONS}],
)
async def test_cloud_sets_with_correct_code(
hass: HomeAssistant, two_part_cloud_alarm, setup_risco_cloud
@ -452,7 +454,58 @@ async def test_cloud_sets_with_correct_code(
@pytest.mark.parametrize(
"options", [{**CUSTOM_MAPPING_OPTIONS, **CODES_REQUIRED_OPTIONS}]
"options",
[{**CUSTOM_MAPPING_OPTIONS, **CODES_NOT_REQUIRED_OPTIONS}],
)
async def test_cloud_sets_without_code(
hass: HomeAssistant, two_part_cloud_alarm, setup_risco_cloud
) -> None:
"""Test settings the various modes when code is not required."""
await _test_cloud_service_call(
hass, SERVICE_ALARM_DISARM, "disarm", FIRST_CLOUD_ENTITY_ID, 0
)
await _test_cloud_service_call(
hass, SERVICE_ALARM_DISARM, "disarm", SECOND_CLOUD_ENTITY_ID, 1
)
await _test_cloud_service_call(
hass, SERVICE_ALARM_ARM_AWAY, "arm", FIRST_CLOUD_ENTITY_ID, 0
)
await _test_cloud_service_call(
hass, SERVICE_ALARM_ARM_AWAY, "arm", SECOND_CLOUD_ENTITY_ID, 1
)
await _test_cloud_service_call(
hass, SERVICE_ALARM_ARM_HOME, "partial_arm", FIRST_CLOUD_ENTITY_ID, 0
)
await _test_cloud_service_call(
hass, SERVICE_ALARM_ARM_HOME, "partial_arm", SECOND_CLOUD_ENTITY_ID, 1
)
await _test_cloud_service_call(
hass, SERVICE_ALARM_ARM_NIGHT, "group_arm", FIRST_CLOUD_ENTITY_ID, 0, "C"
)
await _test_cloud_service_call(
hass, SERVICE_ALARM_ARM_NIGHT, "group_arm", SECOND_CLOUD_ENTITY_ID, 1, "C"
)
with pytest.raises(HomeAssistantError):
await _test_cloud_no_service_call(
hass,
SERVICE_ALARM_ARM_CUSTOM_BYPASS,
"partial_arm",
FIRST_CLOUD_ENTITY_ID,
0,
)
with pytest.raises(HomeAssistantError):
await _test_cloud_no_service_call(
hass,
SERVICE_ALARM_ARM_CUSTOM_BYPASS,
"partial_arm",
SECOND_CLOUD_ENTITY_ID,
1,
)
@pytest.mark.parametrize(
"options",
[{**CUSTOM_MAPPING_OPTIONS, **CODES_REQUIRED_OPTIONS}],
)
async def test_cloud_sets_with_incorrect_code(
hass: HomeAssistant, two_part_cloud_alarm, setup_risco_cloud
@ -837,7 +890,8 @@ async def test_local_sets_full_custom_mapping(
@pytest.mark.parametrize(
"options", [{**CUSTOM_MAPPING_OPTIONS, **CODES_REQUIRED_OPTIONS}]
"options",
[{**CUSTOM_MAPPING_OPTIONS, **CODES_REQUIRED_OPTIONS}],
)
async def test_local_sets_with_correct_code(
hass: HomeAssistant, two_part_local_alarm, setup_risco_local
@ -931,7 +985,8 @@ async def test_local_sets_with_correct_code(
@pytest.mark.parametrize(
"options", [{**CUSTOM_MAPPING_OPTIONS, **CODES_REQUIRED_OPTIONS}]
"options",
[{**CUSTOM_MAPPING_OPTIONS, **CODES_REQUIRED_OPTIONS}],
)
async def test_local_sets_with_incorrect_code(
hass: HomeAssistant, two_part_local_alarm, setup_risco_local
@ -1020,3 +1075,87 @@ async def test_local_sets_with_incorrect_code(
two_part_local_alarm[1],
**code,
)
@pytest.mark.parametrize(
"options",
[{**CUSTOM_MAPPING_OPTIONS, **CODES_NOT_REQUIRED_OPTIONS}],
)
async def test_local_sets_without_code(
hass: HomeAssistant, two_part_local_alarm, setup_risco_local
) -> None:
"""Test settings the various modes when code is not required."""
await _test_local_service_call(
hass,
SERVICE_ALARM_DISARM,
"disarm",
FIRST_LOCAL_ENTITY_ID,
two_part_local_alarm[0],
)
await _test_local_service_call(
hass,
SERVICE_ALARM_DISARM,
"disarm",
SECOND_LOCAL_ENTITY_ID,
two_part_local_alarm[1],
)
await _test_local_service_call(
hass,
SERVICE_ALARM_ARM_AWAY,
"arm",
FIRST_LOCAL_ENTITY_ID,
two_part_local_alarm[0],
)
await _test_local_service_call(
hass,
SERVICE_ALARM_ARM_AWAY,
"arm",
SECOND_LOCAL_ENTITY_ID,
two_part_local_alarm[1],
)
await _test_local_service_call(
hass,
SERVICE_ALARM_ARM_HOME,
"partial_arm",
FIRST_LOCAL_ENTITY_ID,
two_part_local_alarm[0],
)
await _test_local_service_call(
hass,
SERVICE_ALARM_ARM_HOME,
"partial_arm",
SECOND_LOCAL_ENTITY_ID,
two_part_local_alarm[1],
)
await _test_local_service_call(
hass,
SERVICE_ALARM_ARM_NIGHT,
"group_arm",
FIRST_LOCAL_ENTITY_ID,
two_part_local_alarm[0],
"C",
)
await _test_local_service_call(
hass,
SERVICE_ALARM_ARM_NIGHT,
"group_arm",
SECOND_LOCAL_ENTITY_ID,
two_part_local_alarm[1],
"C",
)
with pytest.raises(HomeAssistantError):
await _test_local_no_service_call(
hass,
SERVICE_ALARM_ARM_CUSTOM_BYPASS,
"partial_arm",
FIRST_LOCAL_ENTITY_ID,
two_part_local_alarm[0],
)
with pytest.raises(HomeAssistantError):
await _test_local_no_service_call(
hass,
SERVICE_ALARM_ARM_CUSTOM_BYPASS,
"partial_arm",
SECOND_LOCAL_ENTITY_ID,
two_part_local_alarm[1],
)