core/tests/components/yeelight/__init__.py

110 lines
2.8 KiB
Python

"""Tests for the Yeelight integration."""
from unittest.mock import MagicMock, patch
from yeelight import BulbException, BulbType
from yeelight.main import _MODEL_SPECS
from homeassistant.components.yeelight import (
CONF_MODE_MUSIC,
CONF_NIGHTLIGHT_SWITCH_TYPE,
CONF_SAVE_ON_CHANGE,
DOMAIN,
NIGHTLIGHT_SWITCH_TYPE_LIGHT,
YeelightScanner,
)
from homeassistant.const import CONF_DEVICES, CONF_ID, CONF_NAME
IP_ADDRESS = "192.168.1.239"
MODEL = "color"
ID = "0x000000000015243f"
FW_VER = "18"
CAPABILITIES = {
"id": ID,
"model": MODEL,
"fw_ver": FW_VER,
"support": "get_prop set_default set_power toggle set_bright start_cf stop_cf"
" set_scene cron_add cron_get cron_del set_ct_abx set_rgb",
"name": "",
}
NAME = "name"
UNIQUE_NAME = f"yeelight_{MODEL}_{ID}"
MODULE = "homeassistant.components.yeelight"
MODULE_CONFIG_FLOW = f"{MODULE}.config_flow"
PROPERTIES = {
"power": "on",
"main_power": "on",
"bright": "50",
"ct": "4000",
"rgb": "16711680",
"hue": "100",
"sat": "35",
"color_mode": "1",
"flowing": "0",
"bg_power": "on",
"bg_lmode": "1",
"bg_flowing": "0",
"bg_ct": "5000",
"bg_bright": "80",
"bg_rgb": "65280",
"bg_hue": "200",
"bg_sat": "70",
"nl_br": "23",
"active_mode": "0",
"current_brightness": "30",
}
ENTITY_BINARY_SENSOR_TEMPLATE = "binary_sensor.{}_nightlight"
ENTITY_BINARY_SENSOR = ENTITY_BINARY_SENSOR_TEMPLATE.format(UNIQUE_NAME)
ENTITY_LIGHT = f"light.{UNIQUE_NAME}"
ENTITY_NIGHTLIGHT = f"light.{UNIQUE_NAME}_nightlight"
ENTITY_AMBILIGHT = f"light.{UNIQUE_NAME}_ambilight"
YAML_CONFIGURATION = {
DOMAIN: {
CONF_DEVICES: {
IP_ADDRESS: {
CONF_NAME: NAME,
CONF_NIGHTLIGHT_SWITCH_TYPE: NIGHTLIGHT_SWITCH_TYPE_LIGHT,
CONF_MODE_MUSIC: True,
CONF_SAVE_ON_CHANGE: True,
}
}
}
}
CONFIG_ENTRY_DATA = {CONF_ID: ID}
def _mocked_bulb(cannot_connect=False):
bulb = MagicMock()
type(bulb).get_capabilities = MagicMock(
return_value=None if cannot_connect else CAPABILITIES
)
type(bulb).get_properties = MagicMock(
side_effect=BulbException if cannot_connect else None
)
type(bulb).get_model_specs = MagicMock(return_value=_MODEL_SPECS[MODEL])
bulb.capabilities = CAPABILITIES
bulb.model = MODEL
bulb.bulb_type = BulbType.Color
bulb.last_properties = PROPERTIES
bulb.music_mode = False
return bulb
def _patch_discovery(prefix, no_device=False):
YeelightScanner._scanner = None # Clear class scanner to reset hass
def _mocked_discovery(timeout=2, interface=False):
if no_device:
return []
return [{"ip": IP_ADDRESS, "port": 55443, "capabilities": CAPABILITIES}]
return patch(f"{prefix}.discover_bulbs", side_effect=_mocked_discovery)