def test_select(self): policy = DictPolicyNode() foo_node = DictPolicyNode() bar_node = LeafPolicyNode(Value(5)) foo_node['bar'] = bar_node policy["foo"] = foo_node partial = Partial(policy) # select existing partial path = ["foo", "bar"] scope = "/{}".format("/".join(path)) node, new_partial = partial.select(scope) self.assertEqual(partial.root, new_partial.root) self.assertEqual(LeafPolicyNode(Value(5)), node) self.assertEqual(path, new_partial.path) # select new partial path = ["foo", "baz"] scope = "/{}".format("/".join(path)) value, new_partial = partial.select(scope) self.assertNotEqual(partial.root, new_partial.root) self.assertEqual(UnknownPolicyNode(), value) self.assertEqual(path, new_partial.path) # make sure /foo/bar still exists in new_partial path = ["foo", "bar"] scope = "/{}".format("/".join(path)) value, new_new_partial = new_partial.select(scope) self.assertEqual(LeafPolicyNode(Value(5)), value)
def test_select_no_set_path(self): policy = DictPolicyNode() foo_node = DictPolicyNode() bar_node = LeafPolicyNode(Value(5)) foo_node["bar"] = bar_node policy["foo"] = foo_node item = Partial(policy) path = "/foo/bar" value, new_item = item.select(path, set_path=False) self.assertEqual(LeafPolicyNode(Value(5)), value) self.assertEqual([], new_item.path)
def test_regardingI(self): rule = policyI( regardingI("/foo", set_valueI(5)) ) _, item = rule.run(Partial()).getValue() value, _ = item.select("/foo") self.assertEqual(LeafPolicyNode(Value(5)), value) rule = policyI( regardingI("/fields/foo", set_valueI(5)) ) _, item = rule.run(Partial()).getValue() value, _ = item.select("/fields/foo") self.assertEqual(LeafPolicyNode(Value(5)), value)
def test_set_valueI(self): rule = policyI(set_valueI(5)) _, item = rule.run(Partial()).getValue() value, _ = item.select("") self.assertEqual(LeafPolicyNode(Value(5)), value)
def test_regardingM_multiple(self): rule = policyM( regardingM("/fields/foo", set_valueM("foo"), set_valueM("bar")) ) maybe = rule.run(Partial()) self.assertTrue(isinstance(maybe, Just)) _, partial = maybe.getValue() foo_node, _ = partial.select("/fields/foo") self.assertEqual(LeafPolicyNode(Value("bar")), foo_node)
def test_regarding(self): rule = policies( regarding("/fields/foo", set_value("foo")) ) ps = rule.run(Partial()) self.assertTrue(isinstance(ps, List)) results = ps.getValue() self.assertEqual(1, len(results)) _, partial = results[0] foo_node, _ = partial.select("/fields/foo") self.assertEqual(LeafPolicyNode(Value("foo")), foo_node)
def test_define_as(self): definition = Value(5) rule = policies( regarding( "/fields/foo", define_as(definition) ) ) ps = rule.run(Partial()) self.assertTrue(isinstance(ps, List)) results = ps.getValue() values = [r[1].select("/fields/foo")[0].value for r in results] self.assertEqual([5], values)