11import unittest
22
3- from cloudinary_cli .utils .utils import parse_option_value , whitelist_keys , merge_responses , normalize_list_params
3+ from cloudinary_cli .utils .utils import parse_option_value , parse_args_kwargs , whitelist_keys , merge_responses , \
4+ normalize_list_params
45
56
67class UtilsTest (unittest .TestCase ):
@@ -19,6 +20,32 @@ def test_parse_option_value_converts_int_to_str(self):
1920 """ should convert a parsed int to a str """
2021 self .assertEqual ("1" , parse_option_value (1 ))
2122
23+ def test_parse_args_kwargs (self ):
24+ args , kwargs = parse_args_kwargs (_no_args_test_func , [])
25+ self .assertEqual (0 , len (args ))
26+ self .assertEqual (0 , len (kwargs ))
27+
28+ args , kwargs = parse_args_kwargs (_only_args_test_func , ["a1" , "a2" ])
29+ self .assertListEqual (["a1" , "a2" ], args )
30+ self .assertEqual (0 , len (kwargs ))
31+
32+ with self .assertRaisesRegex (Exception , "requires 2 arguments" ):
33+ parse_args_kwargs (_only_args_test_func , ["a1" ])
34+
35+ args , kwargs = parse_args_kwargs (_args_kwargs_test_func , ["a1" , 'arg2=a2' ])
36+ self .assertListEqual (["a1" ], args )
37+ self .assertDictEqual ({"arg2" : "a2" }, kwargs )
38+
39+ # should parse values
40+ args , kwargs = parse_args_kwargs (_args_kwargs_test_func , ['["a1"]' , 'arg2={"k2":"a2"}' ])
41+ self .assertListEqual ([["a1" ]], args )
42+ self .assertDictEqual ({"arg2" : {"k2" : "a2" }}, kwargs )
43+
44+ # should allow passing optional args as positional
45+ args , kwargs = parse_args_kwargs (_args_kwargs_test_func , ["a1" , "a2" ])
46+ self .assertListEqual (["a1" , "a2" ], args )
47+ self .assertEqual (0 , len (kwargs ))
48+
2249 def test_whitelist_keys (self ):
2350 """ should whitelist keys correctly """
2451 self .assertEqual ([{"k1" : "v1" }], whitelist_keys ([{"k1" : "v1" , "k2" : "v2" }], ["k1" ]))
@@ -61,3 +88,15 @@ def test_merge_responses(self):
6188 def test_normalize_list_params (self ):
6289 """ should normalize a list of parameters """
6390 self .assertEqual (["f1" , "f2" , "f3" ], normalize_list_params (["f1,f2" , "f3" ]))
91+
92+
93+ def _no_args_test_func ():
94+ pass
95+
96+
97+ def _only_args_test_func (arg1 , arg2 ):
98+ return arg1 , arg2
99+
100+
101+ def _args_kwargs_test_func (arg1 , arg2 = None ):
102+ return arg1 , arg2
0 commit comments