climate.py 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. # Mixins for testing climate entities
  2. from math import floor
  3. from ..helpers import assert_device_properties_set
  4. class TargetTemperatureTests:
  5. def setUpTargetTemperature(self, dps, subject, min=15, max=35, step=1, scale=1):
  6. self.targetTemp = subject
  7. self.targetTempDps = dps
  8. self.targetTempMin = min
  9. self.targetTempMax = max
  10. self.targetTempStep = step
  11. self.targetTempScale = scale
  12. def test_target_temperature(self):
  13. self.dps[self.targetTempDps] = 25 * self.targetTempScale
  14. self.assertEqual(self.targetTemp.target_temperature, 25)
  15. def test_target_temperature_step(self):
  16. self.assertEqual(
  17. self.targetTemp.target_temperature_step,
  18. self.targetTempStep / self.targetTempScale,
  19. )
  20. def test_minimum_target_temperature(self):
  21. self.assertEqual(self.targetTemp.min_temp, self.targetTempMin)
  22. def test_maximum_target_temperature(self):
  23. self.assertEqual(self.targetTemp.max_temp, self.targetTempMax)
  24. async def test_legacy_set_temperature_with_temperature(self):
  25. test_val = floor((self.targetTempMin + self.targetTempMax) / 2)
  26. async with assert_device_properties_set(
  27. self.targetTemp._device,
  28. {self.targetTempDps: test_val * self.targetTempScale},
  29. ):
  30. await self.targetTemp.async_set_temperature(temperature=test_val)
  31. async def test_legacy_set_temperature_with_no_valid_properties(self):
  32. await self.targetTemp.async_set_temperature(something="else")
  33. self.targetTemp._device.async_set_property.assert_not_called()
  34. async def test_set_target_temperature_succeeds_within_valid_range(self):
  35. test_val = floor((self.targetTempMin + self.targetTempMax) / 2)
  36. async with assert_device_properties_set(
  37. self.targetTemp._device,
  38. {self.targetTempDps: test_val * self.targetTempScale},
  39. ):
  40. await self.targetTemp.async_set_target_temperature(test_val)
  41. async def test_set_target_temperature_fails_outside_valid_range(self):
  42. test_val = self.targetTempMin - 1
  43. with self.assertRaisesRegex(
  44. ValueError,
  45. f"temperature \\({test_val}\\) must be between {self.targetTempMin} and {self.targetTempMax}",
  46. ):
  47. await self.targetTemp.async_set_target_temperature(test_val)
  48. test_val = self.targetTempMax + 1
  49. with self.assertRaisesRegex(
  50. ValueError,
  51. f"temperature \\({test_val}\\) must be between {self.targetTempMin} and {self.targetTempMax}",
  52. ):
  53. await self.targetTemp.async_set_target_temperature(test_val)
  54. async def test_set_target_temperature_rounds_value_to_closest_integer(self):
  55. test_val = floor((self.targetTempMin + self.targetTempMax) / 2)
  56. test_dpsval = test_val * self.targetTempScale
  57. test_val = (test_dpsval + 0.3) / self.targetTempScale
  58. async with assert_device_properties_set(
  59. self.targetTemp._device,
  60. {self.targetTempDps: test_dpsval},
  61. ):
  62. await self.targetTemp.async_set_target_temperature(test_val)