helpers.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. from contextlib import asynccontextmanager
  2. from unittest.mock import AsyncMock
  3. from custom_components.tuya_local.device import TuyaLocalDevice
  4. @asynccontextmanager
  5. async def assert_device_properties_set(device: TuyaLocalDevice, properties: dict):
  6. results = []
  7. def generate_result(*args):
  8. result = AsyncMock()
  9. results.append(result)
  10. return result()
  11. device.async_set_property.side_effect = generate_result
  12. try:
  13. yield
  14. finally:
  15. assert device.async_set_property.call_count == len(properties.keys())
  16. for key in properties.keys():
  17. device.async_set_property.assert_any_call(key, properties[key])
  18. for result in results:
  19. result.assert_awaited()
  20. @asynccontextmanager
  21. async def assert_device_properties_set_optional(
  22. device: TuyaLocalDevice, properties: dict, optional_properties: dict,
  23. ):
  24. results = []
  25. def generate_result(*args):
  26. result = AsyncMock()
  27. results.append(result)
  28. return result()
  29. device.async_set_property.side_effect = generate_result
  30. try:
  31. yield
  32. finally:
  33. assert (device.async_set_property.call_count >= len(properties.keys())) and (
  34. device.async_set_property.call_count
  35. <= len(properties.keys()) + len(optional_properties.keys())
  36. )
  37. for key in properties.keys():
  38. device.async_set_property.assert_any_call(key, properties[key])
  39. for result in results:
  40. result.assert_awaited()