number.py 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  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.native_min_value, self.basicNumberMin)
  17. def test_number_max_value(self):
  18. self.assertEqual(self.basicNumber.native_max_value, self.basicNumberMax)
  19. def test_number_step(self):
  20. self.assertEqual(self.basicNumber.native_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(
  25. self.basicNumber.native_unit_of_measurement, self.basicNumberUnit
  26. )
  27. def test_number_value(self):
  28. val = min(max(self.basicNumberMin, self.basicNumberStep), self.basicNumberMax)
  29. dps_val = val * self.basicNumberScale
  30. self.dps[self.basicNumberDps] = dps_val
  31. self.assertEqual(self.basicNumber.native_value, val)
  32. async def test_number_set_value(self):
  33. val = min(max(self.basicNumberMin, self.basicNumberStep), self.basicNumberMax)
  34. dps_val = val * self.basicNumberScale
  35. async with assert_device_properties_set(
  36. self.basicNumber._device, {self.basicNumberDps: dps_val}
  37. ):
  38. await self.basicNumber.async_set_native_value(val)
  39. def test_number_extra_state_attributes(self):
  40. self.assertEqual(self.basicNumber.extra_state_attributes, {})
  41. class MultiNumberTests:
  42. def setUpMultiNumber(self, numbers):
  43. self.multiNumber = {}
  44. self.multiNumberDps = {}
  45. self.multiNumberMin = {}
  46. self.multiNumberMax = {}
  47. self.multiNumberStep = {}
  48. self.multiNumberMode = {}
  49. self.multiNumberScale = {}
  50. self.multiNumberUnit = {}
  51. for n in numbers:
  52. name = n.get("name")
  53. subject = self.entities.get(name)
  54. if subject is None:
  55. raise AttributeError(f"No number for {name} found.")
  56. self.multiNumber[name] = subject
  57. self.multiNumberDps[name] = n.get("dps")
  58. self.multiNumberMin[name] = n.get("min", 0)
  59. self.multiNumberMax[name] = n.get("max")
  60. self.multiNumberStep[name] = n.get("step", 1)
  61. self.multiNumberMode[name] = n.get("mode", "auto")
  62. self.multiNumberScale[name] = n.get("scale", 1)
  63. self.multiNumberUnit[name] = n.get("unit", None)
  64. def test_multi_number_min_value(self):
  65. for key, subject in self.multiNumber.items():
  66. with self.subTest(key):
  67. self.assertEqual(subject.native_min_value, self.multiNumberMin[key])
  68. def test_multi_number_max_value(self):
  69. for key, subject in self.multiNumber.items():
  70. with self.subTest(key):
  71. self.assertEqual(subject.native_max_value, self.multiNumberMax[key])
  72. def test_multi_number_step(self):
  73. for key, subject in self.multiNumber.items():
  74. with self.subTest(key):
  75. self.assertEqual(subject.native_step, self.multiNumberStep[key])
  76. def test_multi_number_mode(self):
  77. for key, subject in self.multiNumber.items():
  78. with self.subTest(key):
  79. self.assertEqual(subject.mode, self.multiNumberMode[key])
  80. def test_multi_number_unit_of_measurement(self):
  81. for key, subject in self.multiNumber.items():
  82. with self.subTest(key):
  83. self.assertEqual(
  84. subject.native_unit_of_measurement, self.multiNumberUnit[key]
  85. )
  86. def test_multi_number_value(self):
  87. for key, subject in self.multiNumber.items():
  88. with self.subTest(key):
  89. val = min(
  90. max(self.multiNumberMin[key], self.multiNumberStep[key]),
  91. self.multiNumberMax[key],
  92. )
  93. dps_val = val * self.multiNumberScale[key]
  94. self.dps[self.multiNumberDps[key]] = dps_val
  95. self.assertEqual(subject.native_value, val)
  96. async def test_multi_number_set_value(self):
  97. for key, subject in self.multiNumber.items():
  98. with self.subTest(key):
  99. val = min(
  100. max(self.multiNumberMin[key], self.multiNumberStep[key]),
  101. self.multiNumberMax[key],
  102. )
  103. dps_val = val * self.multiNumberScale[key]
  104. async with assert_device_properties_set(
  105. subject._device, {self.multiNumberDps[key]: dps_val}
  106. ):
  107. await subject.async_set_native_value(val)
  108. def test_multi_number_extra_state_attributes(self):
  109. for key, subject in self.multiNumber.items():
  110. with self.subTest(key):
  111. self.assertEqual(subject.extra_state_attributes, {})