diff --git a/tests/components/pushbullet/test_notify.py b/tests/components/pushbullet/test_notify.py index b0fb55e152d..12bfc686d17 100644 --- a/tests/components/pushbullet/test_notify.py +++ b/tests/components/pushbullet/test_notify.py @@ -1,301 +1,273 @@ """The tests for the pushbullet notification platform.""" import json -import unittest from pushbullet import PushBullet -import requests_mock +import pytest import homeassistant.components.notify as notify -from homeassistant.setup import setup_component +from homeassistant.setup import async_setup_component from tests.async_mock import patch -from tests.common import assert_setup_component, get_test_home_assistant, load_fixture +from tests.common import assert_setup_component, load_fixture -class TestPushBullet(unittest.TestCase): - """Tests the Pushbullet Component.""" - - def setUp(self): - """Initialize values for this test case class.""" - self.hass = get_test_home_assistant() - self.addCleanup(self.tear_down_cleanup) - - def tear_down_cleanup(self): - """Stop everything that we started.""" - self.hass.stop() - - @patch.object( +@pytest.fixture +def mock_pushbullet(): + """Mock pushbullet.""" + with patch.object( PushBullet, "_get_data", return_value=json.loads(load_fixture("pushbullet_devices.json")), + ): + yield + + +async def test_pushbullet_config(hass, mock_pushbullet): + """Test setup.""" + config = { + notify.DOMAIN: { + "name": "test", + "platform": "pushbullet", + "api_key": "MYFAKEKEY", + } + } + with assert_setup_component(1) as handle_config: + assert await async_setup_component(hass, notify.DOMAIN, config) + await hass.async_block_till_done() + assert handle_config[notify.DOMAIN] + + +async def test_pushbullet_config_bad(hass): + """Test set up the platform with bad/missing configuration.""" + config = {notify.DOMAIN: {"platform": "pushbullet"}} + with assert_setup_component(0) as handle_config: + assert await async_setup_component(hass, notify.DOMAIN, config) + await hass.async_block_till_done() + assert not handle_config[notify.DOMAIN] + + +async def test_pushbullet_push_default(hass, requests_mock, mock_pushbullet): + """Test pushbullet push to default target.""" + config = { + notify.DOMAIN: { + "name": "test", + "platform": "pushbullet", + "api_key": "MYFAKEKEY", + } + } + with assert_setup_component(1) as handle_config: + assert await async_setup_component(hass, notify.DOMAIN, config) + await hass.async_block_till_done() + assert handle_config[notify.DOMAIN] + requests_mock.register_uri( + "POST", + "https://api.pushbullet.com/v2/pushes", + status_code=200, + json={"mock_response": "Ok"}, ) - def test_pushbullet_config(self, mock__get_data): - """Test setup.""" - config = { - notify.DOMAIN: { - "name": "test", - "platform": "pushbullet", - "api_key": "MYFAKEKEY", - } + data = {"title": "Test Title", "message": "Test Message"} + await hass.services.async_call(notify.DOMAIN, "test", data) + await hass.async_block_till_done() + assert requests_mock.called + assert requests_mock.call_count == 1 + + expected_body = {"body": "Test Message", "title": "Test Title", "type": "note"} + assert requests_mock.last_request.json() == expected_body + + +async def test_pushbullet_push_device(hass, requests_mock, mock_pushbullet): + """Test pushbullet push to default target.""" + config = { + notify.DOMAIN: { + "name": "test", + "platform": "pushbullet", + "api_key": "MYFAKEKEY", } - with assert_setup_component(1) as handle_config: - assert setup_component(self.hass, notify.DOMAIN, config) - assert handle_config[notify.DOMAIN] - - def test_pushbullet_config_bad(self): - """Test set up the platform with bad/missing configuration.""" - config = {notify.DOMAIN: {"platform": "pushbullet"}} - with assert_setup_component(0) as handle_config: - assert setup_component(self.hass, notify.DOMAIN, config) - assert not handle_config[notify.DOMAIN] - - @requests_mock.Mocker() - @patch.object( - PushBullet, - "_get_data", - return_value=json.loads(load_fixture("pushbullet_devices.json")), + } + with assert_setup_component(1) as handle_config: + assert await async_setup_component(hass, notify.DOMAIN, config) + await hass.async_block_till_done() + assert handle_config[notify.DOMAIN] + requests_mock.register_uri( + "POST", + "https://api.pushbullet.com/v2/pushes", + status_code=200, + json={"mock_response": "Ok"}, ) - def test_pushbullet_push_default(self, mock, mock__get_data): - """Test pushbullet push to default target.""" - config = { - notify.DOMAIN: { - "name": "test", - "platform": "pushbullet", - "api_key": "MYFAKEKEY", - } + data = { + "title": "Test Title", + "message": "Test Message", + "target": ["device/DESKTOP"], + } + await hass.services.async_call(notify.DOMAIN, "test", data) + await hass.async_block_till_done() + assert requests_mock.called + assert requests_mock.call_count == 1 + + expected_body = { + "body": "Test Message", + "device_iden": "identity1", + "title": "Test Title", + "type": "note", + } + assert requests_mock.last_request.json() == expected_body + + +async def test_pushbullet_push_devices(hass, requests_mock, mock_pushbullet): + """Test pushbullet push to default target.""" + config = { + notify.DOMAIN: { + "name": "test", + "platform": "pushbullet", + "api_key": "MYFAKEKEY", } - with assert_setup_component(1) as handle_config: - assert setup_component(self.hass, notify.DOMAIN, config) - assert handle_config[notify.DOMAIN] - mock.register_uri( - requests_mock.POST, - "https://api.pushbullet.com/v2/pushes", - status_code=200, - json={"mock_response": "Ok"}, - ) - data = {"title": "Test Title", "message": "Test Message"} - self.hass.services.call(notify.DOMAIN, "test", data) - self.hass.block_till_done() - assert mock.called - assert mock.call_count == 1 - - expected_body = {"body": "Test Message", "title": "Test Title", "type": "note"} - assert mock.last_request.json() == expected_body - - @requests_mock.Mocker() - @patch.object( - PushBullet, - "_get_data", - return_value=json.loads(load_fixture("pushbullet_devices.json")), + } + with assert_setup_component(1) as handle_config: + assert await async_setup_component(hass, notify.DOMAIN, config) + await hass.async_block_till_done() + assert handle_config[notify.DOMAIN] + requests_mock.register_uri( + "POST", + "https://api.pushbullet.com/v2/pushes", + status_code=200, + json={"mock_response": "Ok"}, ) - def test_pushbullet_push_device(self, mock, mock__get_data): - """Test pushbullet push to default target.""" - config = { - notify.DOMAIN: { - "name": "test", - "platform": "pushbullet", - "api_key": "MYFAKEKEY", - } - } - with assert_setup_component(1) as handle_config: - assert setup_component(self.hass, notify.DOMAIN, config) - assert handle_config[notify.DOMAIN] - mock.register_uri( - requests_mock.POST, - "https://api.pushbullet.com/v2/pushes", - status_code=200, - json={"mock_response": "Ok"}, - ) - data = { - "title": "Test Title", - "message": "Test Message", - "target": ["device/DESKTOP"], - } - self.hass.services.call(notify.DOMAIN, "test", data) - self.hass.block_till_done() - assert mock.called - assert mock.call_count == 1 + data = { + "title": "Test Title", + "message": "Test Message", + "target": ["device/DESKTOP", "device/My iPhone"], + } + await hass.services.async_call(notify.DOMAIN, "test", data) + await hass.async_block_till_done() + assert requests_mock.called + assert requests_mock.call_count == 2 + assert len(requests_mock.request_history) == 2 - expected_body = { - "body": "Test Message", - "device_iden": "identity1", - "title": "Test Title", - "type": "note", - } - assert mock.last_request.json() == expected_body + expected_body = { + "body": "Test Message", + "device_iden": "identity1", + "title": "Test Title", + "type": "note", + } + assert requests_mock.request_history[0].json() == expected_body + expected_body = { + "body": "Test Message", + "device_iden": "identity2", + "title": "Test Title", + "type": "note", + } + assert requests_mock.request_history[1].json() == expected_body - @requests_mock.Mocker() - @patch.object( - PushBullet, - "_get_data", - return_value=json.loads(load_fixture("pushbullet_devices.json")), + +async def test_pushbullet_push_email(hass, requests_mock, mock_pushbullet): + """Test pushbullet push to default target.""" + config = { + notify.DOMAIN: { + "name": "test", + "platform": "pushbullet", + "api_key": "MYFAKEKEY", + } + } + with assert_setup_component(1) as handle_config: + assert await async_setup_component(hass, notify.DOMAIN, config) + await hass.async_block_till_done() + assert handle_config[notify.DOMAIN] + requests_mock.register_uri( + "POST", + "https://api.pushbullet.com/v2/pushes", + status_code=200, + json={"mock_response": "Ok"}, ) - def test_pushbullet_push_devices(self, mock, mock__get_data): - """Test pushbullet push to default target.""" - config = { - notify.DOMAIN: { - "name": "test", - "platform": "pushbullet", - "api_key": "MYFAKEKEY", - } - } - with assert_setup_component(1) as handle_config: - assert setup_component(self.hass, notify.DOMAIN, config) - assert handle_config[notify.DOMAIN] - mock.register_uri( - requests_mock.POST, - "https://api.pushbullet.com/v2/pushes", - status_code=200, - json={"mock_response": "Ok"}, - ) - data = { - "title": "Test Title", - "message": "Test Message", - "target": ["device/DESKTOP", "device/My iPhone"], - } - self.hass.services.call(notify.DOMAIN, "test", data) - self.hass.block_till_done() - assert mock.called - assert mock.call_count == 2 - assert len(mock.request_history) == 2 + data = { + "title": "Test Title", + "message": "Test Message", + "target": ["email/user@host.net"], + } + await hass.services.async_call(notify.DOMAIN, "test", data) + await hass.async_block_till_done() + assert requests_mock.called + assert requests_mock.call_count == 1 + assert len(requests_mock.request_history) == 1 - expected_body = { - "body": "Test Message", - "device_iden": "identity1", - "title": "Test Title", - "type": "note", - } - assert mock.request_history[0].json() == expected_body - expected_body = { - "body": "Test Message", - "device_iden": "identity2", - "title": "Test Title", - "type": "note", - } - assert mock.request_history[1].json() == expected_body + expected_body = { + "body": "Test Message", + "email": "user@host.net", + "title": "Test Title", + "type": "note", + } + assert requests_mock.request_history[0].json() == expected_body - @requests_mock.Mocker() - @patch.object( - PushBullet, - "_get_data", - return_value=json.loads(load_fixture("pushbullet_devices.json")), + +async def test_pushbullet_push_mixed(hass, requests_mock, mock_pushbullet): + """Test pushbullet push to default target.""" + config = { + notify.DOMAIN: { + "name": "test", + "platform": "pushbullet", + "api_key": "MYFAKEKEY", + } + } + with assert_setup_component(1) as handle_config: + assert await async_setup_component(hass, notify.DOMAIN, config) + await hass.async_block_till_done() + assert handle_config[notify.DOMAIN] + requests_mock.register_uri( + "POST", + "https://api.pushbullet.com/v2/pushes", + status_code=200, + json={"mock_response": "Ok"}, ) - def test_pushbullet_push_email(self, mock, mock__get_data): - """Test pushbullet push to default target.""" - config = { - notify.DOMAIN: { - "name": "test", - "platform": "pushbullet", - "api_key": "MYFAKEKEY", - } - } - with assert_setup_component(1) as handle_config: - assert setup_component(self.hass, notify.DOMAIN, config) - assert handle_config[notify.DOMAIN] - mock.register_uri( - requests_mock.POST, - "https://api.pushbullet.com/v2/pushes", - status_code=200, - json={"mock_response": "Ok"}, - ) - data = { - "title": "Test Title", - "message": "Test Message", - "target": ["email/user@host.net"], - } - self.hass.services.call(notify.DOMAIN, "test", data) - self.hass.block_till_done() - assert mock.called - assert mock.call_count == 1 - assert len(mock.request_history) == 1 + data = { + "title": "Test Title", + "message": "Test Message", + "target": ["device/DESKTOP", "email/user@host.net"], + } + await hass.services.async_call(notify.DOMAIN, "test", data) + await hass.async_block_till_done() + assert requests_mock.called + assert requests_mock.call_count == 2 + assert len(requests_mock.request_history) == 2 - expected_body = { - "body": "Test Message", - "email": "user@host.net", - "title": "Test Title", - "type": "note", - } - assert mock.request_history[0].json() == expected_body + expected_body = { + "body": "Test Message", + "device_iden": "identity1", + "title": "Test Title", + "type": "note", + } + assert requests_mock.request_history[0].json() == expected_body + expected_body = { + "body": "Test Message", + "email": "user@host.net", + "title": "Test Title", + "type": "note", + } + assert requests_mock.request_history[1].json() == expected_body - @requests_mock.Mocker() - @patch.object( - PushBullet, - "_get_data", - return_value=json.loads(load_fixture("pushbullet_devices.json")), + +async def test_pushbullet_push_no_file(hass, requests_mock, mock_pushbullet): + """Test pushbullet push to default target.""" + config = { + notify.DOMAIN: { + "name": "test", + "platform": "pushbullet", + "api_key": "MYFAKEKEY", + } + } + with assert_setup_component(1) as handle_config: + assert await async_setup_component(hass, notify.DOMAIN, config) + await hass.async_block_till_done() + assert handle_config[notify.DOMAIN] + requests_mock.register_uri( + "POST", + "https://api.pushbullet.com/v2/pushes", + status_code=200, + json={"mock_response": "Ok"}, ) - def test_pushbullet_push_mixed(self, mock, mock__get_data): - """Test pushbullet push to default target.""" - config = { - notify.DOMAIN: { - "name": "test", - "platform": "pushbullet", - "api_key": "MYFAKEKEY", - } - } - with assert_setup_component(1) as handle_config: - assert setup_component(self.hass, notify.DOMAIN, config) - assert handle_config[notify.DOMAIN] - mock.register_uri( - requests_mock.POST, - "https://api.pushbullet.com/v2/pushes", - status_code=200, - json={"mock_response": "Ok"}, - ) - data = { - "title": "Test Title", - "message": "Test Message", - "target": ["device/DESKTOP", "email/user@host.net"], - } - self.hass.services.call(notify.DOMAIN, "test", data) - self.hass.block_till_done() - assert mock.called - assert mock.call_count == 2 - assert len(mock.request_history) == 2 - - expected_body = { - "body": "Test Message", - "device_iden": "identity1", - "title": "Test Title", - "type": "note", - } - assert mock.request_history[0].json() == expected_body - expected_body = { - "body": "Test Message", - "email": "user@host.net", - "title": "Test Title", - "type": "note", - } - assert mock.request_history[1].json() == expected_body - - @requests_mock.Mocker() - @patch.object( - PushBullet, - "_get_data", - return_value=json.loads(load_fixture("pushbullet_devices.json")), - ) - def test_pushbullet_push_no_file(self, mock, mock__get_data): - """Test pushbullet push to default target.""" - config = { - notify.DOMAIN: { - "name": "test", - "platform": "pushbullet", - "api_key": "MYFAKEKEY", - } - } - with assert_setup_component(1) as handle_config: - assert setup_component(self.hass, notify.DOMAIN, config) - assert handle_config[notify.DOMAIN] - mock.register_uri( - requests_mock.POST, - "https://api.pushbullet.com/v2/pushes", - status_code=200, - json={"mock_response": "Ok"}, - ) - data = { - "title": "Test Title", - "message": "Test Message", - "target": ["device/DESKTOP", "device/My iPhone"], - "data": {"file": "not_a_file"}, - } - assert not self.hass.services.call(notify.DOMAIN, "test", data) - self.hass.block_till_done() + data = { + "title": "Test Title", + "message": "Test Message", + "target": ["device/DESKTOP", "device/My iPhone"], + "data": {"file": "not_a_file"}, + } + assert not await hass.services.async_call(notify.DOMAIN, "test", data) + await hass.async_block_till_done()