diff --git a/homeassistant/components/github/__init__.py b/homeassistant/components/github/__init__.py index 53b8cd67871..bc2bab49bdb 100644 --- a/homeassistant/components/github/__init__.py +++ b/homeassistant/components/github/__init__.py @@ -38,7 +38,9 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: ) await coordinator.async_config_entry_first_refresh() - await coordinator.subscribe() + + if not entry.pref_disable_polling: + await coordinator.subscribe() hass.data[DOMAIN][repository] = coordinator diff --git a/tests/components/github/test_init.py b/tests/components/github/test_init.py index 8abb6ffda92..aba6c98db16 100644 --- a/tests/components/github/test_init.py +++ b/tests/components/github/test_init.py @@ -1,7 +1,7 @@ """Test the GitHub init file.""" from pytest import LogCaptureFixture -from homeassistant.components.github.const import CONF_REPOSITORIES +from homeassistant.components.github import CONF_REPOSITORIES from homeassistant.core import HomeAssistant from homeassistant.helpers import device_registry as dr @@ -44,3 +44,42 @@ async def test_device_registry_cleanup( ) assert len(devices) == 0 + + +async def test_subscription_setup( + hass: HomeAssistant, + mock_config_entry: MockConfigEntry, + aioclient_mock: AiohttpClientMocker, +) -> None: + """Test that we setup event subscription.""" + mock_config_entry.options = {CONF_REPOSITORIES: ["home-assistant/core"]} + mock_config_entry.pref_disable_polling = False + await setup_github_integration(hass, mock_config_entry, aioclient_mock) + assert ( + "https://api.github.com/repos/home-assistant/core/events" in x[1] + for x in aioclient_mock.mock_calls + ) + + +async def test_subscription_setup_polling_disabled( + hass: HomeAssistant, + mock_config_entry: MockConfigEntry, + aioclient_mock: AiohttpClientMocker, +) -> None: + """Test that we do not setup event subscription if polling is disabled.""" + mock_config_entry.options = {CONF_REPOSITORIES: ["home-assistant/core"]} + mock_config_entry.pref_disable_polling = True + await setup_github_integration(hass, mock_config_entry, aioclient_mock) + assert ( + "https://api.github.com/repos/home-assistant/core/events" not in x[1] + for x in aioclient_mock.mock_calls + ) + + # Prove that we subscribed if the user enabled polling again + mock_config_entry.pref_disable_polling = False + assert await hass.config_entries.async_reload(mock_config_entry.entry_id) + await hass.async_block_till_done() + assert ( + "https://api.github.com/repos/home-assistant/core/events" in x[1] + for x in aioclient_mock.mock_calls + )