Convert logbook tests to pytest (#42289)

This commit is contained in:
taiyeoguns 2020-10-26 08:18:02 +00:00 committed by GitHub
parent 0cf9a1621a
commit 8f74a0c2e6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -3,7 +3,6 @@
import collections import collections
from datetime import datetime, timedelta from datetime import datetime, timedelta
import json import json
import unittest
import pytest import pytest
import voluptuous as vol import voluptuous as vol
@ -41,21 +40,21 @@ from tests.async_mock import Mock, patch
from tests.common import get_test_home_assistant, init_recorder_component, mock_platform from tests.common import get_test_home_assistant, init_recorder_component, mock_platform
from tests.components.recorder.common import trigger_db_commit from tests.components.recorder.common import trigger_db_commit
class TestComponentLogbook(unittest.TestCase):
"""Test the History component."""
EMPTY_CONFIG = logbook.CONFIG_SCHEMA({logbook.DOMAIN: {}}) EMPTY_CONFIG = logbook.CONFIG_SCHEMA({logbook.DOMAIN: {}})
def setUp(self):
"""Set up things to be run when tests are started."""
self.hass = get_test_home_assistant()
init_recorder_component(self.hass) # Force an in memory DB
with patch("homeassistant.components.http.start_http_server_and_save_config"):
assert setup_component(self.hass, logbook.DOMAIN, self.EMPTY_CONFIG)
self.addCleanup(self.hass.stop)
def test_service_call_create_logbook_entry(self): @pytest.fixture
def hass_():
"""Set up things to be run when tests are started."""
hass = get_test_home_assistant()
init_recorder_component(hass) # Force an in memory DB
with patch("homeassistant.components.http.start_http_server_and_save_config"):
assert setup_component(hass, logbook.DOMAIN, EMPTY_CONFIG)
yield hass
hass.stop()
def test_service_call_create_logbook_entry(hass_):
"""Test if service call create log book entry.""" """Test if service call create log book entry."""
calls = [] calls = []
@ -64,8 +63,8 @@ class TestComponentLogbook(unittest.TestCase):
"""Append on event.""" """Append on event."""
calls.append(event) calls.append(event)
self.hass.bus.listen(logbook.EVENT_LOGBOOK_ENTRY, event_listener) hass_.bus.listen(logbook.EVENT_LOGBOOK_ENTRY, event_listener)
self.hass.services.call( hass_.services.call(
logbook.DOMAIN, logbook.DOMAIN,
"log", "log",
{ {
@ -76,7 +75,7 @@ class TestComponentLogbook(unittest.TestCase):
}, },
True, True,
) )
self.hass.services.call( hass_.services.call(
logbook.DOMAIN, logbook.DOMAIN,
"log", "log",
{ {
@ -88,13 +87,13 @@ class TestComponentLogbook(unittest.TestCase):
# Logbook entry service call results in firing an event. # Logbook entry service call results in firing an event.
# Our service call will unblock when the event listeners have been # Our service call will unblock when the event listeners have been
# scheduled. This means that they may not have been processed yet. # scheduled. This means that they may not have been processed yet.
trigger_db_commit(self.hass) trigger_db_commit(hass_)
self.hass.block_till_done() hass_.block_till_done()
self.hass.data[recorder.DATA_INSTANCE].block_till_done() hass_.data[recorder.DATA_INSTANCE].block_till_done()
events = list( events = list(
logbook._get_events( logbook._get_events(
self.hass, hass_,
dt_util.utcnow() - timedelta(hours=1), dt_util.utcnow() - timedelta(hours=1),
dt_util.utcnow() + timedelta(hours=1), dt_util.utcnow() + timedelta(hours=1),
) )
@ -115,7 +114,8 @@ class TestComponentLogbook(unittest.TestCase):
assert last_call.data.get(logbook.ATTR_MESSAGE) == "has no domain or entity_id" assert last_call.data.get(logbook.ATTR_MESSAGE) == "has no domain or entity_id"
assert last_call.data.get(logbook.ATTR_DOMAIN) == "logbook" assert last_call.data.get(logbook.ATTR_DOMAIN) == "logbook"
def test_service_call_create_log_book_entry_no_message(self):
def test_service_call_create_log_book_entry_no_message(hass_):
"""Test if service call create log book entry without message.""" """Test if service call create log book entry without message."""
calls = [] calls = []
@ -124,49 +124,51 @@ class TestComponentLogbook(unittest.TestCase):
"""Append on event.""" """Append on event."""
calls.append(event) calls.append(event)
self.hass.bus.listen(logbook.EVENT_LOGBOOK_ENTRY, event_listener) hass_.bus.listen(logbook.EVENT_LOGBOOK_ENTRY, event_listener)
with pytest.raises(vol.Invalid): with pytest.raises(vol.Invalid):
self.hass.services.call(logbook.DOMAIN, "log", {}, True) hass_.services.call(logbook.DOMAIN, "log", {}, True)
# Logbook entry service call results in firing an event. # Logbook entry service call results in firing an event.
# Our service call will unblock when the event listeners have been # Our service call will unblock when the event listeners have been
# scheduled. This means that they may not have been processed yet. # scheduled. This means that they may not have been processed yet.
self.hass.block_till_done() hass_.block_till_done()
assert len(calls) == 0 assert len(calls) == 0
def test_humanify_filter_sensor(self):
def test_humanify_filter_sensor(hass_):
"""Test humanify filter too frequent sensor values.""" """Test humanify filter too frequent sensor values."""
entity_id = "sensor.bla" entity_id = "sensor.bla"
pointA = dt_util.utcnow().replace(minute=2) pointA = dt_util.utcnow().replace(minute=2)
pointB = pointA.replace(minute=5) pointB = pointA.replace(minute=5)
pointC = pointA + timedelta(minutes=logbook.GROUP_BY_MINUTES) pointC = pointA + timedelta(minutes=logbook.GROUP_BY_MINUTES)
entity_attr_cache = logbook.EntityAttributeCache(self.hass) entity_attr_cache = logbook.EntityAttributeCache(hass_)
eventA = self.create_state_changed_event(pointA, entity_id, 10) eventA = create_state_changed_event(pointA, entity_id, 10)
eventB = self.create_state_changed_event(pointB, entity_id, 20) eventB = create_state_changed_event(pointB, entity_id, 20)
eventC = self.create_state_changed_event(pointC, entity_id, 30) eventC = create_state_changed_event(pointC, entity_id, 30)
entries = list( entries = list(
logbook.humanify(self.hass, (eventA, eventB, eventC), entity_attr_cache, {}) logbook.humanify(hass_, (eventA, eventB, eventC), entity_attr_cache, {})
) )
assert len(entries) == 2 assert len(entries) == 2
self.assert_entry(entries[0], pointB, "bla", entity_id=entity_id) assert_entry(entries[0], pointB, "bla", entity_id=entity_id)
self.assert_entry(entries[1], pointC, "bla", entity_id=entity_id) assert_entry(entries[1], pointC, "bla", entity_id=entity_id)
def test_home_assistant_start_stop_grouped(self):
def test_home_assistant_start_stop_grouped(hass_):
"""Test if HA start and stop events are grouped. """Test if HA start and stop events are grouped.
Events that are occurring in the same minute. Events that are occurring in the same minute.
""" """
entity_attr_cache = logbook.EntityAttributeCache(self.hass) entity_attr_cache = logbook.EntityAttributeCache(hass_)
entries = list( entries = list(
logbook.humanify( logbook.humanify(
self.hass, hass_,
( (
MockLazyEventPartialState(EVENT_HOMEASSISTANT_STOP), MockLazyEventPartialState(EVENT_HOMEASSISTANT_STOP),
MockLazyEventPartialState(EVENT_HOMEASSISTANT_START), MockLazyEventPartialState(EVENT_HOMEASSISTANT_START),
@ -177,22 +179,23 @@ class TestComponentLogbook(unittest.TestCase):
) )
assert len(entries) == 1 assert len(entries) == 1
self.assert_entry( assert_entry(
entries[0], name="Home Assistant", message="restarted", domain=ha.DOMAIN entries[0], name="Home Assistant", message="restarted", domain=ha.DOMAIN
) )
def test_home_assistant_start(self):
def test_home_assistant_start(hass_):
"""Test if HA start is not filtered or converted into a restart.""" """Test if HA start is not filtered or converted into a restart."""
entity_id = "switch.bla" entity_id = "switch.bla"
pointA = dt_util.utcnow() pointA = dt_util.utcnow()
entity_attr_cache = logbook.EntityAttributeCache(self.hass) entity_attr_cache = logbook.EntityAttributeCache(hass_)
entries = list( entries = list(
logbook.humanify( logbook.humanify(
self.hass, hass_,
( (
MockLazyEventPartialState(EVENT_HOMEASSISTANT_START), MockLazyEventPartialState(EVENT_HOMEASSISTANT_START),
self.create_state_changed_event(pointA, entity_id, 10), create_state_changed_event(pointA, entity_id, 10),
), ),
entity_attr_cache, entity_attr_cache,
{}, {},
@ -200,21 +203,20 @@ class TestComponentLogbook(unittest.TestCase):
) )
assert len(entries) == 2 assert len(entries) == 2
self.assert_entry( assert_entry(entries[0], name="Home Assistant", message="started", domain=ha.DOMAIN)
entries[0], name="Home Assistant", message="started", domain=ha.DOMAIN assert_entry(entries[1], pointA, "bla", entity_id=entity_id)
)
self.assert_entry(entries[1], pointA, "bla", entity_id=entity_id)
def test_process_custom_logbook_entries(self):
def test_process_custom_logbook_entries(hass_):
"""Test if custom log book entries get added as an entry.""" """Test if custom log book entries get added as an entry."""
name = "Nice name" name = "Nice name"
message = "has a custom entry" message = "has a custom entry"
entity_id = "sun.sun" entity_id = "sun.sun"
entity_attr_cache = logbook.EntityAttributeCache(self.hass) entity_attr_cache = logbook.EntityAttributeCache(hass_)
entries = list( entries = list(
logbook.humanify( logbook.humanify(
self.hass, hass_,
( (
MockLazyEventPartialState( MockLazyEventPartialState(
logbook.EVENT_LOGBOOK_ENTRY, logbook.EVENT_LOGBOOK_ENTRY,
@ -231,17 +233,18 @@ class TestComponentLogbook(unittest.TestCase):
) )
assert len(entries) == 1 assert len(entries) == 1
self.assert_entry(entries[0], name=name, message=message, entity_id=entity_id) assert_entry(entries[0], name=name, message=message, entity_id=entity_id)
# pylint: disable=no-self-use # pylint: disable=no-self-use
def assert_entry( def assert_entry(
self, entry, when=None, name=None, message=None, domain=None, entity_id=None entry, when=None, name=None, message=None, domain=None, entity_id=None
): ):
"""Assert an entry is what is expected.""" """Assert an entry is what is expected."""
return _assert_entry(entry, when, name, message, domain, entity_id) return _assert_entry(entry, when, name, message, domain, entity_id)
def create_state_changed_event( def create_state_changed_event(
self,
event_time_fired, event_time_fired,
entity_id, entity_id,
state, state,
@ -257,13 +260,14 @@ class TestComponentLogbook(unittest.TestCase):
entity_id, state, attributes, last_changed, last_updated entity_id, state, attributes, last_changed, last_updated
).as_dict() ).as_dict()
return self.create_state_changed_event_from_old_new( return create_state_changed_event_from_old_new(
entity_id, event_time_fired, old_state, new_state entity_id, event_time_fired, old_state, new_state
) )
# pylint: disable=no-self-use # pylint: disable=no-self-use
def create_state_changed_event_from_old_new( def create_state_changed_event_from_old_new(
self, entity_id, event_time_fired, old_state, new_state entity_id, event_time_fired, old_state, new_state
): ):
"""Create a state changed event from a old and new state.""" """Create a state changed event from a old and new state."""
attributes = {} attributes = {}