helpers.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. provided = {}
  8. def generate_result(*args):
  9. result = AsyncMock()
  10. results.append(result)
  11. provided[args[0]] = args[1]
  12. return result()
  13. def generate_results(*args):
  14. result = AsyncMock()
  15. results.append(result)
  16. provided.update(args[0])
  17. return result()
  18. device.async_set_property.side_effect = generate_result
  19. device.async_set_properties.side_effect = generate_results
  20. try:
  21. yield
  22. finally:
  23. assert len(provided) == len(properties.keys())
  24. for p in properties:
  25. assert p in provided
  26. for result in results:
  27. result.assert_awaited()
  28. @asynccontextmanager
  29. async def assert_device_properties_set_optional(
  30. device: TuyaLocalDevice,
  31. properties: dict,
  32. optional_properties: dict,
  33. ):
  34. results = []
  35. provided = {}
  36. def generate_result(*args):
  37. result = AsyncMock()
  38. results.append(result)
  39. provided[args[0]] = args[1]
  40. return result()
  41. def generate_results(*args):
  42. result = AsyncMock()
  43. results.append(result)
  44. provided.update(args[0])
  45. return result()
  46. device.async_set_property.side_effect = generate_result
  47. device.async_set_properties.side_effect = generate_results
  48. try:
  49. yield
  50. finally:
  51. assert len(provided) >= len(properties.keys()) and (
  52. len(provided) <= len(properties.keys()) + len(optional_properties.keys())
  53. )
  54. for p in properties:
  55. assert p in provided
  56. for result in results:
  57. result.assert_awaited()