sensor.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. # Mixins for testing sensor entities
  2. from homeassistant.components.sensor import SensorDeviceClass
  3. class BasicSensorTests:
  4. def setUpBasicSensor(
  5. self,
  6. dps,
  7. subject,
  8. unit=None,
  9. state_class=None,
  10. device_class=None,
  11. testdata=(30, 30),
  12. ):
  13. self.basicSensor = subject
  14. self.basicSensorDps = dps
  15. self.basicSensorUnit = unit
  16. self.basicSensorStateClass = state_class
  17. try:
  18. self.basicSensorDeviceClass = SensorDeviceClass(device_class)
  19. except ValueError:
  20. self.basicSensorDeviceClass = None
  21. self.basicSensorTestData = testdata
  22. def test_basic_sensor_units(self):
  23. self.assertEqual(
  24. self.basicSensor.native_unit_of_measurement, self.basicSensorUnit
  25. )
  26. def test_basic_sensor_device_class(self):
  27. self.assertEqual(self.basicSensor.device_class, self.basicSensorDeviceClass)
  28. def test_basic_sensor_state_class(self):
  29. self.assertEqual(self.basicSensor.state_class, self.basicSensorStateClass)
  30. def test_basic_sensor_value(self):
  31. dpval, val = self.basicSensorTestData
  32. self.dps[self.basicSensorDps] = dpval
  33. self.assertEqual(self.basicSensor.native_value, val)
  34. class MultiSensorTests:
  35. def setUpMultiSensors(self, sensors):
  36. self.multiSensor = {}
  37. self.multiSensorDps = {}
  38. self.multiSensorUnit = {}
  39. self.multiSensorDevClass = {}
  40. self.multiSensorStateClass = {}
  41. self.multiSensorTestData = {}
  42. for s in sensors:
  43. name = s.get("name")
  44. subject = self.entities.get(name)
  45. if subject is None:
  46. raise AttributeError(f"No sensor for {name} found.")
  47. self.multiSensor[name] = subject
  48. self.multiSensorDps[name] = s.get("dps")
  49. self.multiSensorUnit[name] = s.get("unit")
  50. self.multiSensorStateClass[name] = s.get("state_class")
  51. try:
  52. self.multiSensorDevClass[name] = SensorDeviceClass(
  53. s.get("device_class")
  54. )
  55. except ValueError:
  56. self.multiSensorDevClass[name] = None
  57. self.multiSensorTestData[name] = s.get("testdata", (30, 30))
  58. def test_multi_sensor_units(self):
  59. for key, subject in self.multiSensor.items():
  60. self.assertEqual(
  61. subject.native_unit_of_measurement,
  62. self.multiSensorUnit[key],
  63. f"{key} unit mismatch",
  64. )
  65. def test_multi_sensor_device_class(self):
  66. for key, subject in self.multiSensor.items():
  67. self.assertEqual(
  68. subject.device_class,
  69. self.multiSensorDevClass[key],
  70. f"{key} device_class mismatch",
  71. )
  72. def test_multi_sensor_state_class(self):
  73. for key, subject in self.multiSensor.items():
  74. self.assertEqual(
  75. subject.state_class,
  76. self.multiSensorStateClass[key],
  77. f"{key} state_class mismatch",
  78. )
  79. def test_multi_sensor_value(self):
  80. for key, subject in self.multiSensor.items():
  81. dpsval, val = self.multiSensorTestData[key]
  82. self.dps[self.multiSensorDps[key]] = dpsval
  83. self.assertEqual(
  84. subject.native_value,
  85. val,
  86. f"{key} value mapping not as expected",
  87. )
  88. def test_multi_sensor_extra_state_attributes(self):
  89. for key, subject in self.multiSensor.items():
  90. self.assertEqual(
  91. subject.extra_state_attributes,
  92. {},
  93. f"{key} extra_state_attributes mismatch",
  94. )