Rewrite logentries unittest tests to pytest style test functions (#41852)

* Rewrite logentries unittest tests to pytest style test functions.

Issue: https://github.com/home-assistant/core/issues/40862

* Import mock correctly

* Fix mock import

* Fix failure in formatting.

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
This commit is contained in:
thaohtp 2020-10-19 11:30:40 +02:00 committed by GitHub
parent 31c21126a8
commit 6f4be7882b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,82 +1,74 @@
"""The tests for the Logentries component.""" """The tests for the Logentries component."""
import unittest import pytest
from unittest import mock
import homeassistant.components.logentries as logentries import homeassistant.components.logentries as logentries
from homeassistant.const import EVENT_STATE_CHANGED, STATE_OFF, STATE_ON from homeassistant.const import EVENT_STATE_CHANGED, STATE_OFF, STATE_ON
from homeassistant.setup import setup_component from homeassistant.setup import async_setup_component
from tests.common import get_test_home_assistant from tests.async_mock import MagicMock, call, patch
class TestLogentries(unittest.TestCase): async def test_setup_config_full(hass):
"""Test the Logentries component.""" """Test setup with all data."""
config = {"logentries": {"token": "secret"}}
hass.bus.listen = MagicMock()
assert await async_setup_component(hass, logentries.DOMAIN, config)
assert hass.bus.listen.called
assert EVENT_STATE_CHANGED == hass.bus.listen.call_args_list[0][0][0]
def setUp(self): # pylint: disable=invalid-name
"""Set up things to be run when tests are started."""
self.hass = get_test_home_assistant()
self.addCleanup(self.tear_down_cleanup)
def tear_down_cleanup(self): async def test_setup_config_defaults(hass):
"""Stop everything that was started.""" """Test setup with defaults."""
self.hass.stop() config = {"logentries": {"token": "token"}}
hass.bus.listen = MagicMock()
assert await async_setup_component(hass, logentries.DOMAIN, config)
assert hass.bus.listen.called
assert EVENT_STATE_CHANGED == hass.bus.listen.call_args_list[0][0][0]
def test_setup_config_full(self):
"""Test setup with all data."""
config = {"logentries": {"token": "secret"}}
self.hass.bus.listen = mock.MagicMock()
assert setup_component(self.hass, logentries.DOMAIN, config)
assert self.hass.bus.listen.called
assert EVENT_STATE_CHANGED == self.hass.bus.listen.call_args_list[0][0][0]
def test_setup_config_defaults(self): @pytest.fixture
"""Test setup with defaults.""" def mock_dump():
config = {"logentries": {"token": "token"}} """Mock json dumps."""
self.hass.bus.listen = mock.MagicMock() with patch("json.dumps") as mock_dump:
assert setup_component(self.hass, logentries.DOMAIN, config) yield mock_dump
assert self.hass.bus.listen.called
assert EVENT_STATE_CHANGED == self.hass.bus.listen.call_args_list[0][0][0]
def _setup(self, mock_requests):
"""Test the setup."""
self.mock_post = mock_requests.post
self.mock_request_exception = Exception
mock_requests.exceptions.RequestException = self.mock_request_exception
config = {"logentries": {"token": "token"}}
self.hass.bus.listen = mock.MagicMock()
setup_component(self.hass, logentries.DOMAIN, config)
self.handler_method = self.hass.bus.listen.call_args_list[0][0][1]
@mock.patch.object(logentries, "requests") @pytest.fixture
@mock.patch("json.dumps") def mock_requests():
def test_event_listener(self, mock_dump, mock_requests): """Mock requests."""
"""Test event listener.""" with patch.object(logentries, "requests") as mock_requests:
mock_dump.side_effect = lambda x: x yield mock_requests
self._setup(mock_requests)
valid = {"1": 1, "1.0": 1.0, STATE_ON: 1, STATE_OFF: 0, "foo": "foo"}
for in_, out in valid.items(): async def test_event_listener(hass, mock_dump, mock_requests):
state = mock.MagicMock( """Test event listener."""
state=in_, domain="fake", object_id="entity", attributes={} mock_dump.side_effect = lambda x: x
) mock_post = mock_requests.post
event = mock.MagicMock(data={"new_state": state}, time_fired=12345) mock_requests.exceptions.RequestException = Exception
body = [ config = {"logentries": {"token": "token"}}
{ hass.bus.listen = MagicMock()
"domain": "fake", assert await async_setup_component(hass, logentries.DOMAIN, config)
"entity_id": "entity", handler_method = hass.bus.listen.call_args_list[0][0][1]
"attributes": {},
"time": "12345", valid = {"1": 1, "1.0": 1.0, STATE_ON: 1, STATE_OFF: 0, "foo": "foo"}
"value": out, for in_, out in valid.items():
} state = MagicMock(state=in_, domain="fake", object_id="entity", attributes={})
] event = MagicMock(data={"new_state": state}, time_fired=12345)
payload = { body = [
"host": "https://webhook.logentries.com/noformat/logs/token", {
"event": body, "domain": "fake",
"entity_id": "entity",
"attributes": {},
"time": "12345",
"value": out,
} }
self.handler_method(event) ]
assert self.mock_post.call_count == 1 payload = {
assert self.mock_post.call_args == mock.call( "host": "https://webhook.logentries.com/noformat/logs/token",
payload["host"], data=payload, timeout=10 "event": body,
) }
self.mock_post.reset_mock() handler_method(event)
assert mock_post.call_count == 1
assert mock_post.call_args == call(payload["host"], data=payload, timeout=10)
mock_post.reset_mock()