button.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. # Mixins for testing buttons
  2. from homeassistant.components.button import ButtonDeviceClass
  3. from ..helpers import assert_device_properties_set
  4. class BasicButtonTests:
  5. def setUpBasicButton(
  6. self,
  7. dps,
  8. subject,
  9. device_class=None,
  10. testdata=True,
  11. ):
  12. self.basicButton = subject
  13. self.basicButtonDps = dps
  14. try:
  15. self.basicButtonDevClass = ButtonDeviceClass(device_class)
  16. except ValueError:
  17. self.basicButtonDevClass = None
  18. self.basicButtonPushData = testdata
  19. async def test_basic_button_press(self):
  20. async with assert_device_properties_set(
  21. self.basicButton._device,
  22. {self.basicButtonDps: self.basicButtonPushData},
  23. ):
  24. await self.basicButton.async_press()
  25. def test_basic_button_device_class(self):
  26. self.assertEqual(self.basicButton.device_class, self.basicButtonDevClass)
  27. def test_basic_button_extra_attributes(self):
  28. self.assertEqual(self.basicButton.extra_state_attributes, {})
  29. class MultiButtonTests:
  30. def setUpMultiButtons(self, buttons):
  31. self.multiButton = {}
  32. self.multiButtonDps = {}
  33. self.multiButtonDevClass = {}
  34. self.multiButtonPushData = {}
  35. for b in buttons:
  36. name = b.get("name")
  37. subject = self.entities.get(name)
  38. if subject is None:
  39. raise AttributeError(f"No button for {name} found.")
  40. self.multiButton[name] = subject
  41. self.multiButtonDps[name] = b.get("dps")
  42. self.multiButtonPushData[name] = b.get("testdata", True)
  43. try:
  44. self.multiButtonDevClass[name] = ButtonDeviceClass(
  45. b.get("device_class", None)
  46. )
  47. except ValueError:
  48. self.multiButtonDevClass[name] = None
  49. async def test_multi_button_press(self):
  50. for key, subject in self.multiButton.items():
  51. dp = self.multiButtonDps[key]
  52. async with assert_device_properties_set(
  53. subject._device,
  54. {dp: self.multiButtonPushData[key]},
  55. ):
  56. await subject.async_press()
  57. def test_multi_button_device_class(self):
  58. for key, subject in self.multiButton.items():
  59. self.assertEqual(subject.device_class, self.multiButtonDevClass[key])
  60. def test_multi_button_extra_attributes(self):
  61. for subject in self.multiButton.values():
  62. self.assertEqual(subject.extra_state_attributes, {})