core/tests/components/tuya/__init__.py

248 lines
17 KiB
Python

"""Tests for the Tuya component."""
from __future__ import annotations
from typing import Any
from unittest.mock import patch
from tuya_sharing import CustomerDevice
from homeassistant.components.tuya import DeviceListener, ManagerCompat
from homeassistant.core import HomeAssistant
from tests.common import MockConfigEntry
DEVICE_MOCKS = [
"cl_3r8gc33pnqsxfe1g", # https://github.com/tuya/tuya-home-assistant/issues/754
"cl_cpbo62rn", # https://github.com/orgs/home-assistant/discussions/539
"cl_ebt12ypvexnixvtf", # https://github.com/tuya/tuya-home-assistant/issues/754
"cl_qqdxfdht", # https://github.com/orgs/home-assistant/discussions/539
"cl_zah67ekd", # https://github.com/home-assistant/core/issues/71242
"clkg_nhyj64w2", # https://github.com/home-assistant/core/issues/136055
"co2bj_yrr3eiyiacm31ski", # https://github.com/home-assistant/core/issues/133173
"cobj_hcdy5zrq3ikzthws", # https://github.com/orgs/home-assistant/discussions/482
"cs_ipmyy4nigpqcnd8q", # https://github.com/home-assistant/core/pull/148726
"cs_ka2wfrdoogpvgzfi", # https://github.com/home-assistant/core/issues/119865
"cs_qhxmvae667uap4zh", # https://github.com/home-assistant/core/issues/141278
"cs_vmxuxszzjwp5smli", # https://github.com/home-assistant/core/issues/119865
"cs_zibqa9dutqyaxym2", # https://github.com/home-assistant/core/pull/125098
"cwjwq_agwu93lr", # https://github.com/orgs/home-assistant/discussions/79
"cwwsq_wfkzyy0evslzsmoi", # https://github.com/home-assistant/core/issues/144745
"cwysj_akln8rb04cav403q", # https://github.com/home-assistant/core/pull/146599
"cwysj_z3rpyvznfcch99aa", # https://github.com/home-assistant/core/pull/146599
"cz_0g1fmqh6d5io7lcn", # https://github.com/home-assistant/core/issues/149704
"cz_2iepauebcvo74ujc", # https://github.com/home-assistant/core/issues/141278
"cz_2jxesipczks0kdct", # https://github.com/home-assistant/core/issues/147149
"cz_37mnhia3pojleqfh", # https://github.com/home-assistant/core/issues/146164
"cz_39sy2g68gsjwo2xv", # https://github.com/home-assistant/core/issues/141278
"cz_6fa7odsufen374x2", # https://github.com/home-assistant/core/issues/150029
"cz_9ivirni8wemum6cw", # https://github.com/home-assistant/core/issues/139735
"cz_HBRBzv1UVBVfF6SL", # https://github.com/tuya/tuya-home-assistant/issues/754
"cz_anwgf2xugjxpkfxb", # https://github.com/orgs/home-assistant/discussions/539
"cz_cuhokdii7ojyw8k2", # https://github.com/home-assistant/core/issues/149704
"cz_dntgh2ngvshfxpsz", # https://github.com/home-assistant/core/issues/149704
"cz_gbtxrqfy9xcsakyp", # https://github.com/home-assistant/core/issues/141278
"cz_gjnozsaz", # https://github.com/orgs/home-assistant/discussions/482
"cz_hA2GsgMfTQFTz9JL", # https://github.com/home-assistant/core/issues/148347
"cz_hj0a5c7ckzzexu8l", # https://github.com/home-assistant/core/issues/149704
"cz_ik9sbig3mthx9hjz", # https://github.com/home-assistant/core/issues/141278
"cz_jnbbxsb84gvvyfg5", # https://github.com/tuya/tuya-home-assistant/issues/754
"cz_n8iVBAPLFKAAAszH", # https://github.com/home-assistant/core/issues/146164
"cz_nkb0fmtlfyqosnvk", # https://github.com/orgs/home-assistant/discussions/482
"cz_nx8rv6jpe1tsnffk", # https://github.com/home-assistant/core/issues/148347
"cz_qm0iq4nqnrlzh4qc", # https://github.com/home-assistant/core/issues/141278
"cz_raceucn29wk2yawe", # https://github.com/tuya/tuya-home-assistant/issues/754
"cz_sb6bwb1n8ma2c5q4", # https://github.com/home-assistant/core/issues/141278
"cz_t0a4hwsf8anfsadp", # https://github.com/home-assistant/core/issues/149704
"cz_tf6qp8t3hl9h7m94", # https://github.com/home-assistant/core/issues/143209
"cz_tkn2s79mzedk6pwr", # https://github.com/home-assistant/core/issues/146164
"cz_vxqn72kwtosoy4d3", # https://github.com/home-assistant/core/issues/141278
"cz_w0qqde0g", # https://github.com/orgs/home-assistant/discussions/482
"cz_wifvoilfrqeo6hvu", # https://github.com/home-assistant/core/issues/146164
"cz_wrz6vzch8htux2zp", # https://github.com/home-assistant/core/issues/141278
"cz_y4jnobxh", # https://github.com/orgs/home-assistant/discussions/482
"dc_l3bpgg8ibsagon4x", # https://github.com/home-assistant/core/issues/149704
"dj_0gyaslysqfp4gfis", # https://github.com/home-assistant/core/issues/149895
"dj_8szt7whdvwpmxglk", # https://github.com/home-assistant/core/issues/149704
"dj_8y0aquaa8v6tho8w", # https://github.com/home-assistant/core/issues/149704
"dj_AqHUMdcbYzIq1Of4", # https://github.com/orgs/home-assistant/discussions/539
"dj_amx1bgdrfab6jngb", # https://github.com/orgs/home-assistant/discussions/482
"dj_bSXSSFArVKtc4DyC", # https://github.com/orgs/home-assistant/discussions/539
"dj_baf9tt9lb8t5uc7z", # https://github.com/home-assistant/core/issues/149704
"dj_c3nsqogqovapdpfj", # https://github.com/home-assistant/core/issues/146164
"dj_d4g0fbsoaal841o6", # https://github.com/home-assistant/core/issues/149704
"dj_dbou1ap4", # https://github.com/orgs/home-assistant/discussions/482
"dj_djnozmdyqyriow8z", # https://github.com/home-assistant/core/issues/149704
"dj_ekwolitfjhxn55js", # https://github.com/home-assistant/core/issues/149704
"dj_fuupmcr2mb1odkja", # https://github.com/home-assistant/core/issues/149704
"dj_hp6orhaqm6as3jnv", # https://github.com/home-assistant/core/issues/149704
"dj_hpc8ddyfv85haxa7", # https://github.com/home-assistant/core/issues/149704
"dj_iayz2jmtlipjnxj7", # https://github.com/home-assistant/core/issues/149704
"dj_idnfq7xbx8qewyoa", # https://github.com/home-assistant/core/issues/149704
"dj_ilddqqih3tucdk68", # https://github.com/home-assistant/core/issues/149704
"dj_j1bgp31cffutizub", # https://github.com/home-assistant/core/issues/149704
"dj_lmnt3uyltk1xffrt", # https://github.com/home-assistant/core/issues/149704
"dj_mki13ie507rlry4r", # https://github.com/home-assistant/core/pull/126242
"dj_nbumqpv8vz61enji", # https://github.com/home-assistant/core/issues/149704
"dj_nlxvjzy1hoeiqsg6", # https://github.com/home-assistant/core/issues/149704
"dj_oe0cpnjg", # https://github.com/home-assistant/core/issues/149704
"dj_riwp3k79", # https://github.com/home-assistant/core/issues/149704
"dj_tgewj70aowigv8fz", # https://github.com/orgs/home-assistant/discussions/539
"dj_tmsloaroqavbucgn", # https://github.com/home-assistant/core/issues/149704
"dj_ufq2xwuzd4nb0qdr", # https://github.com/home-assistant/core/issues/149704
"dj_vqwcnabamzrc2kab", # https://github.com/home-assistant/core/issues/149704
"dj_xdvitmhhmgefaeuq", # https://github.com/home-assistant/core/issues/146164
"dj_xokdfs6kh5ednakk", # https://github.com/home-assistant/core/issues/149704
"dj_zakhnlpdiu0ycdxn", # https://github.com/home-assistant/core/issues/149704
"dj_zav1pa32pyxray78", # https://github.com/home-assistant/core/issues/149704
"dj_zputiamzanuk6yky", # https://github.com/home-assistant/core/issues/149704
"dlq_0tnvg2xaisqdadcf", # https://github.com/home-assistant/core/issues/102769
"dlq_cnpkf4xdmd9v49iq", # https://github.com/home-assistant/core/pull/149320
"dlq_jdj6ccklup7btq3a", # https://github.com/home-assistant/core/issues/143209
"dlq_kxdr6su0c55p7bbo", # https://github.com/home-assistant/core/issues/143499
"dlq_r9kg2g1uhhyicycb", # https://github.com/home-assistant/core/issues/149650
"dlq_z3jngbyubvwgfrcv", # https://github.com/home-assistant/core/issues/150293
"dr_pjvxl1wsyqxivsaf", # https://github.com/home-assistant/core/issues/84869
"fs_g0ewlb1vmwqljzji", # https://github.com/home-assistant/core/issues/141231
"fs_ibytpo6fpnugft1c", # https://github.com/home-assistant/core/issues/135541
"gyd_lgekqfxdabipm3tn", # https://github.com/home-assistant/core/issues/133173
"hps_2aaelwxk", # https://github.com/home-assistant/core/issues/149704
"hps_wqashyqo", # https://github.com/home-assistant/core/issues/146180
"kg_4nqs33emdwJxpQ8O", # https://github.com/orgs/home-assistant/discussions/539
"kg_5ftkaulg", # https://github.com/orgs/home-assistant/discussions/539
"kg_gbm9ata1zrzaez4a", # https://github.com/home-assistant/core/issues/148347
"kj_CAjWAxBUZt7QZHfz", # https://github.com/home-assistant/core/issues/146023
"kj_fsxtzzhujkrak2oy", # https://github.com/orgs/home-assistant/discussions/439
"kj_s4uzibibgzdxzowo", # https://github.com/home-assistant/core/issues/150246
"kj_yrzylxax1qspdgpp", # https://github.com/orgs/home-assistant/discussions/61
"ks_j9fa8ahzac8uvlfl", # https://github.com/orgs/home-assistant/discussions/329
"kt_5wnlzekkstwcdsvm", # https://github.com/home-assistant/core/pull/148646
"kt_ibmmirhhq62mmf1g", # https://github.com/home-assistant/core/pull/150077
"kt_vdadlnmsorlhw4td", # https://github.com/home-assistant/core/pull/149635
"ldcg_9kbbfeho", # https://github.com/orgs/home-assistant/discussions/482
"mal_gyitctrjj1kefxp2", # Alarm Host support
"mcs_6ywsnauy", # https://github.com/orgs/home-assistant/discussions/482
"mcs_7jIGJAymiH8OsFFb", # https://github.com/home-assistant/core/issues/108301
"mcs_8yhypbo7", # https://github.com/orgs/home-assistant/discussions/482
"mcs_hx5ztlztij4yxxvg", # https://github.com/home-assistant/core/issues/148347
"mcs_qxu3flpqjsc1kqu3", # https://github.com/home-assistant/core/issues/141278
"mzj_qavcakohisj5adyh", # https://github.com/home-assistant/core/issues/141278
"ntq_9mqdhwklpvnnvb7t", # https://github.com/orgs/home-assistant/discussions/517
"pc_t2afic7i3v1bwhfp", # https://github.com/home-assistant/core/issues/149704
"pc_trjopo1vdlt9q1tg", # https://github.com/home-assistant/core/issues/149704
"pc_tsbguim4trl6fa7g", # https://github.com/home-assistant/core/issues/146164
"pc_yku9wsimasckdt15", # https://github.com/orgs/home-assistant/discussions/482
"pir_3amxzozho9xp4mkh", # https://github.com/home-assistant/core/issues/149704
"pir_fcdjzz3s", # https://github.com/home-assistant/core/issues/149704
"pir_wqz93nrdomectyoz", # https://github.com/home-assistant/core/issues/149704
"qccdz_7bvgooyjhiua1yyq", # https://github.com/home-assistant/core/issues/136207
"qxj_fsea1lat3vuktbt6", # https://github.com/orgs/home-assistant/discussions/318
"qxj_is2indt9nlth6esa", # https://github.com/home-assistant/core/issues/136472
"rqbj_4iqe2hsfyd86kwwc", # https://github.com/orgs/home-assistant/discussions/100
"sd_i6hyjg3af7doaswm", # https://github.com/orgs/home-assistant/discussions/539
"sd_lr33znaodtyarrrz", # https://github.com/home-assistant/core/issues/141278
"sfkzq_1fcnd8xk", # https://github.com/orgs/home-assistant/discussions/539
"sfkzq_ed7frwissyqrejic", # https://github.com/home-assistant/core/pull/149236
"sfkzq_o6dagifntoafakst", # https://github.com/home-assistant/core/issues/148116
"sfkzq_rzklytdei8i8vo37", # https://github.com/home-assistant/core/issues/146164
"sgbj_ulv4nnue7gqp0rjk", # https://github.com/home-assistant/core/issues/149704
"sj_tgvtvdoc", # https://github.com/orgs/home-assistant/discussions/482
"sp_drezasavompxpcgm", # https://github.com/home-assistant/core/issues/149704
"sp_nzauwyj3mcnjnf35", # https://github.com/home-assistant/core/issues/141278
"sp_rjKXWRohlvOTyLBu", # https://github.com/home-assistant/core/issues/149704
"sp_rudejjigkywujjvs", # https://github.com/home-assistant/core/issues/146164
"sp_sdd5f5f2dl5wydjf", # https://github.com/home-assistant/core/issues/144087
"tdq_1aegphq4yfd50e6b", # https://github.com/home-assistant/core/issues/143209
"tdq_9htyiowaf5rtdhrv", # https://github.com/home-assistant/core/issues/143209
"tdq_cq1p0nt0a4rixnex", # https://github.com/home-assistant/core/issues/146845
"tdq_nockvv2k39vbrxxk", # https://github.com/home-assistant/core/issues/145849
"tdq_pu8uhxhwcp3tgoz7", # https://github.com/home-assistant/core/issues/141278
"tdq_uoa3mayicscacseb", # https://github.com/home-assistant/core/issues/128911
"tyndj_pyakuuoc", # https://github.com/home-assistant/core/issues/149704
"wfcon_b25mh8sxawsgndck", # https://github.com/home-assistant/core/issues/149704
"wfcon_lieerjyy6l4ykjor", # https://github.com/home-assistant/core/issues/136055
"wg2_haclbl0qkqlf2qds", # https://github.com/orgs/home-assistant/discussions/517
"wg2_nwxr8qcu4seltoro", # https://github.com/orgs/home-assistant/discussions/430
"wg2_setmxeqgs63xwopm", # https://github.com/orgs/home-assistant/discussions/539
"wg2_v7owd9tzcaninc36", # https://github.com/orgs/home-assistant/discussions/539
"wk_6kijc7nd", # https://github.com/home-assistant/core/issues/136513
"wk_aqoouq7x", # https://github.com/home-assistant/core/issues/146263
"wk_fi6dne5tu4t1nm6j", # https://github.com/orgs/home-assistant/discussions/243
"wk_gogb05wrtredz3bs", # https://github.com/home-assistant/core/issues/136337
"wk_y5obtqhuztqsf2mj", # https://github.com/home-assistant/core/issues/139735
"wkcz_gc4b1mdw7kebtuyz", # https://github.com/home-assistant/core/issues/135617
"wnykq_npbbca46yiug8ysk", # https://github.com/orgs/home-assistant/discussions/539
"wnykq_rqhxdyusjrwxyff6", # https://github.com/home-assistant/core/issues/133173
"wsdcg_g2y6z3p3ja2qhyav", # https://github.com/home-assistant/core/issues/102769
"wsdcg_iq4ygaai", # https://github.com/orgs/home-assistant/discussions/482
"wsdcg_iv7hudlj", # https://github.com/home-assistant/core/issues/141278
"wsdcg_krlcihrpzpc8olw9", # https://github.com/orgs/home-assistant/discussions/517
"wsdcg_lf36y5nwb8jkxwgg", # https://github.com/orgs/home-assistant/discussions/539
"wsdcg_vtA4pDd6PLUZzXgZ", # https://github.com/orgs/home-assistant/discussions/482
"wsdcg_xr3htd96", # https://github.com/orgs/home-assistant/discussions/482
"wsdcg_yqiqbaldtr0i7mru", # https://github.com/home-assistant/core/issues/136223
"wxkg_ja5osu5g", # https://github.com/orgs/home-assistant/discussions/482
"wxkg_l8yaz4um5b3pwyvf", # https://github.com/home-assistant/core/issues/93975
"ydkt_jevroj5aguwdbs2e", # https://github.com/orgs/home-assistant/discussions/288
"ygsb_l6ax0u6jwbz82atk", # https://github.com/home-assistant/core/issues/146319
"ykq_bngwdjsr", # https://github.com/orgs/home-assistant/discussions/482
"ywbj_arywmw6h6vesoz5t", # https://github.com/home-assistant/core/issues/146164
"ywbj_cjlutkuuvxnie17o", # https://github.com/home-assistant/core/issues/146164
"ywbj_gf9dejhmzffgdyfj", # https://github.com/home-assistant/core/issues/149704
"ywbj_kscbebaf3s1eogvt", # https://github.com/home-assistant/core/issues/141278
"ywbj_rccxox8p", # https://github.com/orgs/home-assistant/discussions/625
"ywcgq_h8lvyoahr6s6aybf", # https://github.com/home-assistant/core/issues/145932
"ywcgq_wtzwyhkev3b4ubns", # https://github.com/home-assistant/core/issues/103818
"zjq_nkkl7uzv", # https://github.com/orgs/home-assistant/discussions/482
"zndb_4ggkyflayu1h1ho9", # https://github.com/home-assistant/core/pull/149317
"zndb_v5jlnn5hwyffkhp3", # https://github.com/home-assistant/core/issues/143209
"zndb_ze8faryrxr0glqnn", # https://github.com/home-assistant/core/issues/138372
"znrb_db81ge24jctwx8lo", # https://github.com/home-assistant/core/issues/136513
"zwjcy_myd45weu", # https://github.com/orgs/home-assistant/discussions/482
]
class MockDeviceListener(DeviceListener):
"""Mocked DeviceListener for testing."""
async def async_send_device_update(
self,
hass: HomeAssistant,
device: CustomerDevice,
updated_status_properties: dict[str, Any] | None = None,
) -> None:
"""Mock update device method."""
property_list: list[str] = []
if updated_status_properties:
for key, value in updated_status_properties.items():
if key not in device.status:
raise ValueError(
f"Property {key} not found in device status: {device.status}"
)
device.status[key] = value
property_list.append(key)
self.update_device(device, property_list)
await hass.async_block_till_done()
async def initialize_entry(
hass: HomeAssistant,
mock_manager: ManagerCompat,
mock_config_entry: MockConfigEntry,
mock_devices: CustomerDevice | list[CustomerDevice],
) -> None:
"""Initialize the Tuya component with a mock manager and config entry."""
if not isinstance(mock_devices, list):
mock_devices = [mock_devices]
mock_manager.device_map = {device.id: device for device in mock_devices}
# Setup
mock_config_entry.add_to_hass(hass)
# Initialize the component
with patch(
"homeassistant.components.tuya.ManagerCompat", return_value=mock_manager
):
await hass.config_entries.async_setup(mock_config_entry.entry_id)
await hass.async_block_till_done()