Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 9 additions & 34 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -99,18 +99,6 @@ non_interactive = true
# `python -m tools.regenerate_mypy_ignores`. They are sorted easiest-to-fix
# first; clean up a module's errors and re-run the tool to shrink the list.
# Autogenerated mypy overrides: start
[[tool.mypy.overrides]]
module = "zha.application.platforms.button"
disable_error_code = [
"assignment", # 1
]

[[tool.mypy.overrides]]
module = "zha.application.platforms.update"
disable_error_code = [
"arg-type", # 1
]

[[tool.mypy.overrides]]
module = "zha.application.platforms.virtual"
disable_error_code = [
Expand All @@ -129,30 +117,25 @@ disable_error_code = [
"no-any-return", # 2
]

[[tool.mypy.overrides]]
module = "zha.application.platforms.siren"
disable_error_code = [
"assignment", # 2
]

[[tool.mypy.overrides]]
module = "zha.application.discovery"
disable_error_code = [
"no-any-return", # 3
]

[[tool.mypy.overrides]]
module = "zha.application.platforms.binary_sensor"
module = "zha.application.platforms"
disable_error_code = [
"arg-type", # 1
"assignment", # 1
"no-any-return", # 1
"no-untyped-call", # 1
"no-untyped-def", # 1
]

[[tool.mypy.overrides]]
module = "zha.application.platforms.lock"
module = "zha.application.platforms.binary_sensor"
disable_error_code = [
"arg-type", # 2
"no-any-return", # 1
"no-untyped-call", # 1
"no-untyped-def", # 1
]

Expand All @@ -170,14 +153,6 @@ disable_error_code = [
"no-untyped-call", # 1
]

[[tool.mypy.overrides]]
module = "zha.application.platforms"
disable_error_code = [
"arg-type", # 1
"assignment", # 1
"no-any-return", # 2
]

[[tool.mypy.overrides]]
module = "zha.application.platforms.device_tracker"
disable_error_code = [
Expand Down Expand Up @@ -250,7 +225,7 @@ disable_error_code = [
[[tool.mypy.overrides]]
module = "zha.application.platforms.light"
disable_error_code = [
"arg-type", # 5
"arg-type", # 3
"no-any-return", # 4
"no-untyped-call", # 11
"no-untyped-def", # 8
Expand All @@ -268,8 +243,8 @@ disable_error_code = [
[[tool.mypy.overrides]]
module = "zha.application.platforms.sensor"
disable_error_code = [
"arg-type", # 10
"assignment", # 3
"arg-type", # 12
"assignment", # 2
"attr-defined", # 5
"no-any-return", # 9
"no-untyped-call", # 4
Expand Down
22 changes: 11 additions & 11 deletions tests/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ def get_group_entity(
if not isinstance(entity, entity_type):
continue

if qualifier is not None and qualifier not in entity.info_object.unique_id:
if qualifier is not None and qualifier not in entity.state.unique_id:
continue

return entity
Expand Down Expand Up @@ -285,7 +285,7 @@ def get_entity(
if exact_entity_type is not None and type(entity) is not exact_entity_type:
continue

if qualifier is not None and qualifier not in entity.info_object.unique_id:
if qualifier is not None and qualifier not in entity.state.unique_id:
continue

if not qualifier_func(entity):
Expand All @@ -311,51 +311,51 @@ async def group_entity_availability_test(
):
"""Test group entity availability handling."""

assert entity.state["available"] is True
assert entity.state.available is True

device_1.on_network = False
await asyncio.sleep(0.1)
await zha_gateway.async_block_till_done()
assert entity.state["available"] is True
assert entity.state.available is True

device_2.on_network = False
await asyncio.sleep(0.1)
await zha_gateway.async_block_till_done()

assert entity.state["available"] is False
assert entity.state.available is False

device_1.on_network = True
await asyncio.sleep(0.1)
await zha_gateway.async_block_till_done()
assert entity.state["available"] is True
assert entity.state.available is True

device_2.on_network = True
await asyncio.sleep(0.1)
await zha_gateway.async_block_till_done()

assert entity.state["available"] is True
assert entity.state.available is True

device_1.available = False
await asyncio.sleep(0.1)
await zha_gateway.async_block_till_done()
assert entity.state["available"] is True
assert entity.state.available is True

device_2.available = False
await asyncio.sleep(0.1)
await zha_gateway.async_block_till_done()

assert entity.state["available"] is False
assert entity.state.available is False

device_1.available = True
await asyncio.sleep(0.1)
await zha_gateway.async_block_till_done()
assert entity.state["available"] is True
assert entity.state.available is True

device_2.available = True
await asyncio.sleep(0.1)
await zha_gateway.async_block_till_done()

assert entity.state["available"] is True
assert entity.state.available is True


def zigpy_device_from_device_data( # noqa: C901
Expand Down
42 changes: 21 additions & 21 deletions tests/test_alarm_control_panel.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ async def test_alarm_control_panel(
assert isinstance(alarm_entity, AlarmControlPanel)

# test that the state is STATE_ALARM_DISARMED
assert alarm_entity.state["state"] == AlarmState.DISARMED
assert alarm_entity.state.alarm_state == AlarmState.DISARMED

# arm_away
cluster.client_command.reset_mock()
Expand All @@ -60,7 +60,7 @@ async def test_alarm_control_panel(
security.IasAce.AudibleNotification.Default_Sound,
security.IasAce.AlarmStatus.No_Alarm,
)
assert alarm_entity.state["state"] == AlarmState.ARMED_AWAY
assert alarm_entity.state.alarm_state == AlarmState.ARMED_AWAY # type: ignore[comparison-overlap]

# disarm
await reset_alarm_panel(zha_gateway, cluster, alarm_entity)
Expand All @@ -69,7 +69,7 @@ async def test_alarm_control_panel(
cluster.client_command.reset_mock()
await alarm_entity.async_alarm_arm_away("4321")
await zha_gateway.async_block_till_done()
assert alarm_entity.state["state"] == AlarmState.ARMED_AWAY
assert alarm_entity.state.alarm_state == AlarmState.ARMED_AWAY
cluster.client_command.reset_mock()

# now simulate a faulty code entry sequence
Expand All @@ -78,7 +78,7 @@ async def test_alarm_control_panel(
await alarm_entity.async_alarm_disarm("0000")
await zha_gateway.async_block_till_done()

assert alarm_entity.state["state"] == AlarmState.TRIGGERED
assert alarm_entity.state.alarm_state == AlarmState.TRIGGERED
assert cluster.client_command.call_count == 6
assert cluster.client_command.await_count == 6
assert cluster.client_command.call_args == call(
Expand All @@ -95,7 +95,7 @@ async def test_alarm_control_panel(
# arm_home
await alarm_entity.async_alarm_arm_home("4321")
await zha_gateway.async_block_till_done()
assert alarm_entity.state["state"] == AlarmState.ARMED_HOME
assert alarm_entity.state.alarm_state == AlarmState.ARMED_HOME
assert cluster.client_command.call_count == 2
assert cluster.client_command.await_count == 2
assert cluster.client_command.call_args == call(
Expand All @@ -112,7 +112,7 @@ async def test_alarm_control_panel(
# arm_night
await alarm_entity.async_alarm_arm_night("4321")
await zha_gateway.async_block_till_done()
assert alarm_entity.state["state"] == AlarmState.ARMED_NIGHT
assert alarm_entity.state.alarm_state == AlarmState.ARMED_NIGHT
assert cluster.client_command.call_count == 2
assert cluster.client_command.await_count == 2
assert cluster.client_command.call_args == call(
Expand All @@ -131,7 +131,7 @@ async def test_alarm_control_panel(
"cluster_command", 1, 0, [security.IasAce.ArmMode.Arm_All_Zones, "", 0]
)
await zha_gateway.async_block_till_done()
assert alarm_entity.state["state"] == AlarmState.ARMED_AWAY
assert alarm_entity.state.alarm_state == AlarmState.ARMED_AWAY

# reset the panel
await reset_alarm_panel(zha_gateway, cluster, alarm_entity)
Expand All @@ -141,7 +141,7 @@ async def test_alarm_control_panel(
"cluster_command", 1, 0, [security.IasAce.ArmMode.Arm_Day_Home_Only, "", 0]
)
await zha_gateway.async_block_till_done()
assert alarm_entity.state["state"] == AlarmState.ARMED_HOME
assert alarm_entity.state.alarm_state == AlarmState.ARMED_HOME

# reset the panel
await reset_alarm_panel(zha_gateway, cluster, alarm_entity)
Expand All @@ -151,74 +151,74 @@ async def test_alarm_control_panel(
"cluster_command", 1, 0, [security.IasAce.ArmMode.Arm_Night_Sleep_Only, "", 0]
)
await zha_gateway.async_block_till_done()
assert alarm_entity.state["state"] == AlarmState.ARMED_NIGHT
assert alarm_entity.state.alarm_state == AlarmState.ARMED_NIGHT

# disarm from panel with bad code
cluster.listener_event(
"cluster_command", 1, 0, [security.IasAce.ArmMode.Disarm, "", 0]
)
await zha_gateway.async_block_till_done()
assert alarm_entity.state["state"] == AlarmState.ARMED_NIGHT
assert alarm_entity.state.alarm_state == AlarmState.ARMED_NIGHT

# disarm from panel with bad code for 2nd time still armed
cluster.listener_event(
"cluster_command", 1, 0, [security.IasAce.ArmMode.Disarm, "", 0]
)
await zha_gateway.async_block_till_done()
assert alarm_entity.state["state"] == AlarmState.TRIGGERED
assert alarm_entity.state.alarm_state == AlarmState.TRIGGERED

# disarm from panel with good code
cluster.listener_event(
"cluster_command", 1, 0, [security.IasAce.ArmMode.Disarm, "4321", 0]
)
await zha_gateway.async_block_till_done()
assert alarm_entity.state["state"] == AlarmState.DISARMED
assert alarm_entity.state.alarm_state == AlarmState.DISARMED

# disarm when already disarmed
cluster.listener_event(
"cluster_command", 1, 0, [security.IasAce.ArmMode.Disarm, "4321", 0]
)
await zha_gateway.async_block_till_done()
assert alarm_entity.state["state"] == AlarmState.DISARMED
assert alarm_entity.state.alarm_state == AlarmState.DISARMED
assert "IAS ACE already disarmed" in caplog.text

# panic from panel
cluster.listener_event("cluster_command", 1, 4, [])
await zha_gateway.async_block_till_done()
assert alarm_entity.state["state"] == AlarmState.TRIGGERED
assert alarm_entity.state.alarm_state == AlarmState.TRIGGERED

# reset the panel
await reset_alarm_panel(zha_gateway, cluster, alarm_entity)

# fire from panel
cluster.listener_event("cluster_command", 1, 3, [])
await zha_gateway.async_block_till_done()
assert alarm_entity.state["state"] == AlarmState.TRIGGERED
assert alarm_entity.state.alarm_state == AlarmState.TRIGGERED

# reset the panel
await reset_alarm_panel(zha_gateway, cluster, alarm_entity)

# emergency from panel
cluster.listener_event("cluster_command", 1, 2, [])
await zha_gateway.async_block_till_done()
assert alarm_entity.state["state"] == AlarmState.TRIGGERED
assert alarm_entity.state.alarm_state == AlarmState.TRIGGERED

# reset the panel
await reset_alarm_panel(zha_gateway, cluster, alarm_entity)
assert alarm_entity.state["state"] == AlarmState.DISARMED
assert alarm_entity.state.alarm_state == AlarmState.DISARMED

await alarm_entity.async_alarm_trigger()
await zha_gateway.async_block_till_done()
assert alarm_entity.state["state"] == AlarmState.TRIGGERED
assert alarm_entity.state.alarm_state == AlarmState.TRIGGERED

# reset the panel
await reset_alarm_panel(zha_gateway, cluster, alarm_entity)
assert alarm_entity.state["state"] == AlarmState.DISARMED
assert alarm_entity.state.alarm_state == AlarmState.DISARMED

alarm_entity.code_required_arm_actions = True
await alarm_entity.async_alarm_arm_away()
await zha_gateway.async_block_till_done()
assert alarm_entity.state["state"] == AlarmState.DISARMED
assert alarm_entity.state.alarm_state == AlarmState.DISARMED
assert "Invalid code supplied to IAS ACE" in caplog.text


Expand All @@ -231,7 +231,7 @@ async def reset_alarm_panel(
cluster.client_command.reset_mock()
await entity.async_alarm_disarm("4321")
await zha_gateway.async_block_till_done()
assert entity.state["state"] == AlarmState.DISARMED
assert entity.state.alarm_state == AlarmState.DISARMED
assert cluster.client_command.call_count == 2
assert cluster.client_command.await_count == 2
assert cluster.client_command.call_args == call(
Expand Down
Loading
Loading