binary_sensor.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. # Mixins for testing sensor entities
  2. from homeassistant.components.binary_sensor import BinarySensorDeviceClass
  3. class BasicBinarySensorTests:
  4. def setUpBasicBinarySensor(
  5. self,
  6. dps,
  7. subject,
  8. device_class=None,
  9. testdata=(True, False),
  10. ):
  11. self.basicBSensor = subject
  12. self.basicBSensorDps = dps
  13. try:
  14. self.basicBSensorDeviceClass = BinarySensorDeviceClass(device_class)
  15. except ValueError:
  16. self.basicBSensorDeviceClass = None
  17. self.basicBSensorTestData = testdata
  18. def test_basic_bsensor_device_class(self):
  19. self.assertEqual(self.basicBSensor.device_class, self.basicBSensorDeviceClass)
  20. def test_basic_bsensor_is_on(self):
  21. onval, offval = self.basicBSensorTestData
  22. self.dps[self.basicBSensorDps] = onval
  23. self.assertTrue(self.basicBSensor.is_on)
  24. self.dps[self.basicBSensorDps] = offval
  25. self.assertFalse(self.basicBSensor.is_on)
  26. def test_basic_bsensor_extra_state_attributes(self):
  27. self.assertEqual(self.basicBSensor.extra_state_attributes, {})
  28. class MultiBinarySensorTests:
  29. def setUpMultiBinarySensors(self, sensors):
  30. self.multiBSensor = {}
  31. self.multiBSensorDps = {}
  32. self.multiBSensorDevClass = {}
  33. self.multiBSensorTestData = {}
  34. for s in sensors:
  35. name = s.get("name")
  36. subject = self.entities.get(name)
  37. if subject is None:
  38. raise AttributeError(f"No binary sensor for {name} found.")
  39. self.multiBSensor[name] = subject
  40. self.multiBSensorDps[name] = s.get("dps")
  41. try:
  42. self.multiBSensorDevClass[name] = BinarySensorDeviceClass(
  43. s.get("device_class")
  44. )
  45. except ValueError:
  46. self.multiBSensorDevClass[name] = None
  47. self.multiBSensorTestData[name] = s.get("testdata", (True, False))
  48. def test_multi_bsensor_device_class(self):
  49. for key, subject in self.multiBSensor.items():
  50. self.assertEqual(
  51. subject.device_class,
  52. self.multiBSensorDevClass[key],
  53. f"device_class mismatch in {key}",
  54. )
  55. def test_multi_bsensor_is_on(self):
  56. for key, subject in self.multiBSensor.items():
  57. dps = self.multiBSensorDps[key]
  58. onval, offval = self.multiBSensorTestData[key]
  59. self.dps[dps] = onval
  60. self.assertTrue(subject.is_on, f"{key} fails in ON state")
  61. self.dps[dps] = offval
  62. self.assertFalse(subject.is_on, f"{key} fails in OFF state")
  63. def test_multi_bsensor_extra_state_attributes(self):
  64. for key, subject in self.multiBSensor.items():
  65. self.assertEqual(
  66. subject.extra_state_attributes,
  67. {},
  68. f"extra_state_attributes mismatch in {key}",
  69. )