helpers.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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. assert properties[p] == provided[p]
  27. for result in results:
  28. result.assert_awaited()
  29. @asynccontextmanager
  30. async def assert_device_properties_set_optional(
  31. device: TuyaLocalDevice,
  32. properties: dict,
  33. optional_properties: dict,
  34. ):
  35. results = []
  36. provided = {}
  37. def generate_result(*args):
  38. result = AsyncMock()
  39. results.append(result)
  40. provided[args[0]] = args[1]
  41. return result()
  42. def generate_results(*args):
  43. result = AsyncMock()
  44. results.append(result)
  45. provided.update(args[0])
  46. return result()
  47. device.async_set_property.side_effect = generate_result
  48. device.async_set_properties.side_effect = generate_results
  49. try:
  50. yield
  51. finally:
  52. assert len(provided) >= len(properties.keys()) and (
  53. len(provided) <= len(properties.keys()) + len(optional_properties.keys())
  54. )
  55. for p in properties:
  56. assert p in provided
  57. assert properties[p] == provided[p]
  58. for p in optional_properties:
  59. if p in provided:
  60. assert optional_properties[p] == provided[p]
  61. for result in results:
  62. result.assert_awaited()