def test_unload_function(): with SimpleRuleRunner(): r = Rule() m = MagicMock() assert not m.called r.register_on_unload(m) assert m.called
def test_search_name(): item1 = BaseValueItem('item_1a') item2 = Item('item_2a') assert Rule.get_items() == [] Items.add_item(item1) Items.add_item(item2) assert Rule.get_items() == [item1, item2] assert Rule.get_items(name=r'\da') == [item1, item2]
def test_search_type(): item1 = BaseValueItem('item_1') item2 = Item('item_2') assert Rule.get_items() == [] Items.add_item(item1) Items.add_item(item2) assert Rule.get_items() == [item1, item2] assert Rule.get_items(type=BaseValueItem) == [item1, item2] assert Rule.get_items(type=(BaseValueItem, Item)) == [item1, item2] assert Rule.get_items(type=Item) == [item2]
def test_unload_function_exception(): with SimpleRuleRunner(): r = Rule() m = MagicMock() m_exception = MagicMock(side_effect=ValueError) assert not m.called assert not m_exception.called r.register_on_unload(lambda: 1 / 0) def asdf(): 1 / 0 r.register_on_unload(asdf) r.register_on_unload(m_exception) r.register_on_unload(m) assert m.called assert m.m_exception
def test_classcheck(): with pytest.raises(ValueError): Rule.get_items(Item, tags='asdf')
def test_search_oh(): item1 = OpenhabItem('oh_item_1', tags=frozenset(['tag1', 'tag2', 'tag3']), groups=frozenset(['grp1', 'grp2']), metadata={'meta1': MetaData('meta_v1')}) item2 = SwitchItem('oh_item_2', tags=frozenset(['tag1', 'tag2', 'tag4']), groups=frozenset(['grp2', 'grp3']), metadata={'meta2': MetaData('meta_v2', config={'a': 'b'})}) item3 = Item('item_2') assert Rule.get_items() == [] Items.add_item(item1) Items.add_item(item2) Items.add_item(item3) assert Rule.get_items() == [item1, item2, item3] assert Rule.get_items(tags='tag2') == [item1, item2] assert Rule.get_items(tags='tag4') == [item2] assert Rule.get_items(groups='grp1') == [item1] assert Rule.get_items(groups='grp2') == [item1, item2] assert Rule.get_items(groups='grp1', tags='tag1') == [item1] assert Rule.get_items(groups='grp2', tags='tag4') == [item2] assert Rule.get_items(metadata='meta1') == [item1] assert Rule.get_items(metadata='meta2') == [item2] assert Rule.get_items(metadata=r'meta\d') == [item1, item2] assert Rule.get_items(metadata_value='meta_v1') == [item1] assert Rule.get_items(metadata_value='meta_v2') == [item2] assert Rule.get_items(metadata_value=r'meta_v\d') == [item1, item2] assert Rule.get_items(groups='grp1', metadata_value=r'meta_v\d') == [item1]
def setUp(self): self.runner.set_up() self.rule = Rule()
class TestCases(unittest.TestCase): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.runner = SimpleRuleRunner() self.rule: Rule = None self.event_triggered = False def setUp(self): self.runner.set_up() self.rule = Rule() def tearDown(self): self.runner.tear_down() self.rule = None def run_no_change_event(self, event): assert isinstance(event, HABApp.core.events.ValueNoChangeEvent) self.assertEqual(event.seconds, 2) self.event_triggered = True def run_no_update_event(self, event): assert isinstance(event, HABApp.core.events.ValueNoUpdateEvent) self.assertEqual(event.seconds, 2) self.event_triggered = True def test_watcher_changes(self): self.event_triggered = False watcher, listener = self.rule.item_watch_and_listen('test_watch', 2, self.run_no_change_event) HABApp.core.Items.create_item('test_watch', HABApp.core.items.Item, 'asdf') now = datetime.now(tz=pytz.utc) for delta in [timedelta(seconds=-2), timedelta(), timedelta(seconds=1)]: self.rule.set_item_state('test_watch', 'asdf') self.event_triggered = False self.rule._process_events(now + delta) time.sleep(0.01) self.assertFalse(self.event_triggered) self.rule._process_events(now + timedelta(seconds=2)) time.sleep(0.01) self.assertTrue(self.event_triggered) now = datetime.now(tz=pytz.utc) for delta in [timedelta(seconds=2), timedelta(), timedelta(seconds=1)]: self.rule.set_item_state('test_watch', 'asdf') self.event_triggered = False self.rule._process_events(now + delta) time.sleep(0.01) self.assertFalse(self.event_triggered) watcher.cancel() def test_watcher_updates(self): self.event_triggered = False watcher, listener = self.rule.item_watch_and_listen( 'test_watch', 2, self.run_no_update_event, watch_only_changes=False ) HABApp.core.Items.create_item('test_watch', HABApp.core.items.Item, 'asdf') now = datetime.now(tz=pytz.utc) for delta in [timedelta(seconds=-2), timedelta(), timedelta(seconds=1)]: self.rule.set_item_state('test_watch', 'asdf') self.event_triggered = False self.rule._process_events(now + delta) time.sleep(0.01) self.assertFalse(self.event_triggered) self.rule._process_events(now + timedelta(seconds=2)) time.sleep(0.01) self.assertFalse(self.event_triggered) now = datetime.now(tz=pytz.utc) for delta in [timedelta(seconds=1), timedelta(), timedelta(seconds=1)]: self.rule.set_item_state('test_watch', 'asdf') self.event_triggered = False self.rule._process_events(now + delta) time.sleep(0.01) self.assertFalse(self.event_triggered) self.rule._process_events(now + timedelta(seconds=3)) time.sleep(0.01) self.assertTrue(self.event_triggered) watcher.cancel()