Rewrite pushbullet unittest tests to pytest style test function (#41266)

This commit is contained in:
Ariana Hlavaty 2020-10-06 13:34:39 +01:00 committed by GitHub
parent 06306f5dfe
commit 8adc5ee452
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,301 +1,273 @@
"""The tests for the pushbullet notification platform.""" """The tests for the pushbullet notification platform."""
import json import json
import unittest
from pushbullet import PushBullet from pushbullet import PushBullet
import requests_mock import pytest
import homeassistant.components.notify as notify 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.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): @pytest.fixture
"""Tests the Pushbullet Component.""" def mock_pushbullet():
"""Mock pushbullet."""
def setUp(self): with patch.object(
"""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(
PushBullet, PushBullet,
"_get_data", "_get_data",
return_value=json.loads(load_fixture("pushbullet_devices.json")), 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): data = {"title": "Test Title", "message": "Test Message"}
"""Test setup.""" await hass.services.async_call(notify.DOMAIN, "test", data)
config = { await hass.async_block_till_done()
notify.DOMAIN: { assert requests_mock.called
"name": "test", assert requests_mock.call_count == 1
"platform": "pushbullet",
"api_key": "MYFAKEKEY", 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) with assert_setup_component(1) as handle_config:
assert handle_config[notify.DOMAIN] assert await async_setup_component(hass, notify.DOMAIN, config)
await hass.async_block_till_done()
def test_pushbullet_config_bad(self): assert handle_config[notify.DOMAIN]
"""Test set up the platform with bad/missing configuration.""" requests_mock.register_uri(
config = {notify.DOMAIN: {"platform": "pushbullet"}} "POST",
with assert_setup_component(0) as handle_config: "https://api.pushbullet.com/v2/pushes",
assert setup_component(self.hass, notify.DOMAIN, config) status_code=200,
assert not handle_config[notify.DOMAIN] json={"mock_response": "Ok"},
@requests_mock.Mocker()
@patch.object(
PushBullet,
"_get_data",
return_value=json.loads(load_fixture("pushbullet_devices.json")),
) )
def test_pushbullet_push_default(self, mock, mock__get_data): data = {
"""Test pushbullet push to default target.""" "title": "Test Title",
config = { "message": "Test Message",
notify.DOMAIN: { "target": ["device/DESKTOP"],
"name": "test", }
"platform": "pushbullet", await hass.services.async_call(notify.DOMAIN, "test", data)
"api_key": "MYFAKEKEY", 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) with assert_setup_component(1) as handle_config:
assert handle_config[notify.DOMAIN] assert await async_setup_component(hass, notify.DOMAIN, config)
mock.register_uri( await hass.async_block_till_done()
requests_mock.POST, assert handle_config[notify.DOMAIN]
"https://api.pushbullet.com/v2/pushes", requests_mock.register_uri(
status_code=200, "POST",
json={"mock_response": "Ok"}, "https://api.pushbullet.com/v2/pushes",
) status_code=200,
data = {"title": "Test Title", "message": "Test Message"} json={"mock_response": "Ok"},
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")),
) )
def test_pushbullet_push_device(self, mock, mock__get_data): data = {
"""Test pushbullet push to default target.""" "title": "Test Title",
config = { "message": "Test Message",
notify.DOMAIN: { "target": ["device/DESKTOP", "device/My iPhone"],
"name": "test", }
"platform": "pushbullet", await hass.services.async_call(notify.DOMAIN, "test", data)
"api_key": "MYFAKEKEY", await hass.async_block_till_done()
} assert requests_mock.called
} assert requests_mock.call_count == 2
with assert_setup_component(1) as handle_config: assert len(requests_mock.request_history) == 2
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
expected_body = { expected_body = {
"body": "Test Message", "body": "Test Message",
"device_iden": "identity1", "device_iden": "identity1",
"title": "Test Title", "title": "Test Title",
"type": "note", "type": "note",
} }
assert mock.last_request.json() == expected_body 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( async def test_pushbullet_push_email(hass, requests_mock, mock_pushbullet):
PushBullet, """Test pushbullet push to default target."""
"_get_data", config = {
return_value=json.loads(load_fixture("pushbullet_devices.json")), 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): data = {
"""Test pushbullet push to default target.""" "title": "Test Title",
config = { "message": "Test Message",
notify.DOMAIN: { "target": ["email/user@host.net"],
"name": "test", }
"platform": "pushbullet", await hass.services.async_call(notify.DOMAIN, "test", data)
"api_key": "MYFAKEKEY", await hass.async_block_till_done()
} assert requests_mock.called
} assert requests_mock.call_count == 1
with assert_setup_component(1) as handle_config: assert len(requests_mock.request_history) == 1
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
expected_body = { expected_body = {
"body": "Test Message", "body": "Test Message",
"device_iden": "identity1", "email": "user@host.net",
"title": "Test Title", "title": "Test Title",
"type": "note", "type": "note",
} }
assert mock.request_history[0].json() == expected_body assert requests_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
@requests_mock.Mocker()
@patch.object( async def test_pushbullet_push_mixed(hass, requests_mock, mock_pushbullet):
PushBullet, """Test pushbullet push to default target."""
"_get_data", config = {
return_value=json.loads(load_fixture("pushbullet_devices.json")), 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): data = {
"""Test pushbullet push to default target.""" "title": "Test Title",
config = { "message": "Test Message",
notify.DOMAIN: { "target": ["device/DESKTOP", "email/user@host.net"],
"name": "test", }
"platform": "pushbullet", await hass.services.async_call(notify.DOMAIN, "test", data)
"api_key": "MYFAKEKEY", await hass.async_block_till_done()
} assert requests_mock.called
} assert requests_mock.call_count == 2
with assert_setup_component(1) as handle_config: assert len(requests_mock.request_history) == 2
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
expected_body = { expected_body = {
"body": "Test Message", "body": "Test Message",
"email": "user@host.net", "device_iden": "identity1",
"title": "Test Title", "title": "Test Title",
"type": "note", "type": "note",
} }
assert mock.request_history[0].json() == expected_body 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( async def test_pushbullet_push_no_file(hass, requests_mock, mock_pushbullet):
PushBullet, """Test pushbullet push to default target."""
"_get_data", config = {
return_value=json.loads(load_fixture("pushbullet_devices.json")), 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): data = {
"""Test pushbullet push to default target.""" "title": "Test Title",
config = { "message": "Test Message",
notify.DOMAIN: { "target": ["device/DESKTOP", "device/My iPhone"],
"name": "test", "data": {"file": "not_a_file"},
"platform": "pushbullet", }
"api_key": "MYFAKEKEY", assert not await hass.services.async_call(notify.DOMAIN, "test", data)
} await hass.async_block_till_done()
}
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()