Rewrite pushbullet unittest tests to pytest style test function (#41266)
This commit is contained in:
parent
06306f5dfe
commit
8adc5ee452
1 changed files with 246 additions and 274 deletions
|
@ -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()
|
||||
|
|
Loading…
Add table
Reference in a new issue