time.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. # Mixins for testing time entities
  2. from datetime import time
  3. from ..helpers import assert_device_properties_set
  4. class BasicTimeTests:
  5. def setUpBasicTime(
  6. self,
  7. subject,
  8. hour_dp=None,
  9. minute_dp=None,
  10. second_dp=None,
  11. testdata=None,
  12. ):
  13. self.basicTime = subject
  14. self.basicTimeHourDp = hour_dp
  15. self.basicTimeMinDp = minute_dp
  16. self.basicTimeSecDp = second_dp
  17. self.basicTimeTestData = testdata
  18. def test_time_value(self):
  19. if self.basicTimeTestData:
  20. hour = self.basicTimeTestData["hour"]
  21. minute = self.basicTimeTestData["minute"]
  22. second = self.basicTimeTestData["second"]
  23. expected = self.basicTimeTestData["time"]
  24. else:
  25. expected = "00:00:00"
  26. hour = minute = second = 0
  27. if self.basicTimeHourDp:
  28. self.dps[self.basicTimeHourDp] = hour
  29. if self.basicTimeMinDp:
  30. self.dps[self.basicTimeMinDp] = minute
  31. if self.basicTimeSecDp:
  32. self.dps[self.basicTimeSecDp] = second
  33. self.assertEqual(self.basicTime.native_value.isoformat("seconds"), expected)
  34. async def test_time_set_value(self):
  35. if self.basicTimeTestData:
  36. hour = self.basicTimeTestData["hour"]
  37. minute = self.basicTimeTestData["minute"]
  38. second = self.basicTimeTestData["second"]
  39. val = self.basicTimeTestData["time"]
  40. else:
  41. val = "00:00:00"
  42. hour = minute = second = 0
  43. expected = {}
  44. if self.basicTimeHourDp:
  45. expected[self.basicTimeHourDp] = hour
  46. if self.basicTimeMinDp:
  47. expected[self.basicTimeMinDp] = minute
  48. if self.basicTimeSecDp:
  49. expected[self.basicTimeSecDp] = second
  50. async with assert_device_properties_set(
  51. self.basicTime._device,
  52. expected,
  53. f"{self.basicTime.name} failed to set correct value",
  54. ):
  55. await self.basicTime.async_set_native_value(time.fromisoformat(val))
  56. class MultiTimeTests:
  57. def setUpMultiTime(self, times):
  58. self.multiTime = {}
  59. self.multiTimeHourDp = {}
  60. self.multiTimeMinDp = {}
  61. self.multiTimeSecDp = {}
  62. self.multiTimeTestData = {}
  63. for t in times:
  64. name = t.get("name")
  65. subject = self.entities.get(name)
  66. if subject is None:
  67. raise AttributeError(f"No time for {name} found.")
  68. self.multiTime[name] = subject
  69. self.multiTimeHourDp[name] = t.get("hour")
  70. self.multiTimeMinDp[name] = t.get("minute")
  71. self.multiTimeSecDp[name] = t.get("second")
  72. self.multiTimeTestData[name] = t.get("testdata", None)
  73. def test_multi_time_value(self):
  74. for key, subject in self.multiTime.items():
  75. if self.multiTimeTestData[key]:
  76. hour = self.multiTimeTestData[key].get("hour", 0)
  77. minute = self.multiTimeTestData[key].get("minute", 0)
  78. second = self.multiTimeTestData[key].get("second", 0)
  79. expected = self.multiTimeTestData[key].get("time")
  80. else:
  81. expected = "00:00:00"
  82. hour = minute = second = 0
  83. if self.multiTimeHourDp[key]:
  84. self.dps[self.multiTimeHourDp[key]] = hour
  85. if self.multiTimeMinDp[key]:
  86. self.dps[self.multiTimeMinDp[key]] = minute
  87. if self.multiTimeSecDp[key]:
  88. self.dps[self.multiTimeSecDp[key]] = second
  89. self.assertEqual(
  90. subject.native_value.isoformat("seconds"),
  91. expected,
  92. f"{key} value mismatch",
  93. )
  94. async def test_multi_time_set_value(self):
  95. for key, subject in self.multiTime.items():
  96. if self.multiTimeTestData[key]:
  97. hour = self.multiTimeTestData[key].get("hour", 0)
  98. minute = self.multiTimeTestData[key].get("minute", 0)
  99. second = self.multiTimeTestData[key].get("second", 0)
  100. val = self.multiTimeTestData[key].get("time")
  101. else:
  102. val = "00:00:00"
  103. hour = minute = second = 0
  104. expected = {}
  105. if self.multiTimeHourDp[key]:
  106. expected[self.multiTimeHourDp[key]] = hour
  107. if self.multiTimeMinDp[key]:
  108. expected[self.multiTimeMinDp[key]] = minute
  109. if self.multiTimeSecDp[key]:
  110. expected[self.multiTimeSecDp[key]] = second
  111. async with assert_device_properties_set(
  112. subject._device,
  113. expected,
  114. f"{key} failed to set correct value",
  115. ):
  116. await subject.async_set_value(time.fromisoformat(val))