Пример #1
0
    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)
Пример #2
0
    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)
Пример #3
0
    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)
Пример #4
0
    def test_set_valueI(self):
        rule = policyI(set_valueI(5))

        _, item = rule.run(Partial()).getValue()

        value, _ = item.select("")
        self.assertEqual(LeafPolicyNode(Value(5)), value)
Пример #5
0
    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)
Пример #6
0
    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)
Пример #7
0
    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)