number.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. # Mixins for testing number entities
  2. from ..helpers import assert_device_properties_set
  3. class BasicNumberTests:
  4. def setUpBasicNumber(
  5. self, dps, subject, max, min=0, step=1, mode="auto", scale=1, unit=None
  6. ):
  7. self.basicNumber = subject
  8. self.basicNumberDps = dps
  9. self.basicNumberMin = min
  10. self.basicNumberMax = max
  11. self.basicNumberStep = step
  12. self.basicNumberMode = mode
  13. self.basicNumberScale = scale
  14. self.basicNumberUnit = unit
  15. def test_number_min_value(self):
  16. self.assertEqual(self.basicNumber.min_value, self.basicNumberMin)
  17. def test_number_max_value(self):
  18. self.assertEqual(self.basicNumber.max_value, self.basicNumberMax)
  19. def test_number_step(self):
  20. self.assertEqual(self.basicNumber.step, self.basicNumberStep)
  21. def test_number_mode(self):
  22. self.assertEqual(self.basicNumber.mode, self.basicNumberMode)
  23. def test_number_unit_of_measurement(self):
  24. self.assertEqual(self.basicNumber.unit_of_measurement, self.basicNumberUnit)
  25. def test_number_value(self):
  26. val = min(max(self.basicNumberMin, self.basicNumberStep), self.basicNumberMax)
  27. dps_val = val * self.basicNumberScale
  28. self.dps[self.basicNumberDps] = dps_val
  29. self.assertEqual(self.basicNumber.value, val)
  30. async def test_number_set_value(self):
  31. val = min(max(self.basicNumberMin, self.basicNumberStep), self.basicNumberMax)
  32. dps_val = val * self.basicNumberScale
  33. async with assert_device_properties_set(
  34. self.basicNumber._device, {self.basicNumberDps: dps_val}
  35. ):
  36. await self.basicNumber.async_set_value(val)
  37. def test_number_extra_state_attributes(self):
  38. self.assertEqual(self.basicNumber.extra_state_attributes, {})
  39. class MultiNumberTests:
  40. def setUpMultiNumber(self, numbers):
  41. self.multiNumber = {}
  42. self.multiNumberDps = {}
  43. self.multiNumberMin = {}
  44. self.multiNumberMax = {}
  45. self.multiNumberStep = {}
  46. self.multiNumberMode = {}
  47. self.multiNumberScale = {}
  48. self.multiNumberUnit = {}
  49. for n in numbers:
  50. name = n.get("name")
  51. subject = self.entities.get(name)
  52. if subject is None:
  53. raise AttributeError(f"No number for {name} found.")
  54. self.multiNumber[name] = subject
  55. self.multiNumberDps[name] = n.get("dps")
  56. self.multiNumberMin[name] = n.get("min", 0)
  57. self.multiNumberMax[name] = n.get("max")
  58. self.multiNumberStep[name] = n.get("step", 1)
  59. self.multiNumberMode[name] = n.get("mode", "auto")
  60. self.multiNumberScale[name] = n.get("scale", 1)
  61. self.multiNumberUnit[name] = n.get("unit", None)
  62. def test_multi_number_min_value(self):
  63. for key, subject in self.multiNumber.items():
  64. with self.subTest(key):
  65. self.assertEqual(subject.min_value, self.multiNumberMin[key])
  66. def test_multi_number_max_value(self):
  67. for key, subject in self.multiNumber.items():
  68. with self.subTest(key):
  69. self.assertEqual(subject.max_value, self.multiNumberMax[key])
  70. def test_multi_number_step(self):
  71. for key, subject in self.multiNumber.items():
  72. with self.subTest(key):
  73. self.assertEqual(subject.step, self.multiNumberStep[key])
  74. def test_multi_number_mode(self):
  75. for key, subject in self.multiNumber.items():
  76. with self.subTest(key):
  77. self.assertEqual(subject.mode, self.multiNumberMode[key])
  78. def test_multi_number_unit_of_measurement(self):
  79. for key, subject in self.multiNumber.items():
  80. with self.subTest(key):
  81. self.assertEqual(subject.unit_of_measurement, self.multiNumberUnit[key])
  82. def test_multi_number_value(self):
  83. for key, subject in self.multiNumber.items():
  84. with self.subTest(key):
  85. val = min(
  86. max(self.multiNumberMin[key], self.multiNumberStep[key]),
  87. self.multiNumberMax[key],
  88. )
  89. dps_val = val * self.multiNumberScale[key]
  90. self.dps[self.multiNumberDps[key]] = dps_val
  91. self.assertEqual(subject.value, val)
  92. async def test_multi_number_set_value(self):
  93. for key, subject in self.multiNumber.items():
  94. with self.subTest(key):
  95. val = min(
  96. max(self.multiNumberMin[key], self.multiNumberStep[key]),
  97. self.multiNumberMax[key],
  98. )
  99. dps_val = val * self.multiNumberScale[key]
  100. async with assert_device_properties_set(
  101. subject._device, {self.multiNumberDps[key]: dps_val}
  102. ):
  103. await subject.async_set_value(val)
  104. def test_multi_number_extra_state_attributes(self):
  105. for key, subject in self.multiNumber.items():
  106. with self.subTest(key):
  107. self.assertEqual(subject.extra_state_attributes, {})