"""The tests for the signal_messenger platform.""" import os import tempfile import unittest from unittest.mock import patch from pysignalclirestapi import SignalCliRestApi import requests_mock import homeassistant.components.signal_messenger.notify as signalmessenger from homeassistant.setup import async_setup_component BASE_COMPONENT = "notify" async def test_signal_messenger_init(hass): """Test that service loads successfully.""" config = { BASE_COMPONENT: { "name": "test", "platform": "signal_messenger", "url": "http://127.0.0.1:8080", "number": "+43443434343", "recipients": ["+435565656565"], } } with patch("pysignalclirestapi.SignalCliRestApi.send_message", return_value=None): assert await async_setup_component(hass, BASE_COMPONENT, config) await hass.async_block_till_done() # Test that service loads successfully assert hass.services.has_service(BASE_COMPONENT, "test") class TestSignalMesssenger(unittest.TestCase): """Test the signal_messenger notify.""" def setUp(self): """Set up things to be run when tests are started.""" recipients = ["+435565656565"] number = "+43443434343" client = SignalCliRestApi("http://127.0.0.1:8080", number) self._signalmessenger = signalmessenger.SignalNotificationService( recipients, client ) @requests_mock.Mocker() def test_send_message(self, mock): """Test send message.""" message = "Testing Signal Messenger platform :)" mock.register_uri( "POST", "http://127.0.0.1:8080/v2/send", status_code=201, ) mock.register_uri( "GET", "http://127.0.0.1:8080/v1/about", status_code=200, json={"versions": ["v1", "v2"]}, ) with self.assertLogs( "homeassistant.components.signal_messenger.notify", level="DEBUG" ) as context: self._signalmessenger.send_message(message) self.assertIn("Sending signal message", context.output[0]) self.assertTrue(mock.called) self.assertEqual(mock.call_count, 2) @requests_mock.Mocker() def test_send_message_should_show_deprecation_warning(self, mock): """Test send message.""" message = "Testing Signal Messenger platform with attachment :)" mock.register_uri( "POST", "http://127.0.0.1:8080/v2/send", status_code=201, ) mock.register_uri( "GET", "http://127.0.0.1:8080/v1/about", status_code=200, json={"versions": ["v1", "v2"]}, ) with self.assertLogs( "homeassistant.components.signal_messenger.notify", level="WARNING" ) as context, tempfile.NamedTemporaryFile( suffix=".png", prefix=os.path.basename(__file__) ) as tf: data = {"data": {"attachment": tf.name}} self._signalmessenger.send_message(message, **data) self.assertIn( "The 'attachment' option is deprecated, please replace it with 'attachments'. This option will become invalid in version 0.108", context.output[0], ) self.assertTrue(mock.called) self.assertEqual(mock.call_count, 2) @requests_mock.Mocker() def test_send_message_with_attachment(self, mock): """Test send message.""" message = "Testing Signal Messenger platform :)" mock.register_uri( "POST", "http://127.0.0.1:8080/v2/send", status_code=201, ) mock.register_uri( "GET", "http://127.0.0.1:8080/v1/about", status_code=200, json={"versions": ["v1", "v2"]}, ) with self.assertLogs( "homeassistant.components.signal_messenger.notify", level="DEBUG" ) as context, tempfile.NamedTemporaryFile( suffix=".png", prefix=os.path.basename(__file__) ) as tf: data = {"data": {"attachments": [tf.name]}} self._signalmessenger.send_message(message, **data) self.assertIn("Sending signal message", context.output[0]) self.assertTrue(mock.called) self.assertEqual(mock.call_count, 2)