helpers.py 2.2 KB

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