diff --git a/homeassistant/components/smtp/__init__.py b/homeassistant/components/smtp/__init__.py index 5e7fb41c2127a..7461dd2b6c370 100644 --- a/homeassistant/components/smtp/__init__.py +++ b/homeassistant/components/smtp/__init__.py @@ -1 +1,4 @@ """The smtp component.""" + +DOMAIN = "smtp" +PLATFORMS = ["notify"] diff --git a/homeassistant/components/smtp/notify.py b/homeassistant/components/smtp/notify.py index 296a419c5d0f7..f7d3415525dad 100644 --- a/homeassistant/components/smtp/notify.py +++ b/homeassistant/components/smtp/notify.py @@ -26,8 +26,11 @@ CONF_USERNAME, ) import homeassistant.helpers.config_validation as cv +from homeassistant.helpers.reload import setup_reload_service import homeassistant.util.dt as dt_util +from . import DOMAIN, PLATFORMS + _LOGGER = logging.getLogger(__name__) ATTR_IMAGES = "images" # optional embedded image file attachments @@ -67,6 +70,7 @@ def get_service(hass, config, discovery_info=None): """Get the mail notification service.""" + setup_reload_service(hass, DOMAIN, PLATFORMS) mail_service = MailNotificationService( config.get(CONF_SERVER), config.get(CONF_PORT), diff --git a/homeassistant/components/smtp/services.yaml b/homeassistant/components/smtp/services.yaml new file mode 100644 index 0000000000000..77ff7d22adfe5 --- /dev/null +++ b/homeassistant/components/smtp/services.yaml @@ -0,0 +1,2 @@ +reload: + description: Reload smtp notify services. diff --git a/tests/components/smtp/test_notify.py b/tests/components/smtp/test_notify.py index d99ee82d4ef70..6320614c059d7 100644 --- a/tests/components/smtp/test_notify.py +++ b/tests/components/smtp/test_notify.py @@ -1,8 +1,14 @@ """The tests for the notify smtp platform.""" +from os import path import re import unittest +from homeassistant import config as hass_config +import homeassistant.components.notify as notify +from homeassistant.components.smtp import DOMAIN from homeassistant.components.smtp.notify import MailNotificationService +from homeassistant.const import SERVICE_RELOAD +from homeassistant.setup import async_setup_component from tests.async_mock import patch from tests.common import get_test_home_assistant @@ -85,3 +91,51 @@ def test_html_email(self, mock_make_msgid): "Test msg", data={"html": html, "images": ["test.jpg"]} ) assert "Content-Type: multipart/related" in msg + + +async def test_reload_notify(hass): + """Verify we can reload the notify service.""" + + with patch( + "homeassistant.components.smtp.notify.MailNotificationService.connection_is_valid" + ): + assert await async_setup_component( + hass, + notify.DOMAIN, + { + notify.DOMAIN: [ + { + "name": DOMAIN, + "platform": DOMAIN, + "recipient": "test@example.com", + "sender": "test@example.com", + }, + ] + }, + ) + await hass.async_block_till_done() + + assert hass.services.has_service(notify.DOMAIN, DOMAIN) + + yaml_path = path.join( + _get_fixtures_base_path(), + "fixtures", + "smtp/configuration.yaml", + ) + with patch.object(hass_config, "YAML_CONFIG_FILE", yaml_path), patch( + "homeassistant.components.smtp.notify.MailNotificationService.connection_is_valid" + ): + await hass.services.async_call( + DOMAIN, + SERVICE_RELOAD, + {}, + blocking=True, + ) + await hass.async_block_till_done() + + assert not hass.services.has_service(notify.DOMAIN, DOMAIN) + assert hass.services.has_service(notify.DOMAIN, "smtp_reloaded") + + +def _get_fixtures_base_path(): + return path.dirname(path.dirname(path.dirname(__file__))) diff --git a/tests/fixtures/smtp/configuration.yaml b/tests/fixtures/smtp/configuration.yaml new file mode 100644 index 0000000000000..03bed6869090e --- /dev/null +++ b/tests/fixtures/smtp/configuration.yaml @@ -0,0 +1,5 @@ +notify: + - name: smtp_reloaded + platform: smtp + sender: test@example.com + recipient: test@example.com