helpers.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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,
  23. properties: dict,
  24. optional_properties: dict,
  25. ):
  26. results = []
  27. def generate_result(*args):
  28. result = AsyncMock()
  29. results.append(result)
  30. return result()
  31. device.async_set_property.side_effect = generate_result
  32. try:
  33. yield
  34. finally:
  35. assert (device.async_set_property.call_count >= len(properties.keys())) and (
  36. device.async_set_property.call_count
  37. <= len(properties.keys()) + len(optional_properties.keys())
  38. )
  39. for key in properties.keys():
  40. device.async_set_property.assert_any_call(key, properties[key])
  41. for result in results:
  42. result.assert_awaited()