helpers.py 2.1 KB

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