Improve homekit_controller tests (#65266)

This commit is contained in:
Jc2k 2022-01-30 22:59:39 +00:00 committed by GitHub
parent eb94fe1ca7
commit 58b8c30221
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 1487 additions and 650 deletions

View file

@ -4,15 +4,6 @@ from aiohomekit.model.services import ServicesTypes
from tests.components.homekit_controller.common import setup_test_component
V1_ON = ("fan", "on")
V1_ROTATION_DIRECTION = ("fan", "rotation.direction")
V1_ROTATION_SPEED = ("fan", "rotation.speed")
V2_ACTIVE = ("fanv2", "active")
V2_ROTATION_DIRECTION = ("fanv2", "rotation.direction")
V2_ROTATION_SPEED = ("fanv2", "rotation.speed")
V2_SWING_MODE = ("fanv2", "swing-mode")
def create_fan_service(accessory):
"""
@ -86,12 +77,14 @@ async def test_fan_read_state(hass, utcnow):
"""Test that we can read the state of a HomeKit fan accessory."""
helper = await setup_test_component(hass, create_fan_service)
helper.characteristics[V1_ON].value = False
state = await helper.poll_and_get_state()
state = await helper.async_update(
ServicesTypes.FAN, {CharacteristicsTypes.ON: False}
)
assert state.state == "off"
helper.characteristics[V1_ON].value = True
state = await helper.poll_and_get_state()
state = await helper.async_update(
ServicesTypes.FAN, {CharacteristicsTypes.ON: True}
)
assert state.state == "on"
@ -105,8 +98,13 @@ async def test_turn_on(hass, utcnow):
{"entity_id": "fan.testdevice", "speed": "high"},
blocking=True,
)
assert helper.characteristics[V1_ON].value == 1
assert helper.characteristics[V1_ROTATION_SPEED].value == 100
helper.async_assert_service_values(
ServicesTypes.FAN,
{
CharacteristicsTypes.ON: 1,
CharacteristicsTypes.ROTATION_SPEED: 100,
},
)
await hass.services.async_call(
"fan",
@ -114,8 +112,13 @@ async def test_turn_on(hass, utcnow):
{"entity_id": "fan.testdevice", "speed": "medium"},
blocking=True,
)
assert helper.characteristics[V1_ON].value == 1
assert helper.characteristics[V1_ROTATION_SPEED].value == 66.0
helper.async_assert_service_values(
ServicesTypes.FAN,
{
CharacteristicsTypes.ON: 1,
CharacteristicsTypes.ROTATION_SPEED: 66.0,
},
)
await hass.services.async_call(
"fan",
@ -123,8 +126,13 @@ async def test_turn_on(hass, utcnow):
{"entity_id": "fan.testdevice", "speed": "low"},
blocking=True,
)
assert helper.characteristics[V1_ON].value == 1
assert helper.characteristics[V1_ROTATION_SPEED].value == 33.0
helper.async_assert_service_values(
ServicesTypes.FAN,
{
CharacteristicsTypes.ON: 1,
CharacteristicsTypes.ROTATION_SPEED: 33.0,
},
)
async def test_turn_on_off_without_rotation_speed(hass, utcnow):
@ -139,7 +147,12 @@ async def test_turn_on_off_without_rotation_speed(hass, utcnow):
{"entity_id": "fan.testdevice"},
blocking=True,
)
assert helper.characteristics[V2_ACTIVE].value == 1
helper.async_assert_service_values(
ServicesTypes.FAN_V2,
{
CharacteristicsTypes.ACTIVE: 1,
},
)
await hass.services.async_call(
"fan",
@ -147,14 +160,19 @@ async def test_turn_on_off_without_rotation_speed(hass, utcnow):
{"entity_id": "fan.testdevice"},
blocking=True,
)
assert helper.characteristics[V2_ACTIVE].value == 0
helper.async_assert_service_values(
ServicesTypes.FAN_V2,
{
CharacteristicsTypes.ACTIVE: 0,
},
)
async def test_turn_off(hass, utcnow):
"""Test that we can turn a fan off."""
helper = await setup_test_component(hass, create_fan_service)
helper.characteristics[V1_ON].value = 1
await helper.async_update(ServicesTypes.FAN, {CharacteristicsTypes.ON: 1})
await hass.services.async_call(
"fan",
@ -162,14 +180,19 @@ async def test_turn_off(hass, utcnow):
{"entity_id": "fan.testdevice"},
blocking=True,
)
assert helper.characteristics[V1_ON].value == 0
helper.async_assert_service_values(
ServicesTypes.FAN,
{
CharacteristicsTypes.ON: 0,
},
)
async def test_set_speed(hass, utcnow):
"""Test that we set fan speed."""
helper = await setup_test_component(hass, create_fan_service)
helper.characteristics[V1_ON].value = 1
await helper.async_update(ServicesTypes.FAN, {CharacteristicsTypes.ON: 1})
await hass.services.async_call(
"fan",
@ -177,7 +200,12 @@ async def test_set_speed(hass, utcnow):
{"entity_id": "fan.testdevice", "speed": "high"},
blocking=True,
)
assert helper.characteristics[V1_ROTATION_SPEED].value == 100
helper.async_assert_service_values(
ServicesTypes.FAN,
{
CharacteristicsTypes.ROTATION_SPEED: 100.0,
},
)
await hass.services.async_call(
"fan",
@ -185,7 +213,12 @@ async def test_set_speed(hass, utcnow):
{"entity_id": "fan.testdevice", "speed": "medium"},
blocking=True,
)
assert helper.characteristics[V1_ROTATION_SPEED].value == 66.0
helper.async_assert_service_values(
ServicesTypes.FAN,
{
CharacteristicsTypes.ROTATION_SPEED: 66.0,
},
)
await hass.services.async_call(
"fan",
@ -193,7 +226,12 @@ async def test_set_speed(hass, utcnow):
{"entity_id": "fan.testdevice", "speed": "low"},
blocking=True,
)
assert helper.characteristics[V1_ROTATION_SPEED].value == 33.0
helper.async_assert_service_values(
ServicesTypes.FAN,
{
CharacteristicsTypes.ROTATION_SPEED: 33.0,
},
)
await hass.services.async_call(
"fan",
@ -201,14 +239,19 @@ async def test_set_speed(hass, utcnow):
{"entity_id": "fan.testdevice", "speed": "off"},
blocking=True,
)
assert helper.characteristics[V1_ON].value == 0
helper.async_assert_service_values(
ServicesTypes.FAN,
{
CharacteristicsTypes.ON: 0,
},
)
async def test_set_percentage(hass, utcnow):
"""Test that we set fan speed by percentage."""
helper = await setup_test_component(hass, create_fan_service)
helper.characteristics[V1_ON].value = 1
await helper.async_update(ServicesTypes.FAN, {CharacteristicsTypes.ON: 1})
await hass.services.async_call(
"fan",
@ -216,7 +259,12 @@ async def test_set_percentage(hass, utcnow):
{"entity_id": "fan.testdevice", "percentage": 66},
blocking=True,
)
assert helper.characteristics[V1_ROTATION_SPEED].value == 66
helper.async_assert_service_values(
ServicesTypes.FAN,
{
CharacteristicsTypes.ROTATION_SPEED: 66,
},
)
await hass.services.async_call(
"fan",
@ -224,33 +272,54 @@ async def test_set_percentage(hass, utcnow):
{"entity_id": "fan.testdevice", "percentage": 0},
blocking=True,
)
assert helper.characteristics[V1_ON].value == 0
helper.async_assert_service_values(
ServicesTypes.FAN,
{
CharacteristicsTypes.ON: 0,
},
)
async def test_speed_read(hass, utcnow):
"""Test that we can read a fans oscillation."""
helper = await setup_test_component(hass, create_fan_service)
helper.characteristics[V1_ON].value = 1
helper.characteristics[V1_ROTATION_SPEED].value = 100
state = await helper.poll_and_get_state()
state = await helper.async_update(
ServicesTypes.FAN,
{
CharacteristicsTypes.ON: 1,
CharacteristicsTypes.ROTATION_SPEED: 100,
},
)
assert state.attributes["speed"] == "high"
assert state.attributes["percentage"] == 100
assert state.attributes["percentage_step"] == 1.0
helper.characteristics[V1_ROTATION_SPEED].value = 50
state = await helper.poll_and_get_state()
state = await helper.async_update(
ServicesTypes.FAN,
{
CharacteristicsTypes.ROTATION_SPEED: 50,
},
)
assert state.attributes["speed"] == "medium"
assert state.attributes["percentage"] == 50
helper.characteristics[V1_ROTATION_SPEED].value = 25
state = await helper.poll_and_get_state()
state = await helper.async_update(
ServicesTypes.FAN,
{
CharacteristicsTypes.ROTATION_SPEED: 25,
},
)
assert state.attributes["speed"] == "low"
assert state.attributes["percentage"] == 25
helper.characteristics[V1_ON].value = 0
helper.characteristics[V1_ROTATION_SPEED].value = 0
state = await helper.poll_and_get_state()
state = await helper.async_update(
ServicesTypes.FAN,
{
CharacteristicsTypes.ON: 0,
CharacteristicsTypes.ROTATION_SPEED: 0,
},
)
assert state.attributes["speed"] == "off"
assert state.attributes["percentage"] == 0
@ -265,7 +334,12 @@ async def test_set_direction(hass, utcnow):
{"entity_id": "fan.testdevice", "direction": "reverse"},
blocking=True,
)
assert helper.characteristics[V1_ROTATION_DIRECTION].value == 1
helper.async_assert_service_values(
ServicesTypes.FAN,
{
CharacteristicsTypes.ROTATION_DIRECTION: 1,
},
)
await hass.services.async_call(
"fan",
@ -273,19 +347,26 @@ async def test_set_direction(hass, utcnow):
{"entity_id": "fan.testdevice", "direction": "forward"},
blocking=True,
)
assert helper.characteristics[V1_ROTATION_DIRECTION].value == 0
helper.async_assert_service_values(
ServicesTypes.FAN,
{
CharacteristicsTypes.ROTATION_DIRECTION: 0,
},
)
async def test_direction_read(hass, utcnow):
"""Test that we can read a fans oscillation."""
helper = await setup_test_component(hass, create_fan_service)
helper.characteristics[V1_ROTATION_DIRECTION].value = 0
state = await helper.poll_and_get_state()
state = await helper.async_update(
ServicesTypes.FAN, {CharacteristicsTypes.ROTATION_DIRECTION: 0}
)
assert state.attributes["direction"] == "forward"
helper.characteristics[V1_ROTATION_DIRECTION].value = 1
state = await helper.poll_and_get_state()
state = await helper.async_update(
ServicesTypes.FAN, {CharacteristicsTypes.ROTATION_DIRECTION: 1}
)
assert state.attributes["direction"] == "reverse"
@ -293,12 +374,14 @@ async def test_fanv2_read_state(hass, utcnow):
"""Test that we can read the state of a HomeKit fan accessory."""
helper = await setup_test_component(hass, create_fanv2_service)
helper.characteristics[V2_ACTIVE].value = False
state = await helper.poll_and_get_state()
state = await helper.async_update(
ServicesTypes.FAN_V2, {CharacteristicsTypes.ACTIVE: False}
)
assert state.state == "off"
helper.characteristics[V2_ACTIVE].value = True
state = await helper.poll_and_get_state()
state = await helper.async_update(
ServicesTypes.FAN_V2, {CharacteristicsTypes.ACTIVE: True}
)
assert state.state == "on"
@ -312,8 +395,13 @@ async def test_v2_turn_on(hass, utcnow):
{"entity_id": "fan.testdevice", "speed": "high"},
blocking=True,
)
assert helper.characteristics[V2_ACTIVE].value == 1
assert helper.characteristics[V2_ROTATION_SPEED].value == 100
helper.async_assert_service_values(
ServicesTypes.FAN_V2,
{
CharacteristicsTypes.ACTIVE: 1,
CharacteristicsTypes.ROTATION_SPEED: 100,
},
)
await hass.services.async_call(
"fan",
@ -321,8 +409,13 @@ async def test_v2_turn_on(hass, utcnow):
{"entity_id": "fan.testdevice", "speed": "medium"},
blocking=True,
)
assert helper.characteristics[V2_ACTIVE].value == 1
assert helper.characteristics[V2_ROTATION_SPEED].value == 66.0
helper.async_assert_service_values(
ServicesTypes.FAN_V2,
{
CharacteristicsTypes.ACTIVE: 1,
CharacteristicsTypes.ROTATION_SPEED: 66,
},
)
await hass.services.async_call(
"fan",
@ -330,8 +423,13 @@ async def test_v2_turn_on(hass, utcnow):
{"entity_id": "fan.testdevice", "speed": "low"},
blocking=True,
)
assert helper.characteristics[V2_ACTIVE].value == 1
assert helper.characteristics[V2_ROTATION_SPEED].value == 33.0
helper.async_assert_service_values(
ServicesTypes.FAN_V2,
{
CharacteristicsTypes.ACTIVE: 1,
CharacteristicsTypes.ROTATION_SPEED: 33,
},
)
await hass.services.async_call(
"fan",
@ -339,8 +437,13 @@ async def test_v2_turn_on(hass, utcnow):
{"entity_id": "fan.testdevice"},
blocking=True,
)
assert helper.characteristics[V2_ACTIVE].value == 0
assert helper.characteristics[V2_ROTATION_SPEED].value == 33.0
helper.async_assert_service_values(
ServicesTypes.FAN_V2,
{
CharacteristicsTypes.ACTIVE: 0,
CharacteristicsTypes.ROTATION_SPEED: 33,
},
)
await hass.services.async_call(
"fan",
@ -348,15 +451,20 @@ async def test_v2_turn_on(hass, utcnow):
{"entity_id": "fan.testdevice"},
blocking=True,
)
assert helper.characteristics[V2_ACTIVE].value == 1
assert helper.characteristics[V2_ROTATION_SPEED].value == 33.0
helper.async_assert_service_values(
ServicesTypes.FAN_V2,
{
CharacteristicsTypes.ACTIVE: 1,
CharacteristicsTypes.ROTATION_SPEED: 33,
},
)
async def test_v2_turn_off(hass, utcnow):
"""Test that we can turn a fan off."""
helper = await setup_test_component(hass, create_fanv2_service)
helper.characteristics[V2_ACTIVE].value = 1
await helper.async_update(ServicesTypes.FAN_V2, {CharacteristicsTypes.ACTIVE: 1})
await hass.services.async_call(
"fan",
@ -364,14 +472,19 @@ async def test_v2_turn_off(hass, utcnow):
{"entity_id": "fan.testdevice"},
blocking=True,
)
assert helper.characteristics[V2_ACTIVE].value == 0
helper.async_assert_service_values(
ServicesTypes.FAN_V2,
{
CharacteristicsTypes.ACTIVE: 0,
},
)
async def test_v2_set_speed(hass, utcnow):
"""Test that we set fan speed."""
helper = await setup_test_component(hass, create_fanv2_service)
helper.characteristics[V2_ACTIVE].value = 1
await helper.async_update(ServicesTypes.FAN_V2, {CharacteristicsTypes.ACTIVE: 1})
await hass.services.async_call(
"fan",
@ -379,7 +492,12 @@ async def test_v2_set_speed(hass, utcnow):
{"entity_id": "fan.testdevice", "speed": "high"},
blocking=True,
)
assert helper.characteristics[V2_ROTATION_SPEED].value == 100
helper.async_assert_service_values(
ServicesTypes.FAN_V2,
{
CharacteristicsTypes.ROTATION_SPEED: 100,
},
)
await hass.services.async_call(
"fan",
@ -387,7 +505,12 @@ async def test_v2_set_speed(hass, utcnow):
{"entity_id": "fan.testdevice", "speed": "medium"},
blocking=True,
)
assert helper.characteristics[V2_ROTATION_SPEED].value == 66
helper.async_assert_service_values(
ServicesTypes.FAN_V2,
{
CharacteristicsTypes.ROTATION_SPEED: 66,
},
)
await hass.services.async_call(
"fan",
@ -395,7 +518,12 @@ async def test_v2_set_speed(hass, utcnow):
{"entity_id": "fan.testdevice", "speed": "low"},
blocking=True,
)
assert helper.characteristics[V2_ROTATION_SPEED].value == 33
helper.async_assert_service_values(
ServicesTypes.FAN_V2,
{
CharacteristicsTypes.ROTATION_SPEED: 33,
},
)
await hass.services.async_call(
"fan",
@ -403,14 +531,19 @@ async def test_v2_set_speed(hass, utcnow):
{"entity_id": "fan.testdevice", "speed": "off"},
blocking=True,
)
assert helper.characteristics[V2_ACTIVE].value == 0
helper.async_assert_service_values(
ServicesTypes.FAN_V2,
{
CharacteristicsTypes.ACTIVE: 0,
},
)
async def test_v2_set_percentage(hass, utcnow):
"""Test that we set fan speed by percentage."""
helper = await setup_test_component(hass, create_fanv2_service)
helper.characteristics[V2_ACTIVE].value = 1
await helper.async_update(ServicesTypes.FAN_V2, {CharacteristicsTypes.ACTIVE: 1})
await hass.services.async_call(
"fan",
@ -418,7 +551,12 @@ async def test_v2_set_percentage(hass, utcnow):
{"entity_id": "fan.testdevice", "percentage": 66},
blocking=True,
)
assert helper.characteristics[V2_ROTATION_SPEED].value == 66
helper.async_assert_service_values(
ServicesTypes.FAN_V2,
{
CharacteristicsTypes.ROTATION_SPEED: 66,
},
)
await hass.services.async_call(
"fan",
@ -426,14 +564,19 @@ async def test_v2_set_percentage(hass, utcnow):
{"entity_id": "fan.testdevice", "percentage": 0},
blocking=True,
)
assert helper.characteristics[V2_ACTIVE].value == 0
helper.async_assert_service_values(
ServicesTypes.FAN_V2,
{
CharacteristicsTypes.ACTIVE: 0,
},
)
async def test_v2_set_percentage_with_min_step(hass, utcnow):
"""Test that we set fan speed by percentage."""
helper = await setup_test_component(hass, create_fanv2_service_with_min_step)
helper.characteristics[V2_ACTIVE].value = 1
await helper.async_update(ServicesTypes.FAN_V2, {CharacteristicsTypes.ACTIVE: 1})
await hass.services.async_call(
"fan",
@ -441,7 +584,12 @@ async def test_v2_set_percentage_with_min_step(hass, utcnow):
{"entity_id": "fan.testdevice", "percentage": 66},
blocking=True,
)
assert helper.characteristics[V2_ROTATION_SPEED].value == 75
helper.async_assert_service_values(
ServicesTypes.FAN_V2,
{
CharacteristicsTypes.ROTATION_SPEED: 75,
},
)
await hass.services.async_call(
"fan",
@ -449,32 +597,53 @@ async def test_v2_set_percentage_with_min_step(hass, utcnow):
{"entity_id": "fan.testdevice", "percentage": 0},
blocking=True,
)
assert helper.characteristics[V2_ACTIVE].value == 0
helper.async_assert_service_values(
ServicesTypes.FAN_V2,
{
CharacteristicsTypes.ACTIVE: 0,
},
)
async def test_v2_speed_read(hass, utcnow):
"""Test that we can read a fans oscillation."""
helper = await setup_test_component(hass, create_fanv2_service)
helper.characteristics[V2_ACTIVE].value = 1
helper.characteristics[V2_ROTATION_SPEED].value = 100
state = await helper.poll_and_get_state()
state = await helper.async_update(
ServicesTypes.FAN_V2,
{
CharacteristicsTypes.ACTIVE: 1,
CharacteristicsTypes.ROTATION_SPEED: 100,
},
)
assert state.attributes["speed"] == "high"
assert state.attributes["percentage"] == 100
helper.characteristics[V2_ROTATION_SPEED].value = 50
state = await helper.poll_and_get_state()
state = await helper.async_update(
ServicesTypes.FAN_V2,
{
CharacteristicsTypes.ROTATION_SPEED: 50,
},
)
assert state.attributes["speed"] == "medium"
assert state.attributes["percentage"] == 50
helper.characteristics[V2_ROTATION_SPEED].value = 25
state = await helper.poll_and_get_state()
state = await helper.async_update(
ServicesTypes.FAN_V2,
{
CharacteristicsTypes.ROTATION_SPEED: 25,
},
)
assert state.attributes["speed"] == "low"
assert state.attributes["percentage"] == 25
helper.characteristics[V2_ACTIVE].value = 0
helper.characteristics[V2_ROTATION_SPEED].value = 0
state = await helper.poll_and_get_state()
state = await helper.async_update(
ServicesTypes.FAN_V2,
{
CharacteristicsTypes.ACTIVE: 0,
CharacteristicsTypes.ROTATION_SPEED: 0,
},
)
assert state.attributes["speed"] == "off"
assert state.attributes["percentage"] == 0
@ -489,7 +658,12 @@ async def test_v2_set_direction(hass, utcnow):
{"entity_id": "fan.testdevice", "direction": "reverse"},
blocking=True,
)
assert helper.characteristics[V2_ROTATION_DIRECTION].value == 1
helper.async_assert_service_values(
ServicesTypes.FAN_V2,
{
CharacteristicsTypes.ROTATION_DIRECTION: 1,
},
)
await hass.services.async_call(
"fan",
@ -497,19 +671,26 @@ async def test_v2_set_direction(hass, utcnow):
{"entity_id": "fan.testdevice", "direction": "forward"},
blocking=True,
)
assert helper.characteristics[V2_ROTATION_DIRECTION].value == 0
helper.async_assert_service_values(
ServicesTypes.FAN_V2,
{
CharacteristicsTypes.ROTATION_DIRECTION: 0,
},
)
async def test_v2_direction_read(hass, utcnow):
"""Test that we can read a fans oscillation."""
helper = await setup_test_component(hass, create_fanv2_service)
helper.characteristics[V2_ROTATION_DIRECTION].value = 0
state = await helper.poll_and_get_state()
state = await helper.async_update(
ServicesTypes.FAN_V2, {CharacteristicsTypes.ROTATION_DIRECTION: 0}
)
assert state.attributes["direction"] == "forward"
helper.characteristics[V2_ROTATION_DIRECTION].value = 1
state = await helper.poll_and_get_state()
state = await helper.async_update(
ServicesTypes.FAN_V2, {CharacteristicsTypes.ROTATION_DIRECTION: 1}
)
assert state.attributes["direction"] == "reverse"
@ -523,7 +704,12 @@ async def test_v2_oscillate(hass, utcnow):
{"entity_id": "fan.testdevice", "oscillating": True},
blocking=True,
)
assert helper.characteristics[V2_SWING_MODE].value == 1
helper.async_assert_service_values(
ServicesTypes.FAN_V2,
{
CharacteristicsTypes.SWING_MODE: 1,
},
)
await hass.services.async_call(
"fan",
@ -531,17 +717,24 @@ async def test_v2_oscillate(hass, utcnow):
{"entity_id": "fan.testdevice", "oscillating": False},
blocking=True,
)
assert helper.characteristics[V2_SWING_MODE].value == 0
helper.async_assert_service_values(
ServicesTypes.FAN_V2,
{
CharacteristicsTypes.SWING_MODE: 0,
},
)
async def test_v2_oscillate_read(hass, utcnow):
"""Test that we can read a fans oscillation."""
helper = await setup_test_component(hass, create_fanv2_service)
helper.characteristics[V2_SWING_MODE].value = 0
state = await helper.poll_and_get_state()
state = await helper.async_update(
ServicesTypes.FAN_V2, {CharacteristicsTypes.SWING_MODE: 0}
)
assert state.attributes["oscillating"] is False
helper.characteristics[V2_SWING_MODE].value = 1
state = await helper.poll_and_get_state()
state = await helper.async_update(
ServicesTypes.FAN_V2, {CharacteristicsTypes.SWING_MODE: 1}
)
assert state.attributes["oscillating"] is True