number.py 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  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. self.assertEqual(
  67. subject.native_min_value,
  68. self.multiNumberMin[key],
  69. f"{key} min value mismatch",
  70. )
  71. def test_multi_number_max_value(self):
  72. for key, subject in self.multiNumber.items():
  73. self.assertEqual(
  74. subject.native_max_value,
  75. self.multiNumberMax[key],
  76. f"{key} max value mismatch",
  77. )
  78. def test_multi_number_step(self):
  79. for key, subject in self.multiNumber.items():
  80. self.assertEqual(
  81. subject.native_step,
  82. self.multiNumberStep[key],
  83. f"{key} step mismatch",
  84. )
  85. def test_multi_number_mode(self):
  86. for key, subject in self.multiNumber.items():
  87. self.assertEqual(
  88. subject.mode,
  89. self.multiNumberMode[key],
  90. f"{key} mode mismatch",
  91. )
  92. def test_multi_number_unit_of_measurement(self):
  93. for key, subject in self.multiNumber.items():
  94. self.assertEqual(
  95. subject.native_unit_of_measurement,
  96. self.multiNumberUnit[key],
  97. f"{key} unit mismatch",
  98. )
  99. def test_multi_number_value(self):
  100. for key, subject in self.multiNumber.items():
  101. val = min(
  102. max(self.multiNumberMin[key], self.multiNumberStep[key]),
  103. self.multiNumberMax[key],
  104. )
  105. dps_val = val * self.multiNumberScale[key]
  106. self.dps[self.multiNumberDps[key]] = dps_val
  107. self.assertEqual(subject.native_value, val, f"{key} value mismatch")
  108. async def test_multi_number_set_value(self):
  109. for key, subject in self.multiNumber.items():
  110. val = min(
  111. max(self.multiNumberMin[key], self.multiNumberStep[key]),
  112. self.multiNumberMax[key],
  113. )
  114. dps_val = val * self.multiNumberScale[key]
  115. async with assert_device_properties_set(
  116. subject._device,
  117. {self.multiNumberDps[key]: dps_val},
  118. f"{key} failed to set correct value",
  119. ):
  120. await subject.async_set_native_value(val)
  121. def test_multi_number_extra_state_attributes(self):
  122. for key, subject in self.multiNumber.items():
  123. self.assertEqual(
  124. subject.extra_state_attributes,
  125. {},
  126. f"{key} extra_state_attributes mismatch",
  127. )