2020-03-23 22:56:05 +00:00
|
|
|
from unittest import TestCase
|
|
|
|
from unittest.mock import Mock
|
|
|
|
from owrx.property import PropertyLayer, PropertyFilter
|
|
|
|
|
|
|
|
|
|
|
|
class PropertyFilterTest(TestCase):
|
|
|
|
def testPassesProperty(self):
|
|
|
|
pm = PropertyLayer()
|
|
|
|
pm["testkey"] = "testvalue"
|
2021-02-23 23:09:57 +00:00
|
|
|
mock = Mock()
|
|
|
|
mock.apply.return_value = True
|
|
|
|
pf = PropertyFilter(pm, mock)
|
2020-03-23 22:56:05 +00:00
|
|
|
self.assertEqual(pf["testkey"], "testvalue")
|
|
|
|
|
2020-12-30 16:14:06 +00:00
|
|
|
def testMissesProperty(self):
|
2020-03-23 22:56:05 +00:00
|
|
|
pm = PropertyLayer()
|
|
|
|
pm["testkey"] = "testvalue"
|
2021-02-23 23:09:57 +00:00
|
|
|
mock = Mock()
|
|
|
|
mock.apply.return_value = False
|
|
|
|
pf = PropertyFilter(pm, mock)
|
2020-03-23 22:56:05 +00:00
|
|
|
self.assertFalse("testkey" in pf)
|
|
|
|
with self.assertRaises(KeyError):
|
|
|
|
x = pf["testkey"]
|
|
|
|
|
|
|
|
def testForwardsEvent(self):
|
|
|
|
pm = PropertyLayer()
|
2021-02-23 23:09:57 +00:00
|
|
|
mock = Mock()
|
|
|
|
mock.apply.return_value = True
|
|
|
|
pf = PropertyFilter(pm, mock)
|
2020-03-23 22:56:05 +00:00
|
|
|
mock = Mock()
|
|
|
|
pf.wire(mock.method)
|
|
|
|
pm["testkey"] = "testvalue"
|
2020-12-30 16:14:06 +00:00
|
|
|
mock.method.assert_called_once_with({"testkey": "testvalue"})
|
2020-03-23 22:56:05 +00:00
|
|
|
|
|
|
|
def testForwardsPropertyEvent(self):
|
|
|
|
pm = PropertyLayer()
|
2021-02-23 23:09:57 +00:00
|
|
|
mock = Mock()
|
|
|
|
mock.apply.return_value = True
|
|
|
|
pf = PropertyFilter(pm, mock)
|
2020-03-23 22:56:05 +00:00
|
|
|
mock = Mock()
|
|
|
|
pf.wireProperty("testkey", mock.method)
|
|
|
|
pm["testkey"] = "testvalue"
|
|
|
|
mock.method.assert_called_once_with("testvalue")
|
|
|
|
|
|
|
|
def testForwardsWrite(self):
|
|
|
|
pm = PropertyLayer()
|
2021-02-23 23:09:57 +00:00
|
|
|
mock = Mock()
|
|
|
|
mock.apply.return_value = True
|
|
|
|
pf = PropertyFilter(pm, mock)
|
2020-03-23 22:56:05 +00:00
|
|
|
pf["testkey"] = "testvalue"
|
|
|
|
self.assertTrue("testkey" in pm)
|
|
|
|
self.assertEqual(pm["testkey"], "testvalue")
|
|
|
|
|
|
|
|
def testOverwrite(self):
|
|
|
|
pm = PropertyLayer()
|
|
|
|
pm["testkey"] = "old value"
|
2021-02-23 23:09:57 +00:00
|
|
|
mock = Mock()
|
|
|
|
mock.apply.return_value = True
|
|
|
|
pf = PropertyFilter(pm, mock)
|
2020-03-23 22:56:05 +00:00
|
|
|
pf["testkey"] = "new value"
|
|
|
|
self.assertEqual(pm["testkey"], "new value")
|
|
|
|
self.assertEqual(pf["testkey"], "new value")
|
2021-01-24 19:15:02 +00:00
|
|
|
|
|
|
|
def testRejectsWrite(self):
|
|
|
|
pm = PropertyLayer()
|
|
|
|
pm["testkey"] = "old value"
|
2021-02-23 23:09:57 +00:00
|
|
|
mock = Mock()
|
|
|
|
mock.apply.return_value = False
|
|
|
|
pf = PropertyFilter(pm, mock)
|
2021-01-24 19:15:02 +00:00
|
|
|
with self.assertRaises(KeyError):
|
|
|
|
pf["testkey"] = "new value"
|
|
|
|
self.assertEqual(pm["testkey"], "old value")
|