Simplify homekit_controller tests with snapshots (#100885)

This commit is contained in:
Jc2k 2023-09-25 22:26:27 +01:00 committed by GitHub
parent c5b32d6307
commit cae19431d1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
29 changed files with 12776 additions and 2039 deletions

File diff suppressed because it is too large Load diff

View file

@ -1,122 +0,0 @@
"""Tests for Airversa AP2 Air Purifier."""
from homeassistant.components.sensor import SensorStateClass
from homeassistant.const import CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, PERCENTAGE
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity import EntityCategory
from ..common import (
HUB_TEST_ACCESSORY_ID,
DeviceTestInfo,
EntityTestInfo,
assert_devices_and_entities_created,
setup_accessories_from_file,
setup_test_accessories,
)
async def test_airversa_ap2_setup(hass: HomeAssistant) -> None:
"""Test that an Ecbobee occupancy sensor be correctly setup in HA."""
accessories = await setup_accessories_from_file(hass, "airversa_ap2.json")
await setup_test_accessories(hass, accessories)
await assert_devices_and_entities_created(
hass,
DeviceTestInfo(
unique_id=HUB_TEST_ACCESSORY_ID,
name="Airversa AP2 1808",
model="AP2",
manufacturer="Sleekpoint Innovations",
sw_version="0.8.16",
hw_version="0.1",
serial_number="1234",
devices=[],
entities=[
EntityTestInfo(
entity_id="switch.airversa_ap2_1808_lock_physical_controls",
friendly_name="Airversa AP2 1808 Lock Physical Controls",
unique_id="00:00:00:00:00:00_1_32832_32839",
entity_category=EntityCategory.CONFIG,
state="off",
),
EntityTestInfo(
entity_id="switch.airversa_ap2_1808_mute",
friendly_name="Airversa AP2 1808 Mute",
unique_id="00:00:00:00:00:00_1_32832_32843",
entity_category=EntityCategory.CONFIG,
state="on",
),
EntityTestInfo(
entity_id="switch.airversa_ap2_1808_sleep_mode",
friendly_name="Airversa AP2 1808 Sleep Mode",
unique_id="00:00:00:00:00:00_1_32832_32842",
entity_category=EntityCategory.CONFIG,
state="off",
),
EntityTestInfo(
entity_id="sensor.airversa_ap2_1808_air_quality",
friendly_name="Airversa AP2 1808 Air Quality",
unique_id="00:00:00:00:00:00_1_2576_2579",
state="1",
capabilities={"state_class": SensorStateClass.MEASUREMENT},
),
EntityTestInfo(
entity_id="sensor.airversa_ap2_1808_filter_lifetime",
friendly_name="Airversa AP2 1808 Filter lifetime",
unique_id="00:00:00:00:00:00_1_32896_32900",
state="100.0",
capabilities={"state_class": SensorStateClass.MEASUREMENT},
unit_of_measurement=PERCENTAGE,
),
EntityTestInfo(
entity_id="sensor.airversa_ap2_1808_pm2_5_density",
friendly_name="Airversa AP2 1808 PM2.5 Density",
unique_id="00:00:00:00:00:00_1_2576_2580",
state="3.0",
capabilities={"state_class": SensorStateClass.MEASUREMENT},
unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
),
EntityTestInfo(
entity_id="sensor.airversa_ap2_1808_thread_capabilities",
friendly_name="Airversa AP2 1808 Thread Capabilities",
unique_id="00:00:00:00:00:00_1_112_115",
state="router_eligible",
entity_category=EntityCategory.DIAGNOSTIC,
capabilities={
"options": [
"border_router_capable",
"full",
"minimal",
"none",
"router_eligible",
"sleepy",
]
},
),
EntityTestInfo(
entity_id="sensor.airversa_ap2_1808_thread_status",
friendly_name="Airversa AP2 1808 Thread Status",
unique_id="00:00:00:00:00:00_1_112_117",
state="router",
entity_category=EntityCategory.DIAGNOSTIC,
capabilities={
"options": [
"border_router",
"child",
"detached",
"disabled",
"joining",
"leader",
"router",
]
},
),
EntityTestInfo(
entity_id="button.airversa_ap2_1808_identify",
friendly_name="Airversa AP2 1808 Identify",
unique_id="00:00:00:00:00:00_1_1_2",
entity_category=EntityCategory.DIAGNOSTIC,
state="unknown",
),
],
),
)

View file

@ -1,127 +0,0 @@
"""Regression tests for Aqara Gateway V3.
https://github.com/home-assistant/core/issues/20957
"""
from homeassistant.components.alarm_control_panel import AlarmControlPanelEntityFeature
from homeassistant.components.number import NumberMode
from homeassistant.const import EntityCategory
from homeassistant.core import HomeAssistant
from ..common import (
HUB_TEST_ACCESSORY_ID,
DeviceTestInfo,
EntityTestInfo,
assert_devices_and_entities_created,
setup_accessories_from_file,
setup_test_accessories,
)
async def test_aqara_gateway_setup(hass: HomeAssistant) -> None:
"""Test that a Aqara Gateway can be correctly setup in HA."""
accessories = await setup_accessories_from_file(hass, "aqara_gateway.json")
await setup_test_accessories(hass, accessories)
await assert_devices_and_entities_created(
hass,
DeviceTestInfo(
unique_id=HUB_TEST_ACCESSORY_ID,
name="Aqara Hub-1563",
model="ZHWA11LM",
manufacturer="Aqara",
sw_version="1.4.7",
hw_version="",
serial_number="0000000123456789",
devices=[],
entities=[
EntityTestInfo(
"alarm_control_panel.aqara_hub_1563_security_system",
friendly_name="Aqara Hub-1563 Security System",
unique_id="00:00:00:00:00:00_1_66304",
supported_features=AlarmControlPanelEntityFeature.ARM_NIGHT
| AlarmControlPanelEntityFeature.ARM_HOME
| AlarmControlPanelEntityFeature.ARM_AWAY,
state="disarmed",
),
EntityTestInfo(
"light.aqara_hub_1563_lightbulb_1563",
friendly_name="Aqara Hub-1563 Lightbulb-1563",
unique_id="00:00:00:00:00:00_1_65792",
supported_features=0,
capabilities={"supported_color_modes": ["hs"]},
state="off",
),
EntityTestInfo(
"number.aqara_hub_1563_volume",
friendly_name="Aqara Hub-1563 Volume",
unique_id="00:00:00:00:00:00_1_65536_65541",
capabilities={
"max": 100,
"min": 0,
"mode": NumberMode.AUTO,
"step": 1,
},
entity_category=EntityCategory.CONFIG,
state="40",
),
EntityTestInfo(
"switch.aqara_hub_1563_pairing_mode",
friendly_name="Aqara Hub-1563 Pairing Mode",
unique_id="00:00:00:00:00:00_1_65536_65538",
entity_category=EntityCategory.CONFIG,
state="off",
),
],
),
)
async def test_aqara_gateway_e1_setup(hass: HomeAssistant) -> None:
"""Test that an Aqara E1 Gateway can be correctly setup in HA."""
accessories = await setup_accessories_from_file(hass, "aqara_e1.json")
await setup_test_accessories(hass, accessories)
await assert_devices_and_entities_created(
hass,
DeviceTestInfo(
unique_id=HUB_TEST_ACCESSORY_ID,
name="Aqara-Hub-E1-00A0",
model="HE1-G01",
manufacturer="Aqara",
sw_version="3.3.0",
hw_version="1.0",
serial_number="00aa00000a0",
devices=[],
entities=[
EntityTestInfo(
"alarm_control_panel.aqara_hub_e1_00a0_security_system",
friendly_name="Aqara-Hub-E1-00A0 Security System",
unique_id="00:00:00:00:00:00_1_16",
supported_features=AlarmControlPanelEntityFeature.ARM_NIGHT
| AlarmControlPanelEntityFeature.ARM_HOME
| AlarmControlPanelEntityFeature.ARM_AWAY,
state="disarmed",
),
EntityTestInfo(
"number.aqara_hub_e1_00a0_volume",
friendly_name="Aqara-Hub-E1-00A0 Volume",
unique_id="00:00:00:00:00:00_1_17_1114116",
capabilities={
"max": 100,
"min": 0,
"mode": NumberMode.AUTO,
"step": 1,
},
entity_category=EntityCategory.CONFIG,
state="40",
),
EntityTestInfo(
"switch.aqara_hub_e1_00a0_pairing_mode",
friendly_name="Aqara-Hub-E1-00A0 Pairing Mode",
unique_id="00:00:00:00:00:00_1_17_1114117",
entity_category=EntityCategory.CONFIG,
state="off",
),
],
),
)

View file

@ -1,87 +0,0 @@
"""Make sure that an Arlo Baby can be setup."""
from homeassistant.components.sensor import SensorStateClass
from homeassistant.const import PERCENTAGE, EntityCategory, UnitOfTemperature
from homeassistant.core import HomeAssistant
from ..common import (
HUB_TEST_ACCESSORY_ID,
DeviceTestInfo,
EntityTestInfo,
assert_devices_and_entities_created,
setup_accessories_from_file,
setup_test_accessories,
)
async def test_arlo_baby_setup(hass: HomeAssistant) -> None:
"""Test that an Arlo Baby can be correctly setup in HA."""
accessories = await setup_accessories_from_file(hass, "arlo_baby.json")
await setup_test_accessories(hass, accessories)
await assert_devices_and_entities_created(
hass,
DeviceTestInfo(
unique_id=HUB_TEST_ACCESSORY_ID,
name="ArloBabyA0",
model="ABC1000",
manufacturer="Netgear, Inc",
sw_version="1.10.931",
hw_version="",
serial_number="00A0000000000",
devices=[],
entities=[
EntityTestInfo(
entity_id="camera.arlobabya0",
unique_id="00:00:00:00:00:00_1",
friendly_name="ArloBabyA0",
state="idle",
),
EntityTestInfo(
entity_id="binary_sensor.arlobabya0_motion",
unique_id="00:00:00:00:00:00_1_500",
friendly_name="ArloBabyA0 Motion",
state="off",
),
EntityTestInfo(
entity_id="sensor.arlobabya0_battery",
unique_id="00:00:00:00:00:00_1_700",
friendly_name="ArloBabyA0 Battery",
entity_category=EntityCategory.DIAGNOSTIC,
capabilities={"state_class": SensorStateClass.MEASUREMENT},
unit_of_measurement=PERCENTAGE,
state="82",
),
EntityTestInfo(
entity_id="sensor.arlobabya0_humidity",
unique_id="00:00:00:00:00:00_1_900",
friendly_name="ArloBabyA0 Humidity",
capabilities={"state_class": SensorStateClass.MEASUREMENT},
unit_of_measurement=PERCENTAGE,
state="60.099998",
),
EntityTestInfo(
entity_id="sensor.arlobabya0_temperature",
unique_id="00:00:00:00:00:00_1_1000",
friendly_name="ArloBabyA0 Temperature",
capabilities={"state_class": SensorStateClass.MEASUREMENT},
unit_of_measurement=UnitOfTemperature.CELSIUS,
state="24.0",
),
EntityTestInfo(
entity_id="sensor.arlobabya0_air_quality",
unique_id="00:00:00:00:00:00_1_800_802",
capabilities={"state_class": SensorStateClass.MEASUREMENT},
friendly_name="ArloBabyA0 Air Quality",
state="1",
),
EntityTestInfo(
entity_id="light.arlobabya0_nightlight",
unique_id="00:00:00:00:00:00_1_1100",
friendly_name="ArloBabyA0 Nightlight",
supported_features=0,
capabilities={"supported_color_modes": ["hs"]},
state="off",
),
],
),
)

View file

@ -1,67 +0,0 @@
"""Tests for Ecobee 501."""
from homeassistant.components.climate import (
SUPPORT_FAN_MODE,
SUPPORT_TARGET_HUMIDITY,
SUPPORT_TARGET_TEMPERATURE,
SUPPORT_TARGET_TEMPERATURE_RANGE,
)
from homeassistant.const import STATE_ON
from homeassistant.core import HomeAssistant
from ..common import (
HUB_TEST_ACCESSORY_ID,
DeviceTestInfo,
EntityTestInfo,
assert_devices_and_entities_created,
setup_accessories_from_file,
setup_test_accessories,
)
async def test_ecobee501_setup(hass: HomeAssistant) -> None:
"""Test that a Ecobee 501 can be correctly setup in HA."""
accessories = await setup_accessories_from_file(hass, "ecobee_501.json")
await setup_test_accessories(hass, accessories)
await assert_devices_and_entities_created(
hass,
DeviceTestInfo(
unique_id=HUB_TEST_ACCESSORY_ID,
name="My ecobee",
model="ECB501",
manufacturer="ecobee Inc.",
sw_version="4.7.340214",
hw_version="",
serial_number="123456789016",
devices=[],
entities=[
EntityTestInfo(
entity_id="climate.my_ecobee",
friendly_name="My ecobee",
unique_id="00:00:00:00:00:00_1_16",
supported_features=(
SUPPORT_TARGET_TEMPERATURE
| SUPPORT_TARGET_TEMPERATURE_RANGE
| SUPPORT_TARGET_HUMIDITY
| SUPPORT_FAN_MODE
),
capabilities={
"hvac_modes": ["off", "heat", "cool", "heat_cool"],
"fan_modes": ["on", "auto"],
"min_temp": 7.2,
"max_temp": 33.3,
"min_humidity": 20,
"max_humidity": 50,
},
state="heat_cool",
),
EntityTestInfo(
entity_id="binary_sensor.my_ecobee_occupancy",
friendly_name="My ecobee Occupancy",
unique_id="00:00:00:00:00:00_1_57",
unit_of_measurement=None,
state=STATE_ON,
),
],
),
)

View file

@ -1,42 +0,0 @@
"""Regression tests for Ecobee occupancy.
https://github.com/home-assistant/core/issues/31827
"""
from homeassistant.core import HomeAssistant
from ..common import (
HUB_TEST_ACCESSORY_ID,
DeviceTestInfo,
EntityTestInfo,
assert_devices_and_entities_created,
setup_accessories_from_file,
setup_test_accessories,
)
async def test_ecobee_occupancy_setup(hass: HomeAssistant) -> None:
"""Test that an Ecbobee occupancy sensor be correctly setup in HA."""
accessories = await setup_accessories_from_file(hass, "ecobee_occupancy.json")
await setup_test_accessories(hass, accessories)
await assert_devices_and_entities_created(
hass,
DeviceTestInfo(
unique_id=HUB_TEST_ACCESSORY_ID,
name="Master Fan",
model="ecobee Switch+",
manufacturer="ecobee Inc.",
sw_version="4.5.130201",
hw_version="",
serial_number="111111111111",
devices=[],
entities=[
EntityTestInfo(
entity_id="binary_sensor.master_fan",
friendly_name="Master Fan",
unique_id="00:00:00:00:00:00_1_56",
state="off",
),
],
),
)

View file

@ -1,87 +0,0 @@
"""Make sure that Eve Degree (via Eve Extend) is enumerated properly."""
from homeassistant.components.number import NumberMode
from homeassistant.components.sensor import SensorStateClass
from homeassistant.const import (
PERCENTAGE,
EntityCategory,
UnitOfPressure,
UnitOfTemperature,
)
from homeassistant.core import HomeAssistant
from ..common import (
HUB_TEST_ACCESSORY_ID,
DeviceTestInfo,
EntityTestInfo,
assert_devices_and_entities_created,
setup_accessories_from_file,
setup_test_accessories,
)
async def test_eve_degree_setup(hass: HomeAssistant) -> None:
"""Test that the accessory can be correctly setup in HA."""
accessories = await setup_accessories_from_file(hass, "eve_degree.json")
await setup_test_accessories(hass, accessories)
await assert_devices_and_entities_created(
hass,
DeviceTestInfo(
unique_id=HUB_TEST_ACCESSORY_ID,
name="Eve Degree AA11",
model="Eve Degree 00AAA0000",
manufacturer="Elgato",
sw_version="1.2.8",
hw_version="1.0.0",
serial_number="AA00A0A00000",
devices=[],
entities=[
EntityTestInfo(
entity_id="sensor.eve_degree_aa11_temperature",
unique_id="00:00:00:00:00:00_1_22",
friendly_name="Eve Degree AA11 Temperature",
capabilities={"state_class": SensorStateClass.MEASUREMENT},
unit_of_measurement=UnitOfTemperature.CELSIUS,
state="22.7719116210938",
),
EntityTestInfo(
entity_id="sensor.eve_degree_aa11_humidity",
unique_id="00:00:00:00:00:00_1_27",
friendly_name="Eve Degree AA11 Humidity",
capabilities={"state_class": SensorStateClass.MEASUREMENT},
unit_of_measurement=PERCENTAGE,
state="59.4818115234375",
),
EntityTestInfo(
entity_id="sensor.eve_degree_aa11_air_pressure",
unique_id="00:00:00:00:00:00_1_30_32",
friendly_name="Eve Degree AA11 Air Pressure",
unit_of_measurement=UnitOfPressure.HPA,
capabilities={"state_class": SensorStateClass.MEASUREMENT},
state="1005.70001220703",
),
EntityTestInfo(
entity_id="sensor.eve_degree_aa11_battery",
unique_id="00:00:00:00:00:00_1_17",
friendly_name="Eve Degree AA11 Battery",
entity_category=EntityCategory.DIAGNOSTIC,
capabilities={"state_class": SensorStateClass.MEASUREMENT},
unit_of_measurement=PERCENTAGE,
state="65",
),
EntityTestInfo(
entity_id="number.eve_degree_aa11_elevation",
unique_id="00:00:00:00:00:00_1_30_33",
friendly_name="Eve Degree AA11 Elevation",
capabilities={
"max": 9000,
"min": -450,
"mode": NumberMode.AUTO,
"step": 1,
},
state="0",
entity_category=EntityCategory.CONFIG,
),
],
),
)

View file

@ -1,93 +0,0 @@
"""Make sure that Eve Degree (via Eve Extend) is enumerated properly."""
from homeassistant.components.sensor import SensorStateClass
from homeassistant.const import (
ELECTRIC_CURRENT_AMPERE,
ELECTRIC_POTENTIAL_VOLT,
ENERGY_KILO_WATT_HOUR,
POWER_WATT,
EntityCategory,
)
from homeassistant.core import HomeAssistant
from ..common import (
HUB_TEST_ACCESSORY_ID,
DeviceTestInfo,
EntityTestInfo,
assert_devices_and_entities_created,
setup_accessories_from_file,
setup_test_accessories,
)
async def test_eve_energy_setup(hass: HomeAssistant) -> None:
"""Test that the accessory can be correctly setup in HA."""
accessories = await setup_accessories_from_file(hass, "eve_energy.json")
await setup_test_accessories(hass, accessories)
await assert_devices_and_entities_created(
hass,
DeviceTestInfo(
unique_id=HUB_TEST_ACCESSORY_ID,
name="Eve Energy 50FF",
model="Eve Energy 20EAO8601",
manufacturer="Elgato",
sw_version="1.2.9",
hw_version="1.0.0",
serial_number="AA00A0A00000",
devices=[],
entities=[
EntityTestInfo(
entity_id="switch.eve_energy_50ff",
unique_id="00:00:00:00:00:00_1_28",
friendly_name="Eve Energy 50FF",
state="off",
),
EntityTestInfo(
entity_id="sensor.eve_energy_50ff_amps",
unique_id="00:00:00:00:00:00_1_28_33",
friendly_name="Eve Energy 50FF Amps",
unit_of_measurement=ELECTRIC_CURRENT_AMPERE,
capabilities={"state_class": SensorStateClass.MEASUREMENT},
state="0",
),
EntityTestInfo(
entity_id="sensor.eve_energy_50ff_volts",
unique_id="00:00:00:00:00:00_1_28_32",
friendly_name="Eve Energy 50FF Volts",
unit_of_measurement=ELECTRIC_POTENTIAL_VOLT,
capabilities={"state_class": SensorStateClass.MEASUREMENT},
state="0.400000005960464",
),
EntityTestInfo(
entity_id="sensor.eve_energy_50ff_power",
unique_id="00:00:00:00:00:00_1_28_34",
friendly_name="Eve Energy 50FF Power",
unit_of_measurement=POWER_WATT,
capabilities={"state_class": SensorStateClass.MEASUREMENT},
state="0",
),
EntityTestInfo(
entity_id="sensor.eve_energy_50ff_energy_kwh",
unique_id="00:00:00:00:00:00_1_28_35",
friendly_name="Eve Energy 50FF Energy kWh",
capabilities={"state_class": SensorStateClass.TOTAL_INCREASING},
unit_of_measurement=ENERGY_KILO_WATT_HOUR,
state="0.28999999165535",
),
EntityTestInfo(
entity_id="switch.eve_energy_50ff_lock_physical_controls",
unique_id="00:00:00:00:00:00_1_28_36",
friendly_name="Eve Energy 50FF Lock Physical Controls",
entity_category=EntityCategory.CONFIG,
state="off",
),
EntityTestInfo(
entity_id="button.eve_energy_50ff_identify",
unique_id="00:00:00:00:00:00_1_1_3",
friendly_name="Eve Energy 50FF Identify",
entity_category=EntityCategory.DIAGNOSTIC,
state="unknown",
),
],
),
)

View file

@ -1,82 +0,0 @@
"""Make sure that a H.A.A. fan can be setup."""
from homeassistant.components.fan import ATTR_PERCENTAGE, FanEntityFeature
from homeassistant.const import EntityCategory
from homeassistant.core import HomeAssistant
from ..common import (
HUB_TEST_ACCESSORY_ID,
DeviceTestInfo,
EntityTestInfo,
assert_devices_and_entities_created,
setup_accessories_from_file,
setup_test_accessories,
)
async def test_haa_fan_setup(hass: HomeAssistant) -> None:
"""Test that a H.A.A. fan can be correctly setup in HA."""
accessories = await setup_accessories_from_file(hass, "haa_fan.json")
await setup_test_accessories(hass, accessories)
haa_fan_state = hass.states.get("fan.haa_c718b3")
attributes = haa_fan_state.attributes
assert attributes[ATTR_PERCENTAGE] == 66
await assert_devices_and_entities_created(
hass,
DeviceTestInfo(
unique_id=HUB_TEST_ACCESSORY_ID,
name="HAA-C718B3",
model="RavenSystem HAA",
manufacturer="José A. Jiménez Campos",
sw_version="5.0.18",
hw_version="",
serial_number="C718B3-1",
devices=[
DeviceTestInfo(
name="HAA-C718B3",
model="RavenSystem HAA",
manufacturer="José A. Jiménez Campos",
sw_version="5.0.18",
hw_version="",
serial_number="C718B3-2",
unique_id="00:00:00:00:00:00:aid:2",
devices=[],
entities=[
EntityTestInfo(
entity_id="switch.haa_c718b3",
friendly_name="HAA-C718B3",
unique_id="00:00:00:00:00:00_2_8",
state="off",
)
],
),
],
entities=[
EntityTestInfo(
entity_id="fan.haa_c718b3",
friendly_name="HAA-C718B3",
unique_id="00:00:00:00:00:00_1_8",
state="on",
supported_features=FanEntityFeature.SET_SPEED,
capabilities={
"preset_modes": None,
},
),
EntityTestInfo(
entity_id="button.haa_c718b3_setup",
friendly_name="HAA-C718B3 Setup",
unique_id="00:00:00:00:00:00_1_1010_1012",
entity_category=EntityCategory.CONFIG,
state="unknown",
),
EntityTestInfo(
entity_id="button.haa_c718b3_update",
friendly_name="HAA-C718B3 Update",
unique_id="00:00:00:00:00:00_1_1010_1011",
entity_category=EntityCategory.CONFIG,
state="unknown",
),
],
),
)

View file

@ -1,62 +0,0 @@
"""Test against characteristics captured from the Home Assistant HomeKit bridge running demo platforms."""
from homeassistant.components.fan import FanEntityFeature
from homeassistant.core import HomeAssistant
from ..common import (
HUB_TEST_ACCESSORY_ID,
DeviceTestInfo,
EntityTestInfo,
assert_devices_and_entities_created,
setup_accessories_from_file,
setup_test_accessories,
)
async def test_homeassistant_bridge_fan_setup(hass: HomeAssistant) -> None:
"""Test that a SIMPLEconnect fan can be correctly setup in HA."""
accessories = await setup_accessories_from_file(
hass, "home_assistant_bridge_fan.json"
)
await setup_test_accessories(hass, accessories)
await assert_devices_and_entities_created(
hass,
DeviceTestInfo(
unique_id=HUB_TEST_ACCESSORY_ID,
name="Home Assistant Bridge",
model="Bridge",
manufacturer="Home Assistant",
sw_version="0.104.0.dev0",
hw_version="",
serial_number="homekit.bridge",
devices=[
DeviceTestInfo(
name="Living Room Fan",
model="Fan",
manufacturer="Home Assistant",
sw_version="0.104.0.dev0",
hw_version="",
serial_number="fan.living_room_fan",
unique_id="00:00:00:00:00:00:aid:1256851357",
devices=[],
entities=[
EntityTestInfo(
entity_id="fan.living_room_fan",
friendly_name="Living Room Fan",
unique_id="00:00:00:00:00:00_1256851357_8",
supported_features=(
FanEntityFeature.DIRECTION
| FanEntityFeature.SET_SPEED
| FanEntityFeature.OSCILLATE
),
capabilities={
"preset_modes": None,
},
state="off",
)
],
),
],
entities=[],
),
)

View file

@ -1,51 +0,0 @@
"""Tests for handling accessories on a Homespan esp32 daikin bridge."""
from homeassistant.components.climate import ClimateEntityFeature
from homeassistant.core import HomeAssistant
from ..common import (
HUB_TEST_ACCESSORY_ID,
DeviceTestInfo,
EntityTestInfo,
assert_devices_and_entities_created,
setup_accessories_from_file,
setup_test_accessories,
)
async def test_homespan_daikin_bridge_setup(hass: HomeAssistant) -> None:
"""Test that aHomespan esp32 daikin bridge can be correctly setup in HA via HomeKit."""
accessories = await setup_accessories_from_file(hass, "homespan_daikin_bridge.json")
await setup_test_accessories(hass, accessories)
await assert_devices_and_entities_created(
hass,
DeviceTestInfo(
unique_id=HUB_TEST_ACCESSORY_ID,
name="Air Conditioner",
model="Daikin-fwec3a-esp32-homekit-bridge",
manufacturer="Garzola Marco",
sw_version="1.0.0",
hw_version="1.0.0",
serial_number="00000001",
devices=[],
entities=[
EntityTestInfo(
entity_id="climate.air_conditioner_slaveid_1",
friendly_name="Air Conditioner SlaveID 1",
unique_id="00:00:00:00:00:00_1_9",
supported_features=(
ClimateEntityFeature.TARGET_TEMPERATURE
| ClimateEntityFeature.FAN_MODE
),
capabilities={
"hvac_modes": ["heat_cool", "heat", "cool", "off"],
"min_temp": 18,
"max_temp": 32,
"target_temp_step": 0.5,
"fan_modes": ["off", "low", "medium", "high"],
},
state="cool",
),
],
),
)

View file

@ -7,62 +7,16 @@ from aiohomekit.model import CharacteristicsTypes, ServicesTypes
from aiohomekit.testing import FakePairing
import pytest
from homeassistant.const import EntityCategory
from homeassistant.core import HomeAssistant
import homeassistant.util.dt as dt_util
from ..common import (
HUB_TEST_ACCESSORY_ID,
DeviceTestInfo,
EntityTestInfo,
Helper,
assert_devices_and_entities_created,
setup_accessories_from_file,
setup_test_accessories,
)
from ..common import Helper, setup_accessories_from_file, setup_test_accessories
from tests.common import async_fire_time_changed
LIGHT_ON = ("lightbulb", "on")
async def test_koogeek_ls1_setup(hass: HomeAssistant) -> None:
"""Test that a Koogeek LS1 can be correctly setup in HA."""
accessories = await setup_accessories_from_file(hass, "koogeek_ls1.json")
await setup_test_accessories(hass, accessories)
await assert_devices_and_entities_created(
hass,
DeviceTestInfo(
unique_id=HUB_TEST_ACCESSORY_ID,
name="Koogeek-LS1-20833F",
model="LS1",
manufacturer="Koogeek",
sw_version="2.2.15",
hw_version="",
serial_number="AAAA011111111111",
devices=[],
entities=[
EntityTestInfo(
entity_id="light.koogeek_ls1_20833f_light_strip",
friendly_name="Koogeek-LS1-20833F Light Strip",
unique_id="00:00:00:00:00:00_1_7",
supported_features=0,
capabilities={"supported_color_modes": ["hs"]},
state="off",
),
EntityTestInfo(
entity_id="button.koogeek_ls1_20833f_identify",
friendly_name="Koogeek-LS1-20833F Identify",
unique_id="00:00:00:00:00:00_1_1_6",
entity_category=EntityCategory.DIAGNOSTIC,
state="unknown",
),
],
),
)
@pytest.mark.parametrize("failure_cls", [AccessoryDisconnectedError, EncryptionError])
async def test_recover_from_failure(hass: HomeAssistant, utcnow, failure_cls) -> None:
"""Test that entity actually recovers from a network connection drop.

View file

@ -1,49 +0,0 @@
"""Make sure that existing Koogeek P1EU support isn't broken."""
from homeassistant.components.sensor import SensorStateClass
from homeassistant.const import POWER_WATT
from homeassistant.core import HomeAssistant
from ..common import (
HUB_TEST_ACCESSORY_ID,
DeviceTestInfo,
EntityTestInfo,
assert_devices_and_entities_created,
setup_accessories_from_file,
setup_test_accessories,
)
async def test_koogeek_p1eu_setup(hass: HomeAssistant) -> None:
"""Test that a Koogeek P1EU can be correctly setup in HA."""
accessories = await setup_accessories_from_file(hass, "koogeek_p1eu.json")
await setup_test_accessories(hass, accessories)
await assert_devices_and_entities_created(
hass,
DeviceTestInfo(
unique_id=HUB_TEST_ACCESSORY_ID,
name="Koogeek-P1-A00AA0",
model="P1EU",
manufacturer="Koogeek",
sw_version="2.3.7",
hw_version="",
serial_number="EUCP03190xxxxx48",
devices=[],
entities=[
EntityTestInfo(
entity_id="switch.koogeek_p1_a00aa0_outlet",
friendly_name="Koogeek-P1-A00AA0 outlet",
unique_id="00:00:00:00:00:00_1_7",
state="off",
),
EntityTestInfo(
entity_id="sensor.koogeek_p1_a00aa0_power",
friendly_name="Koogeek-P1-A00AA0 Power",
unique_id="00:00:00:00:00:00_1_21_22",
unit_of_measurement=POWER_WATT,
capabilities={"state_class": SensorStateClass.MEASUREMENT},
state="5",
),
],
),
)

View file

@ -1,54 +0,0 @@
"""Regression tests for Aqara Gateway V3.
https://github.com/home-assistant/core/issues/20885
"""
from homeassistant.components.climate import (
SUPPORT_TARGET_TEMPERATURE,
SUPPORT_TARGET_TEMPERATURE_RANGE,
)
from homeassistant.core import HomeAssistant
from ..common import (
HUB_TEST_ACCESSORY_ID,
DeviceTestInfo,
EntityTestInfo,
assert_devices_and_entities_created,
setup_accessories_from_file,
setup_test_accessories,
)
async def test_lennox_e30_setup(hass: HomeAssistant) -> None:
"""Test that a Lennox E30 can be correctly setup in HA."""
accessories = await setup_accessories_from_file(hass, "lennox_e30.json")
await setup_test_accessories(hass, accessories)
await assert_devices_and_entities_created(
hass,
DeviceTestInfo(
unique_id=HUB_TEST_ACCESSORY_ID,
name="Lennox",
model="E30 2B",
manufacturer="Lennox",
sw_version="3.40.XX",
hw_version="3.0.XX",
serial_number="XXXXXXXX",
devices=[],
entities=[
EntityTestInfo(
entity_id="climate.lennox",
friendly_name="Lennox",
unique_id="00:00:00:00:00:00_1_100",
supported_features=(
SUPPORT_TARGET_TEMPERATURE | SUPPORT_TARGET_TEMPERATURE_RANGE
),
capabilities={
"hvac_modes": ["off", "heat", "cool", "heat_cool"],
"max_temp": 37,
"min_temp": 4.5,
},
state="heat_cool",
),
],
),
)

View file

@ -1,63 +0,0 @@
"""Make sure that handling real world LG HomeKit characteristics isn't broken."""
from homeassistant.components.media_player import MediaPlayerEntityFeature
from homeassistant.core import HomeAssistant
from ..common import (
HUB_TEST_ACCESSORY_ID,
DeviceTestInfo,
EntityTestInfo,
assert_devices_and_entities_created,
setup_accessories_from_file,
setup_test_accessories,
)
async def test_lg_tv(hass: HomeAssistant) -> None:
"""Test that a Koogeek LS1 can be correctly setup in HA."""
accessories = await setup_accessories_from_file(hass, "lg_tv.json")
await setup_test_accessories(hass, accessories)
await assert_devices_and_entities_created(
hass,
DeviceTestInfo(
unique_id=HUB_TEST_ACCESSORY_ID,
name="LG webOS TV AF80",
model="OLED55B9PUA",
manufacturer="LG Electronics",
sw_version="04.71.04",
hw_version="1",
serial_number="999AAAAAA999",
devices=[],
entities=[
EntityTestInfo(
entity_id="media_player.lg_webos_tv_af80",
friendly_name="LG webOS TV AF80",
unique_id="00:00:00:00:00:00_1_48",
supported_features=(
MediaPlayerEntityFeature.PAUSE
| MediaPlayerEntityFeature.PLAY
| MediaPlayerEntityFeature.SELECT_SOURCE
),
capabilities={
"source_list": [
"AirPlay",
"Live TV",
"HDMI 1",
"Sony",
"Apple",
"AV",
"HDMI 4",
]
},
# The LG TV doesn't (at least at this patch level) report
# its media state via CURRENT_MEDIA_STATE. Therefore "ok"
# is the best we can say.
state="on",
),
],
),
)
"""
assert state.attributes["source"] == "HDMI 4"
"""

View file

@ -1,55 +0,0 @@
"""Tests for handling accessories on a Lutron Caseta bridge via HomeKit."""
from homeassistant.const import STATE_OFF
from homeassistant.core import HomeAssistant
from ..common import (
HUB_TEST_ACCESSORY_ID,
DeviceTestInfo,
EntityTestInfo,
assert_devices_and_entities_created,
setup_accessories_from_file,
setup_test_accessories,
)
async def test_lutron_caseta_bridge_setup(hass: HomeAssistant) -> None:
"""Test that a Lutron Caseta bridge can be correctly setup in HA via HomeKit."""
accessories = await setup_accessories_from_file(hass, "lutron_caseta_bridge.json")
await setup_test_accessories(hass, accessories)
await assert_devices_and_entities_created(
hass,
DeviceTestInfo(
unique_id=HUB_TEST_ACCESSORY_ID,
name="Smart Bridge 2",
model="L-BDG2-WH",
manufacturer="Lutron Electronics Co., Inc",
sw_version="08.08",
hw_version="",
serial_number="12344331",
devices=[
DeviceTestInfo(
name="Cas\u00e9ta\u00ae Wireless Fan Speed Control",
model="PD-FSQN-XX",
manufacturer="Lutron Electronics Co., Inc",
sw_version="001.005",
hw_version="",
serial_number="39024290",
unique_id="00:00:00:00:00:00:aid:21474836482",
devices=[],
entities=[
EntityTestInfo(
entity_id="fan.caseta_r_wireless_fan_speed_control",
friendly_name="Caséta® Wireless Fan Speed Control",
unique_id="00:00:00:00:00:00_21474836482_2",
unit_of_measurement=None,
supported_features=1,
state=STATE_OFF,
capabilities={"preset_modes": None},
)
],
),
],
entities=[],
),
)

View file

@ -1,71 +0,0 @@
"""Tests for the Meross MSS425f power strip."""
from homeassistant.const import STATE_ON, STATE_UNKNOWN, EntityCategory
from homeassistant.core import HomeAssistant
from ..common import (
HUB_TEST_ACCESSORY_ID,
DeviceTestInfo,
EntityTestInfo,
assert_devices_and_entities_created,
setup_accessories_from_file,
setup_test_accessories,
)
async def test_meross_mss425f_setup(hass: HomeAssistant) -> None:
"""Test that a MSS425f can be correctly setup in HA."""
accessories = await setup_accessories_from_file(hass, "mss425f.json")
await setup_test_accessories(hass, accessories)
await assert_devices_and_entities_created(
hass,
DeviceTestInfo(
unique_id=HUB_TEST_ACCESSORY_ID,
name="MSS425F-15cc",
model="MSS425F",
manufacturer="Meross",
sw_version="4.2.3",
hw_version="4.0.0",
serial_number="HH41234",
devices=[],
entities=[
EntityTestInfo(
entity_id="button.mss425f_15cc_identify",
friendly_name="MSS425F-15cc Identify",
unique_id="00:00:00:00:00:00_1_1_2",
entity_category=EntityCategory.DIAGNOSTIC,
state=STATE_UNKNOWN,
),
EntityTestInfo(
entity_id="switch.mss425f_15cc_outlet_1",
friendly_name="MSS425F-15cc Outlet-1",
unique_id="00:00:00:00:00:00_1_12",
state=STATE_ON,
),
EntityTestInfo(
entity_id="switch.mss425f_15cc_outlet_2",
friendly_name="MSS425F-15cc Outlet-2",
unique_id="00:00:00:00:00:00_1_15",
state=STATE_ON,
),
EntityTestInfo(
entity_id="switch.mss425f_15cc_outlet_3",
friendly_name="MSS425F-15cc Outlet-3",
unique_id="00:00:00:00:00:00_1_18",
state=STATE_ON,
),
EntityTestInfo(
entity_id="switch.mss425f_15cc_outlet_4",
friendly_name="MSS425F-15cc Outlet-4",
unique_id="00:00:00:00:00:00_1_21",
state=STATE_ON,
),
EntityTestInfo(
entity_id="switch.mss425f_15cc_usb",
friendly_name="MSS425F-15cc USB",
unique_id="00:00:00:00:00:00_1_24",
state=STATE_ON,
),
],
),
)

View file

@ -1,41 +0,0 @@
"""Tests for the Meross MSS565 wall switch."""
from homeassistant.const import STATE_ON
from homeassistant.core import HomeAssistant
from ..common import (
HUB_TEST_ACCESSORY_ID,
DeviceTestInfo,
EntityTestInfo,
assert_devices_and_entities_created,
setup_accessories_from_file,
setup_test_accessories,
)
async def test_meross_mss565_setup(hass: HomeAssistant) -> None:
"""Test that a MSS565 can be correctly setup in HA."""
accessories = await setup_accessories_from_file(hass, "mss565.json")
await setup_test_accessories(hass, accessories)
await assert_devices_and_entities_created(
hass,
DeviceTestInfo(
unique_id=HUB_TEST_ACCESSORY_ID,
name="MSS565-28da",
model="MSS565",
manufacturer="Meross",
sw_version="4.1.9",
hw_version="4.0.0",
serial_number="BB1121",
devices=[],
entities=[
EntityTestInfo(
entity_id="light.mss565_28da_dimmer_switch",
friendly_name="MSS565-28da Dimmer Switch",
unique_id="00:00:00:00:00:00_1_12",
capabilities={"supported_color_modes": ["brightness"]},
state=STATE_ON,
),
],
),
)

View file

@ -1,72 +0,0 @@
"""Make sure that Mysa Living is enumerated properly."""
from homeassistant.components.climate import ClimateEntityFeature
from homeassistant.components.sensor import SensorStateClass
from homeassistant.const import PERCENTAGE, UnitOfTemperature
from homeassistant.core import HomeAssistant
from ..common import (
HUB_TEST_ACCESSORY_ID,
DeviceTestInfo,
EntityTestInfo,
assert_devices_and_entities_created,
setup_accessories_from_file,
setup_test_accessories,
)
async def test_mysa_living_setup(hass: HomeAssistant) -> None:
"""Test that the accessory can be correctly setup in HA."""
accessories = await setup_accessories_from_file(hass, "mysa_living.json")
await setup_test_accessories(hass, accessories)
await assert_devices_and_entities_created(
hass,
DeviceTestInfo(
unique_id=HUB_TEST_ACCESSORY_ID,
name="Mysa-85dda9",
model="v1",
manufacturer="Empowered Homes Inc.",
sw_version="2.8.1",
hw_version="",
serial_number="AAAAAAA000",
devices=[],
entities=[
EntityTestInfo(
entity_id="climate.mysa_85dda9_thermostat",
friendly_name="Mysa-85dda9 Thermostat",
unique_id="00:00:00:00:00:00_1_20",
supported_features=ClimateEntityFeature.TARGET_TEMPERATURE,
capabilities={
"hvac_modes": ["off", "heat", "cool", "heat_cool"],
"max_temp": 35,
"min_temp": 7,
},
state="off",
),
EntityTestInfo(
entity_id="sensor.mysa_85dda9_current_humidity",
friendly_name="Mysa-85dda9 Current Humidity",
unique_id="00:00:00:00:00:00_1_20_27",
unit_of_measurement=PERCENTAGE,
capabilities={"state_class": SensorStateClass.MEASUREMENT},
state="40",
),
EntityTestInfo(
entity_id="sensor.mysa_85dda9_current_temperature",
friendly_name="Mysa-85dda9 Current Temperature",
unique_id="00:00:00:00:00:00_1_20_25",
unit_of_measurement=UnitOfTemperature.CELSIUS,
capabilities={"state_class": SensorStateClass.MEASUREMENT},
state="24.1",
),
EntityTestInfo(
entity_id="light.mysa_85dda9_display",
friendly_name="Mysa-85dda9 Display",
unique_id="00:00:00:00:00:00_1_40",
supported_features=0,
capabilities={"supported_color_modes": ["brightness"]},
state="off",
),
],
),
)

View file

@ -1,92 +0,0 @@
"""Make sure that Nanoleaf NL55 works with BLE."""
from homeassistant.const import EntityCategory
from homeassistant.core import HomeAssistant
from ..common import (
HUB_TEST_ACCESSORY_ID,
DeviceTestInfo,
EntityTestInfo,
assert_devices_and_entities_created,
setup_accessories_from_file,
setup_test_accessories,
)
LIGHT_ON = ("lightbulb", "on")
async def test_nanoleaf_nl55_setup(hass: HomeAssistant) -> None:
"""Test that a Nanoleaf NL55 can be correctly setup in HA."""
accessories = await setup_accessories_from_file(hass, "nanoleaf_strip_nl55.json")
await setup_test_accessories(hass, accessories)
await assert_devices_and_entities_created(
hass,
DeviceTestInfo(
unique_id=HUB_TEST_ACCESSORY_ID,
name="Nanoleaf Strip 3B32",
model="NL55",
manufacturer="Nanoleaf",
sw_version="1.4.40",
hw_version="1.2.4",
serial_number="AAAA011111111111",
devices=[],
entities=[
EntityTestInfo(
entity_id="light.nanoleaf_strip_3b32_nanoleaf_light_strip",
friendly_name="Nanoleaf Strip 3B32 Nanoleaf Light Strip",
unique_id="00:00:00:00:00:00_1_19",
supported_features=0,
capabilities={
"max_color_temp_kelvin": 6535,
"min_color_temp_kelvin": 2127,
"max_mireds": 470,
"min_mireds": 153,
"supported_color_modes": ["color_temp", "hs"],
},
state="on",
),
EntityTestInfo(
entity_id="button.nanoleaf_strip_3b32_identify",
friendly_name="Nanoleaf Strip 3B32 Identify",
unique_id="00:00:00:00:00:00_1_1_2",
entity_category=EntityCategory.DIAGNOSTIC,
state="unknown",
),
EntityTestInfo(
entity_id="sensor.nanoleaf_strip_3b32_thread_capabilities",
friendly_name="Nanoleaf Strip 3B32 Thread Capabilities",
unique_id="00:00:00:00:00:00_1_31_115",
entity_category=EntityCategory.DIAGNOSTIC,
capabilities={
"options": [
"border_router_capable",
"full",
"minimal",
"none",
"router_eligible",
"sleepy",
]
},
state="border_router_capable",
),
EntityTestInfo(
entity_id="sensor.nanoleaf_strip_3b32_thread_status",
friendly_name="Nanoleaf Strip 3B32 Thread Status",
unique_id="00:00:00:00:00:00_1_31_117",
entity_category=EntityCategory.DIAGNOSTIC,
capabilities={
"options": [
"border_router",
"child",
"detached",
"disabled",
"joining",
"leader",
"router",
]
},
state="border_router",
),
],
),
)

View file

@ -1,50 +0,0 @@
"""Regression tests for Netamo Smart CO Alarm.
https://github.com/home-assistant/core/issues/78903
"""
from homeassistant.const import EntityCategory
from homeassistant.core import HomeAssistant
from ..common import (
HUB_TEST_ACCESSORY_ID,
DeviceTestInfo,
EntityTestInfo,
assert_devices_and_entities_created,
setup_accessories_from_file,
setup_test_accessories,
)
async def test_netamo_smart_co_alarm_setup(hass: HomeAssistant) -> None:
"""Test that a Netamo Smart CO Alarm can be correctly setup in HA."""
accessories = await setup_accessories_from_file(hass, "netamo_smart_co_alarm.json")
await setup_test_accessories(hass, accessories)
await assert_devices_and_entities_created(
hass,
DeviceTestInfo(
unique_id=HUB_TEST_ACCESSORY_ID,
name="Smart CO Alarm",
model="Smart CO Alarm",
manufacturer="Netatmo",
sw_version="1.0.3",
hw_version="0",
serial_number="1234",
devices=[],
entities=[
EntityTestInfo(
entity_id="binary_sensor.smart_co_alarm_carbon_monoxide_sensor",
friendly_name="Smart CO Alarm Carbon Monoxide Sensor",
unique_id="00:00:00:00:00:00_1_22",
state="off",
),
EntityTestInfo(
entity_id="binary_sensor.smart_co_alarm_low_battery",
friendly_name="Smart CO Alarm Low Battery",
entity_category=EntityCategory.DIAGNOSTIC,
unique_id="00:00:00:00:00:00_1_36",
state="off",
),
],
),
)

View file

@ -1,45 +0,0 @@
"""Regression tests for Netamo Healthy Home Coach.
https://github.com/home-assistant/core/issues/73360
"""
from homeassistant.components.sensor import SensorStateClass
from homeassistant.core import HomeAssistant
from ..common import (
HUB_TEST_ACCESSORY_ID,
DeviceTestInfo,
EntityTestInfo,
assert_devices_and_entities_created,
setup_accessories_from_file,
setup_test_accessories,
)
async def test_netamo_smart_co_alarm_setup(hass: HomeAssistant) -> None:
"""Test that a Netamo Smart CO Alarm can be correctly setup in HA."""
accessories = await setup_accessories_from_file(hass, "netatmo_home_coach.json")
await setup_test_accessories(hass, accessories)
await assert_devices_and_entities_created(
hass,
DeviceTestInfo(
unique_id=HUB_TEST_ACCESSORY_ID,
name="Healthy Home Coach",
model="Healthy Home Coach",
manufacturer="Netatmo",
sw_version="59",
hw_version="",
serial_number="1234",
devices=[],
entities=[
EntityTestInfo(
entity_id="sensor.healthy_home_coach_noise",
friendly_name="Healthy Home Coach Noise",
unique_id="00:00:00:00:00:00_1_20_21",
state="0",
unit_of_measurement="dB",
capabilities={"state_class": SensorStateClass.MEASUREMENT},
),
],
),
)

View file

@ -1,84 +0,0 @@
"""Make sure that existing RainMachine support isn't broken.
https://github.com/home-assistant/core/issues/31745
"""
from homeassistant.core import HomeAssistant
from ..common import (
HUB_TEST_ACCESSORY_ID,
DeviceTestInfo,
EntityTestInfo,
assert_devices_and_entities_created,
setup_accessories_from_file,
setup_test_accessories,
)
async def test_rainmachine_pro_8_setup(hass: HomeAssistant) -> None:
"""Test that a RainMachine can be correctly setup in HA."""
accessories = await setup_accessories_from_file(hass, "rainmachine-pro-8.json")
await setup_test_accessories(hass, accessories)
await assert_devices_and_entities_created(
hass,
DeviceTestInfo(
unique_id=HUB_TEST_ACCESSORY_ID,
name="RainMachine-00ce4a",
model="SPK5 Pro",
manufacturer="Green Electronics LLC",
sw_version="1.0.4",
hw_version="1",
serial_number="00aa0000aa0a",
devices=[],
entities=[
EntityTestInfo(
entity_id="switch.rainmachine_00ce4a",
friendly_name="RainMachine-00ce4a",
unique_id="00:00:00:00:00:00_1_512",
state="off",
),
EntityTestInfo(
entity_id="switch.rainmachine_00ce4a_2",
friendly_name="RainMachine-00ce4a",
unique_id="00:00:00:00:00:00_1_768",
state="off",
),
EntityTestInfo(
entity_id="switch.rainmachine_00ce4a_3",
friendly_name="RainMachine-00ce4a",
unique_id="00:00:00:00:00:00_1_1024",
state="off",
),
EntityTestInfo(
entity_id="switch.rainmachine_00ce4a_4",
friendly_name="RainMachine-00ce4a",
unique_id="00:00:00:00:00:00_1_1280",
state="off",
),
EntityTestInfo(
entity_id="switch.rainmachine_00ce4a_5",
friendly_name="RainMachine-00ce4a",
unique_id="00:00:00:00:00:00_1_1536",
state="off",
),
EntityTestInfo(
entity_id="switch.rainmachine_00ce4a_6",
friendly_name="RainMachine-00ce4a",
unique_id="00:00:00:00:00:00_1_1792",
state="off",
),
EntityTestInfo(
entity_id="switch.rainmachine_00ce4a_7",
friendly_name="RainMachine-00ce4a",
unique_id="00:00:00:00:00:00_1_2048",
state="off",
),
EntityTestInfo(
entity_id="switch.rainmachine_00ce4a_8",
friendly_name="RainMachine-00ce4a",
unique_id="00:00:00:00:00:00_1_2304",
state="off",
),
],
),
)

View file

@ -1,230 +0,0 @@
"""Test against characteristics captured from a ryse smart bridge platforms."""
from homeassistant.components.cover import CoverEntityFeature
from homeassistant.components.sensor import SensorStateClass
from homeassistant.const import PERCENTAGE, EntityCategory
from homeassistant.core import HomeAssistant
from ..common import (
HUB_TEST_ACCESSORY_ID,
DeviceTestInfo,
EntityTestInfo,
assert_devices_and_entities_created,
setup_accessories_from_file,
setup_test_accessories,
)
RYSE_SUPPORTED_FEATURES = (
CoverEntityFeature.CLOSE | CoverEntityFeature.SET_POSITION | CoverEntityFeature.OPEN
)
async def test_ryse_smart_bridge_setup(hass: HomeAssistant) -> None:
"""Test that a Ryse smart bridge can be correctly setup in HA."""
accessories = await setup_accessories_from_file(hass, "ryse_smart_bridge.json")
await setup_test_accessories(hass, accessories)
await assert_devices_and_entities_created(
hass,
DeviceTestInfo(
unique_id=HUB_TEST_ACCESSORY_ID,
name="RYSE SmartBridge",
model="RYSE SmartBridge",
manufacturer="RYSE Inc.",
sw_version="1.3.0",
hw_version="0101.3521.0436",
devices=[
DeviceTestInfo(
unique_id="00:00:00:00:00:00:aid:2",
name="Master Bath South",
model="RYSE Shade",
manufacturer="RYSE Inc.",
sw_version="3.0.8",
hw_version="1.0.0",
serial_number="",
devices=[],
entities=[
EntityTestInfo(
entity_id="cover.master_bath_south_ryse_shade",
friendly_name="Master Bath South RYSE Shade",
unique_id="00:00:00:00:00:00_2_48",
supported_features=RYSE_SUPPORTED_FEATURES,
state="closed",
),
EntityTestInfo(
entity_id="sensor.master_bath_south_ryse_shade_battery",
friendly_name="Master Bath South RYSE Shade Battery",
entity_category=EntityCategory.DIAGNOSTIC,
capabilities={"state_class": SensorStateClass.MEASUREMENT},
unique_id="00:00:00:00:00:00_2_64",
unit_of_measurement=PERCENTAGE,
state="100",
),
],
),
DeviceTestInfo(
unique_id="00:00:00:00:00:00:aid:3",
name="RYSE SmartShade",
model="RYSE Shade",
manufacturer="RYSE Inc.",
sw_version="",
hw_version="",
serial_number="",
devices=[],
entities=[
EntityTestInfo(
entity_id="cover.ryse_smartshade_ryse_shade",
friendly_name="RYSE SmartShade RYSE Shade",
unique_id="00:00:00:00:00:00_3_48",
supported_features=RYSE_SUPPORTED_FEATURES,
state="open",
),
EntityTestInfo(
entity_id="sensor.ryse_smartshade_ryse_shade_battery",
friendly_name="RYSE SmartShade RYSE Shade Battery",
entity_category=EntityCategory.DIAGNOSTIC,
capabilities={"state_class": SensorStateClass.MEASUREMENT},
unique_id="00:00:00:00:00:00_3_64",
unit_of_measurement=PERCENTAGE,
state="100",
),
],
),
],
entities=[],
),
)
async def test_ryse_smart_bridge_four_shades_setup(hass: HomeAssistant) -> None:
"""Test that a Ryse smart bridge with four shades can be correctly setup in HA."""
accessories = await setup_accessories_from_file(
hass, "ryse_smart_bridge_four_shades.json"
)
await setup_test_accessories(hass, accessories)
await assert_devices_and_entities_created(
hass,
DeviceTestInfo(
unique_id=HUB_TEST_ACCESSORY_ID,
name="RYSE SmartBridge",
model="RYSE SmartBridge",
manufacturer="RYSE Inc.",
sw_version="1.3.0",
hw_version="0401.3521.0679",
devices=[
DeviceTestInfo(
unique_id="00:00:00:00:00:00:aid:2",
name="LR Left",
model="RYSE Shade",
manufacturer="RYSE Inc.",
sw_version="3.0.8",
hw_version="1.0.0",
serial_number="",
devices=[],
entities=[
EntityTestInfo(
entity_id="cover.lr_left_ryse_shade",
friendly_name="LR Left RYSE Shade",
unique_id="00:00:00:00:00:00_2_48",
supported_features=RYSE_SUPPORTED_FEATURES,
state="closed",
),
EntityTestInfo(
entity_id="sensor.lr_left_ryse_shade_battery",
friendly_name="LR Left RYSE Shade Battery",
entity_category=EntityCategory.DIAGNOSTIC,
capabilities={"state_class": SensorStateClass.MEASUREMENT},
unique_id="00:00:00:00:00:00_2_64",
unit_of_measurement=PERCENTAGE,
state="89",
),
],
),
DeviceTestInfo(
unique_id="00:00:00:00:00:00:aid:3",
name="LR Right",
model="RYSE Shade",
manufacturer="RYSE Inc.",
sw_version="3.0.8",
hw_version="1.0.0",
serial_number="",
devices=[],
entities=[
EntityTestInfo(
entity_id="cover.lr_right_ryse_shade",
friendly_name="LR Right RYSE Shade",
unique_id="00:00:00:00:00:00_3_48",
supported_features=RYSE_SUPPORTED_FEATURES,
state="closed",
),
EntityTestInfo(
entity_id="sensor.lr_right_ryse_shade_battery",
friendly_name="LR Right RYSE Shade Battery",
entity_category=EntityCategory.DIAGNOSTIC,
capabilities={"state_class": SensorStateClass.MEASUREMENT},
unique_id="00:00:00:00:00:00_3_64",
unit_of_measurement=PERCENTAGE,
state="100",
),
],
),
DeviceTestInfo(
unique_id="00:00:00:00:00:00:aid:4",
name="BR Left",
model="RYSE Shade",
manufacturer="RYSE Inc.",
sw_version="3.0.8",
hw_version="1.0.0",
serial_number="",
devices=[],
entities=[
EntityTestInfo(
entity_id="cover.br_left_ryse_shade",
friendly_name="BR Left RYSE Shade",
unique_id="00:00:00:00:00:00_4_48",
supported_features=RYSE_SUPPORTED_FEATURES,
state="open",
),
EntityTestInfo(
entity_id="sensor.br_left_ryse_shade_battery",
friendly_name="BR Left RYSE Shade Battery",
entity_category=EntityCategory.DIAGNOSTIC,
capabilities={"state_class": SensorStateClass.MEASUREMENT},
unique_id="00:00:00:00:00:00_4_64",
unit_of_measurement=PERCENTAGE,
state="100",
),
],
),
DeviceTestInfo(
unique_id="00:00:00:00:00:00:aid:5",
name="RZSS",
model="RYSE Shade",
manufacturer="RYSE Inc.",
sw_version="3.0.8",
hw_version="1.0.0",
serial_number="",
devices=[],
entities=[
EntityTestInfo(
entity_id="cover.rzss_ryse_shade",
friendly_name="RZSS RYSE Shade",
unique_id="00:00:00:00:00:00_5_48",
supported_features=RYSE_SUPPORTED_FEATURES,
state="open",
),
EntityTestInfo(
entity_id="sensor.rzss_ryse_shade_battery",
entity_category=EntityCategory.DIAGNOSTIC,
capabilities={"state_class": SensorStateClass.MEASUREMENT},
friendly_name="RZSS RYSE Shade Battery",
unique_id="00:00:00:00:00:00_5_64",
unit_of_measurement=PERCENTAGE,
state="0",
),
],
),
],
entities=[],
),
)

View file

@ -1,40 +0,0 @@
"""Make sure that Schlage Sense is enumerated properly."""
from homeassistant.core import HomeAssistant
from ..common import (
HUB_TEST_ACCESSORY_ID,
DeviceTestInfo,
EntityTestInfo,
assert_devices_and_entities_created,
setup_accessories_from_file,
setup_test_accessories,
)
async def test_schlage_sense_setup(hass: HomeAssistant) -> None:
"""Test that the accessory can be correctly setup in HA."""
accessories = await setup_accessories_from_file(hass, "schlage_sense.json")
await setup_test_accessories(hass, accessories)
await assert_devices_and_entities_created(
hass,
DeviceTestInfo(
unique_id=HUB_TEST_ACCESSORY_ID,
name="SENSE ",
model="BE479CAM619",
manufacturer="Schlage ",
sw_version="004.027.000",
hw_version="1.3.0",
serial_number="AAAAAAA000",
devices=[],
entities=[
EntityTestInfo(
entity_id="lock.sense_lock_mechanism",
friendly_name="SENSE Lock Mechanism",
unique_id="00:00:00:00:00:00_1_30",
supported_features=0,
state="unknown",
),
],
),
)

View file

@ -1,48 +0,0 @@
"""Test against characteristics captured from a SIMPLEconnect Fan.
https://github.com/home-assistant/core/issues/26180
"""
from homeassistant.components.fan import FanEntityFeature
from homeassistant.core import HomeAssistant
from ..common import (
HUB_TEST_ACCESSORY_ID,
DeviceTestInfo,
EntityTestInfo,
assert_devices_and_entities_created,
setup_accessories_from_file,
setup_test_accessories,
)
async def test_simpleconnect_fan_setup(hass: HomeAssistant) -> None:
"""Test that a SIMPLEconnect fan can be correctly setup in HA."""
accessories = await setup_accessories_from_file(hass, "simpleconnect_fan.json")
await setup_test_accessories(hass, accessories)
await assert_devices_and_entities_created(
hass,
DeviceTestInfo(
unique_id=HUB_TEST_ACCESSORY_ID,
name="SIMPLEconnect Fan-06F674",
model="SIMPLEconnect",
manufacturer="Hunter Fan",
sw_version="",
hw_version="",
serial_number="1234567890abcd",
devices=[],
entities=[
EntityTestInfo(
entity_id="fan.simpleconnect_fan_06f674_hunter_fan",
friendly_name="SIMPLEconnect Fan-06F674 Hunter Fan",
unique_id="00:00:00:00:00:00_1_8",
supported_features=FanEntityFeature.DIRECTION
| FanEntityFeature.SET_SPEED,
capabilities={
"preset_modes": None,
},
state="off",
),
],
),
)

View file

@ -1,100 +0,0 @@
"""Test against characteristics captured from a Velux Gateway.
https://github.com/home-assistant/core/issues/44314
"""
from homeassistant.components.cover import CoverEntityFeature
from homeassistant.components.sensor import SensorStateClass
from homeassistant.const import (
CONCENTRATION_PARTS_PER_MILLION,
PERCENTAGE,
UnitOfTemperature,
)
from homeassistant.core import HomeAssistant
from ..common import (
HUB_TEST_ACCESSORY_ID,
DeviceTestInfo,
EntityTestInfo,
assert_devices_and_entities_created,
setup_accessories_from_file,
setup_test_accessories,
)
async def test_velux_cover_setup(hass: HomeAssistant) -> None:
"""Test that a velux gateway can be correctly setup in HA."""
accessories = await setup_accessories_from_file(hass, "velux_gateway.json")
await setup_test_accessories(hass, accessories)
await assert_devices_and_entities_created(
hass,
DeviceTestInfo(
unique_id=HUB_TEST_ACCESSORY_ID,
name="VELUX Gateway",
model="VELUX Gateway",
manufacturer="VELUX",
sw_version="70",
hw_version="",
serial_number="a1a11a1",
devices=[
DeviceTestInfo(
name="VELUX Window",
model="VELUX Window",
manufacturer="VELUX",
sw_version="48",
hw_version="",
serial_number="1111111a114a111a",
unique_id="00:00:00:00:00:00:aid:3",
devices=[],
entities=[
EntityTestInfo(
entity_id="cover.velux_window_roof_window",
friendly_name="VELUX Window Roof Window",
unique_id="00:00:00:00:00:00_3_8",
supported_features=CoverEntityFeature.CLOSE
| CoverEntityFeature.SET_POSITION
| CoverEntityFeature.OPEN,
state="closed",
),
],
),
DeviceTestInfo(
name="VELUX Sensor",
model="VELUX Sensor",
manufacturer="VELUX",
sw_version="16",
hw_version="",
serial_number="a11b111",
unique_id="00:00:00:00:00:00:aid:2",
devices=[],
entities=[
EntityTestInfo(
entity_id="sensor.velux_sensor_temperature_sensor",
friendly_name="VELUX Sensor Temperature sensor",
capabilities={"state_class": SensorStateClass.MEASUREMENT},
unique_id="00:00:00:00:00:00_2_8",
unit_of_measurement=UnitOfTemperature.CELSIUS,
state="18.9",
),
EntityTestInfo(
entity_id="sensor.velux_sensor_humidity_sensor",
friendly_name="VELUX Sensor Humidity sensor",
capabilities={"state_class": SensorStateClass.MEASUREMENT},
unique_id="00:00:00:00:00:00_2_11",
unit_of_measurement=PERCENTAGE,
state="58",
),
EntityTestInfo(
entity_id="sensor.velux_sensor_carbon_dioxide_sensor",
friendly_name="VELUX Sensor Carbon Dioxide sensor",
capabilities={"state_class": SensorStateClass.MEASUREMENT},
unique_id="00:00:00:00:00:00_2_14",
unit_of_measurement=CONCENTRATION_PARTS_PER_MILLION,
state="400",
),
],
),
],
entities=[],
),
)

View file

@ -1,78 +0,0 @@
"""Make sure that Vocolinc Flowerbud is enumerated properly."""
from homeassistant.components.humidifier import HumidifierEntityFeature
from homeassistant.components.number import NumberMode
from homeassistant.components.sensor import SensorStateClass
from homeassistant.const import PERCENTAGE, EntityCategory
from homeassistant.core import HomeAssistant
from ..common import (
HUB_TEST_ACCESSORY_ID,
DeviceTestInfo,
EntityTestInfo,
assert_devices_and_entities_created,
setup_accessories_from_file,
setup_test_accessories,
)
async def test_vocolinc_flowerbud_setup(hass: HomeAssistant) -> None:
"""Test that a Vocolinc Flowerbud can be correctly setup in HA."""
accessories = await setup_accessories_from_file(hass, "vocolinc_flowerbud.json")
await setup_test_accessories(hass, accessories)
await assert_devices_and_entities_created(
hass,
DeviceTestInfo(
unique_id=HUB_TEST_ACCESSORY_ID,
name="VOCOlinc-Flowerbud-0d324b",
model="Flowerbud",
manufacturer="VOCOlinc",
sw_version="3.121.2",
hw_version="0.1",
serial_number="AM01121849000327",
devices=[],
entities=[
EntityTestInfo(
entity_id="humidifier.vocolinc_flowerbud_0d324b",
friendly_name="VOCOlinc-Flowerbud-0d324b",
unique_id="00:00:00:00:00:00_1_30",
supported_features=HumidifierEntityFeature.MODES,
capabilities={
"available_modes": ["normal", "auto"],
"max_humidity": 100.0,
"min_humidity": 0.0,
},
state="off",
),
EntityTestInfo(
entity_id="light.vocolinc_flowerbud_0d324b_mood_light",
friendly_name="VOCOlinc-Flowerbud-0d324b Mood Light",
unique_id="00:00:00:00:00:00_1_9",
supported_features=0,
capabilities={"supported_color_modes": ["hs"]},
state="on",
),
EntityTestInfo(
entity_id="number.vocolinc_flowerbud_0d324b_spray_quantity",
friendly_name="VOCOlinc-Flowerbud-0d324b Spray Quantity",
unique_id="00:00:00:00:00:00_1_30_38",
capabilities={
"max": 5,
"min": 1,
"mode": NumberMode.AUTO,
"step": 1,
},
state="5",
entity_category=EntityCategory.CONFIG,
),
EntityTestInfo(
entity_id="sensor.vocolinc_flowerbud_0d324b_current_humidity",
friendly_name="VOCOlinc-Flowerbud-0d324b Current Humidity",
unique_id="00:00:00:00:00:00_1_30_33",
capabilities={"state_class": SensorStateClass.MEASUREMENT},
unit_of_measurement=PERCENTAGE,
state="45.0",
),
],
),
)

View file

@ -1,5 +1,6 @@
"""Tests for homekit_controller init."""
from datetime import timedelta
import pathlib
from unittest.mock import patch
from aiohomekit import AccessoryNotFoundError
@ -7,6 +8,9 @@ from aiohomekit.model import Accessory, Transport
from aiohomekit.model.characteristics import CharacteristicsTypes
from aiohomekit.model.services import ServicesTypes
from aiohomekit.testing import FakePairing
from attr import asdict
import pytest
from syrupy.assertion import SnapshotAssertion
from homeassistant.components.homekit_controller.const import DOMAIN, ENTITY_MAP
from homeassistant.config_entries import ConfigEntryState
@ -20,6 +24,8 @@ from homeassistant.util.dt import utcnow
from .common import (
Helper,
remove_device,
setup_accessories_from_file,
setup_test_accessories,
setup_test_accessories_with_controller,
setup_test_component,
)
@ -27,6 +33,9 @@ from .common import (
from tests.common import async_fire_time_changed
from tests.typing import WebSocketGenerator
FIXTURES_DIR = pathlib.Path(__file__).parent / "fixtures"
FIXTURES = [path.relative_to(FIXTURES_DIR) for path in FIXTURES_DIR.glob("*.json")]
ALIVE_DEVICE_NAME = "testdevice"
ALIVE_DEVICE_ENTITY_ID = "light.testdevice"
@ -218,3 +227,57 @@ async def test_ble_device_only_checks_is_available(
is_available = True
async_fire_time_changed(hass, utcnow() + timedelta(hours=1))
assert hass.states.get("light.testdevice").state == STATE_OFF
@pytest.mark.parametrize("example", FIXTURES, ids=lambda val: str(val.stem))
async def test_snapshots(
hass: HomeAssistant, snapshot: SnapshotAssertion, example: str
) -> None:
"""Detect regressions in enumerating a homekit accessory database and building entities."""
accessories = await setup_accessories_from_file(hass, example)
config_entry, _ = await setup_test_accessories(hass, accessories)
device_registry = dr.async_get(hass)
entity_registry = er.async_get(hass)
registry_devices = dr.async_entries_for_config_entry(
device_registry, config_entry.entry_id
)
registry_devices.sort(key=lambda device: device.name)
devices = []
for device in registry_devices:
entities = []
registry_entities = er.async_entries_for_device(
entity_registry,
device_id=device.id,
include_disabled_entities=True,
)
registry_entities.sort(key=lambda entity: entity.entity_id)
for entity_entry in registry_entities:
state_dict = None
if state := hass.states.get(entity_entry.entity_id):
state_dict = dict(state.as_dict())
state_dict.pop("context", None)
state_dict.pop("last_changed", None)
state_dict.pop("last_updated", None)
state_dict["attributes"] = dict(state_dict["attributes"])
state_dict["attributes"].pop("access_token", None)
state_dict["attributes"].pop("entity_picture", None)
entry = asdict(entity_entry)
entry.pop("id", None)
entry.pop("device_id", None)
entities.append({"entry": entry, "state": state_dict})
device_dict = asdict(device)
device_dict.pop("id", None)
device_dict.pop("via_device_id", None)
devices.append({"device": device_dict, "entities": entities})
assert snapshot == devices