Simplify homekit_controller tests with snapshots (#100885)
This commit is contained in:
parent
c5b32d6307
commit
cae19431d1
29 changed files with 12776 additions and 2039 deletions
12712
tests/components/homekit_controller/snapshots/test_init.ambr
Normal file
12712
tests/components/homekit_controller/snapshots/test_init.ambr
Normal file
File diff suppressed because it is too large
Load diff
|
@ -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",
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
|
@ -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",
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
|
@ -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",
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
|
@ -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,
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
|
@ -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",
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
|
@ -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,
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
|
@ -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",
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
|
@ -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",
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
|
@ -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=[],
|
||||
),
|
||||
)
|
|
@ -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",
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
|
@ -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.
|
||||
|
|
|
@ -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",
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
|
@ -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",
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
|
@ -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"
|
||||
"""
|
|
@ -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=[],
|
||||
),
|
||||
)
|
|
@ -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,
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
|
@ -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,
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
|
@ -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",
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
|
@ -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",
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
|
@ -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",
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
|
@ -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},
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
|
@ -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",
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
|
@ -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=[],
|
||||
),
|
||||
)
|
|
@ -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",
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
|
@ -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",
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
|
@ -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=[],
|
||||
),
|
||||
)
|
|
@ -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",
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue