number.py 4.6 KB

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