select.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. # Mixins for testing select entities
  2. from ..helpers import assert_device_properties_set
  3. class BasicSelectTests:
  4. def setUpBasicSelect(self, dps, subject, options):
  5. self.basicSelect = subject
  6. self.basicSelectDps = dps
  7. self.basicSelectOptions = options
  8. def test_basicSelect_options(self):
  9. self.assertCountEqual(
  10. self.basicSelect.options,
  11. self.basicSelectOptions.values(),
  12. )
  13. def test_basicSelect_current_option(self):
  14. for dpsVal, val in self.basicSelectOptions.items():
  15. self.dps[self.basicSelectDps] = dpsVal
  16. self.assertEqual(self.basicSelect.current_option, val)
  17. async def test_basicSelect_select_option(self):
  18. for dpsVal, val in self.basicSelectOptions.items():
  19. async with assert_device_properties_set(
  20. self.basicSelect._device, {self.basicSelectDps: dpsVal}
  21. ):
  22. await self.basicSelect.async_select_option(val)
  23. def test_basicSelect_extra_state_attributes(self):
  24. self.assertEqual(self.basicSelect.extra_state_attributes, {})
  25. class MultiSelectTests:
  26. def setUpMultiSelect(self, selects):
  27. self.multiSelect = {}
  28. self.multiSelectDps = {}
  29. self.multiSelectOptions = {}
  30. for s in selects:
  31. name = s.get("name")
  32. subject = self.entities.get(name)
  33. if subject is None:
  34. raise AttributeError(f"No select for {name} found.")
  35. self.multiSelect[name] = subject
  36. self.multiSelectDps[name] = s.get("dps")
  37. self.multiSelectOptions[name] = s.get("options")
  38. def test_multiSelect_options(self):
  39. for key, subject in self.multiSelect.items():
  40. self.assertCountEqual(
  41. subject.options,
  42. self.multiSelectOptions[key].values(),
  43. f"{key} options mismatch",
  44. )
  45. def test_multiSelect_current_option(self):
  46. for key, subject in self.multiSelect.items():
  47. for dpsVal, val in self.multiSelectOptions[key].items():
  48. self.dps[self.multiSelectDps[key]] = dpsVal
  49. self.assertEqual(
  50. subject.current_option,
  51. val,
  52. f"{key} option mapping mismatch",
  53. )
  54. async def test_multiSelect_select_option(self):
  55. for key, subject in self.multiSelect.items():
  56. for dpsVal, val in self.multiSelectOptions[key].items():
  57. async with assert_device_properties_set(
  58. subject._device,
  59. {self.multiSelectDps[key]: dpsVal},
  60. f"{key} failed to select expected option",
  61. ):
  62. await subject.async_select_option(val)
  63. def test_multiSelect_extra_state_attributes(self):
  64. for key, subject in self.multiSelect.items():
  65. self.assertEqual(
  66. subject.extra_state_attributes,
  67. {},
  68. f"{key} extra_state_attributes mismatch",
  69. )