test_config_flow.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. from unittest.mock import patch
  2. import pytest
  3. from homeassistant.config_entries import SOURCE_USER
  4. from homeassistant.core import HomeAssistant
  5. from custom_components.room_cal_ha.const import (
  6. CONF_CALDAV_ENABLED,
  7. CONF_CALDAV_URL,
  8. CONF_CALENDAR_NAME,
  9. CONF_CURRENT_NAME,
  10. CONF_NEXT_NAME,
  11. CONF_ROOM_STATE_NAME,
  12. DEFAULT_CURRENT_NAME,
  13. DEFAULT_NEXT_NAME,
  14. DEFAULT_ROOM_STATE_NAME,
  15. DOMAIN,
  16. )
  17. async def test_user_step_shows_defaults(hass: HomeAssistant):
  18. result = await hass.config_entries.flow.async_init(
  19. DOMAIN, context={"source": SOURCE_USER}
  20. )
  21. assert result["type"] == "form"
  22. assert result["step_id"] == "user"
  23. schema = result["data_schema"].schema
  24. keys = {str(k): k for k in schema}
  25. assert keys[CONF_ROOM_STATE_NAME].default() == DEFAULT_ROOM_STATE_NAME
  26. assert keys[CONF_CURRENT_NAME].default() == DEFAULT_CURRENT_NAME
  27. assert keys[CONF_NEXT_NAME].default() == DEFAULT_NEXT_NAME
  28. async def test_user_step_creates_entry(hass: HomeAssistant):
  29. result = await hass.config_entries.flow.async_init(
  30. DOMAIN, context={"source": SOURCE_USER}
  31. )
  32. result = await hass.config_entries.flow.async_configure(
  33. result["flow_id"],
  34. user_input={
  35. CONF_ROOM_STATE_NAME: "My Room",
  36. CONF_CURRENT_NAME: "Staying Now",
  37. CONF_NEXT_NAME: "Coming Up",
  38. },
  39. )
  40. assert result["type"] == "create_entry"
  41. assert result["data"][CONF_ROOM_STATE_NAME] == "My Room"
  42. assert result["data"][CONF_CURRENT_NAME] == "Staying Now"
  43. assert result["data"][CONF_NEXT_NAME] == "Coming Up"
  44. async def test_options_flow_caldav_disabled(hass: HomeAssistant, mock_entry):
  45. mock_entry.add_to_hass(hass)
  46. result = await hass.config_entries.options.async_init(mock_entry.entry_id)
  47. assert result["type"] == "form"
  48. assert result["step_id"] == "caldav"
  49. result = await hass.config_entries.options.async_configure(
  50. result["flow_id"],
  51. user_input={CONF_CALDAV_ENABLED: False, CONF_CALDAV_URL: "", CONF_CALENDAR_NAME: ""},
  52. )
  53. assert result["type"] == "create_entry"
  54. assert result["data"][CONF_CALDAV_ENABLED] is False
  55. async def test_options_flow_caldav_enabled_tests_connection(hass: HomeAssistant, mock_entry):
  56. mock_entry.add_to_hass(hass)
  57. result = await hass.config_entries.options.async_init(mock_entry.entry_id)
  58. with patch(
  59. "custom_components.room_cal_ha.config_flow._test_caldav_auth",
  60. return_value=None,
  61. ):
  62. result = await hass.config_entries.options.async_configure(
  63. result["flow_id"],
  64. user_input={
  65. CONF_CALDAV_ENABLED: True,
  66. CONF_CALDAV_URL: "https://cal.example.com",
  67. CONF_CALENDAR_NAME: "Room",
  68. },
  69. )
  70. assert result["type"] == "create_entry"
  71. assert result["data"][CONF_CALDAV_ENABLED] is True
  72. async def test_options_flow_bad_credentials_shows_error(hass: HomeAssistant, mock_entry):
  73. import caldav.lib.error as caldav_error
  74. mock_entry.add_to_hass(hass)
  75. result = await hass.config_entries.options.async_init(mock_entry.entry_id)
  76. with patch(
  77. "custom_components.room_cal_ha.config_flow._test_caldav_auth",
  78. side_effect=caldav_error.AuthorizationError,
  79. ):
  80. result = await hass.config_entries.options.async_configure(
  81. result["flow_id"],
  82. user_input={
  83. CONF_CALDAV_ENABLED: True,
  84. CONF_CALDAV_URL: "https://cal.example.com",
  85. CONF_CALENDAR_NAME: "Room",
  86. },
  87. )
  88. assert result["type"] == "form"
  89. assert result["errors"]["base"] == "invalid_auth"