예제 #1
0
def test_unload_function():

    with SimpleRuleRunner():
        r = Rule()
        m = MagicMock()
        assert not m.called
        r.register_on_unload(m)
    assert m.called
예제 #2
0
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]
예제 #3
0
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]
예제 #4
0
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
예제 #5
0
def test_classcheck():
    with pytest.raises(ValueError):
        Rule.get_items(Item, tags='asdf')
예제 #6
0
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]
예제 #7
0
    def setUp(self):

        self.runner.set_up()
        self.rule = Rule()
예제 #8
0
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()