sensor.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  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. self.multiSensorOptions = {}
  43. for s in sensors:
  44. name = s.get("name")
  45. subject = self.entities.get(name)
  46. if subject is None:
  47. raise AttributeError(f"No sensor for {name} found.")
  48. self.multiSensor[name] = subject
  49. self.multiSensorDps[name] = s.get("dps")
  50. self.multiSensorUnit[name] = s.get("unit")
  51. self.multiSensorStateClass[name] = s.get("state_class")
  52. try:
  53. self.multiSensorDevClass[name] = SensorDeviceClass(
  54. s.get("device_class")
  55. )
  56. except ValueError:
  57. self.multiSensorDevClass[name] = None
  58. self.multiSensorTestData[name] = s.get("testdata", (30, 30))
  59. self.multiSensorOptions[name] = s.get("options")
  60. def test_multi_sensor_units(self):
  61. for key, subject in self.multiSensor.items():
  62. self.assertEqual(
  63. subject.native_unit_of_measurement,
  64. self.multiSensorUnit[key],
  65. f"{key} unit mismatch",
  66. )
  67. def test_multi_sensor_device_class(self):
  68. for key, subject in self.multiSensor.items():
  69. self.assertEqual(
  70. subject.device_class,
  71. self.multiSensorDevClass[key],
  72. f"{key} device_class mismatch",
  73. )
  74. def test_multi_sensor_state_class(self):
  75. for key, subject in self.multiSensor.items():
  76. self.assertEqual(
  77. subject.state_class,
  78. self.multiSensorStateClass[key],
  79. f"{key} state_class mismatch",
  80. )
  81. def test_multi_sensor_value(self):
  82. for key, subject in self.multiSensor.items():
  83. dpsval, val = self.multiSensorTestData[key]
  84. self.dps[self.multiSensorDps[key]] = dpsval
  85. self.assertEqual(
  86. subject.native_value,
  87. val,
  88. f"{key} value mapping not as expected",
  89. )
  90. def test_multi_sensor_extra_state_attributes(self):
  91. for key, subject in self.multiSensor.items():
  92. self.assertEqual(
  93. subject.extra_state_attributes,
  94. {},
  95. f"{key} extra_state_attributes mismatch",
  96. )
  97. def test_multi_sensor_options(self):
  98. for key, subject in self.multiSensor.items():
  99. if self.multiSensorOptions[key]:
  100. self.assertCountEqual(
  101. subject.options,
  102. self.multiSensorOptions[key],
  103. f"{key} options not as expected",
  104. )
  105. else:
  106. self.assertIsNone(subject.options)