blob: 9fd71cf08d3079e27c2d570b04f5176c1519ea27 [file] [log] [blame]
Anderson Bravalheridfed5112019-02-08 01:44:14 +00001# -*- coding: utf-8 -*-
2# pylint: disable=E1101
3
4import unittest
5
Anderson Bravalheri06abc092019-05-30 15:55:55 +01006from ..utils import (
7 get_arg,
8 inject_args,
9 remove_extra_items,
10)
Anderson Bravalheridfed5112019-02-08 01:44:14 +000011
12
13class TestUtils(unittest.TestCase):
14 def test_inject_args_curries_arguments(self):
Anderson Bravalheri06abc092019-05-30 15:55:55 +010015 fn = inject_args(lambda a=None, b=None: a + b, a=3, b=5)
Anderson Bravalheridfed5112019-02-08 01:44:14 +000016 self.assertEqual(fn(), 8)
17
18 def test_inject_args_doesnt_add_arg_if_not_needed(self):
19 fn = inject_args(lambda: 7, a=1, b=2)
20 self.assertEqual(fn(), 7)
21 fn = inject_args(lambda a=None: a, b=2)
22 self.assertEqual(fn(1), 1)
23
24 def test_inject_args_knows_how_to_handle_arg_order(self):
25 fn = inject_args(lambda a=None, b=None: b - a, a=3)
26 self.assertEqual(fn(b=4), 1)
27 fn = inject_args(lambda b=None, a=None: b - a, a=3)
28 self.assertEqual(fn(b=4), 1)
29
30 def test_inject_args_works_as_decorator(self):
31 fn = inject_args(x=1)(lambda x=None: x)
32 self.assertEqual(fn(), 1)
33
34 def test_get_arg__positional(self):
35 def _fn(x, y, z):
36 return x + y + z
37
Anderson Bravalheri06abc092019-05-30 15:55:55 +010038 x = get_arg("x", _fn, (1, 3, 4), {})
Anderson Bravalheridfed5112019-02-08 01:44:14 +000039 self.assertEqual(x, 1)
Anderson Bravalheri06abc092019-05-30 15:55:55 +010040 y = get_arg("y", _fn, (1, 3, 4), {})
Anderson Bravalheridfed5112019-02-08 01:44:14 +000041 self.assertEqual(y, 3)
Anderson Bravalheri06abc092019-05-30 15:55:55 +010042 z = get_arg("z", _fn, (1, 3, 4), {})
Anderson Bravalheridfed5112019-02-08 01:44:14 +000043 self.assertEqual(z, 4)
44
45 def test_get_arg__keyword(self):
46 def _fn(x, y, z=5):
47 return x + y + z
48
Anderson Bravalheri06abc092019-05-30 15:55:55 +010049 z = get_arg("z", _fn, (1, 2), {"z": 3})
Anderson Bravalheridfed5112019-02-08 01:44:14 +000050 self.assertEqual(z, 3)
51
52
Anderson Bravalheri06abc092019-05-30 15:55:55 +010053
54 def test_remove_extra_items__keep_aditional_properties(self):
55 schema = {
56 "type": "object",
57 "properties": {
58 "a": {
59 "type": "object",
60 "properties": {
61 "type": "object",
62 "properties": {"b": "string"},
63 },
64 "additionalProperties": True,
65 }
66 },
67 }
68
69 example = {"a": {"b": 1, "c": 2}, "d": 3}
70 deleted = remove_extra_items(example, schema)
71 self.assertIn("d", deleted)
72 self.assertIs(example.get("d"), None)
73 self.assertEqual(example["a"]["c"], 2)
74
75
76if __name__ == "__main__":
Anderson Bravalheridfed5112019-02-08 01:44:14 +000077 unittest.main()