changeset 3165:e1baadec6217 beta

fixes issue #702 API methods without arguments fail when "args":null
author Marcin Kuzminski <marcin@python-works.com>
date Wed, 16 Jan 2013 00:20:45 +0100
parents 01cb7df198ae
children abd49f6f5805
files rhodecode/controllers/api/__init__.py rhodecode/tests/api/api_base.py
diffstat 2 files changed, 32 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/controllers/api/__init__.py	Tue Jan 15 11:39:31 2013 +0800
+++ b/rhodecode/controllers/api/__init__.py	Wed Jan 16 00:20:45 2013 +0100
@@ -132,6 +132,9 @@
             self._req_id = json_body['id']
             self._req_method = json_body['method']
             self._request_params = json_body['args']
+            if not isinstance(self._request_params, dict):
+                self._request_params = {}
+
             log.debug(
                 'method: %s, params: %s' % (self._req_method,
                                             self._request_params)
@@ -212,6 +215,7 @@
                 )
 
         self._rpc_args = {USER_SESSION_ATTR: u}
+
         self._rpc_args.update(self._request_params)
 
         self._rpc_args['action'] = self._req_method
--- a/rhodecode/tests/api/api_base.py	Tue Jan 15 11:39:31 2013 +0800
+++ b/rhodecode/tests/api/api_base.py	Wed Jan 16 00:20:45 2013 +0100
@@ -155,6 +155,34 @@
         expected = 'Missing non optional `repoid` arg in JSON DATA'
         self._compare_error(id_, expected, given=response.body)
 
+    def test_api_missing_non_optional_param_args_null(self):
+        id_, params = _build_data(self.apikey, 'get_repo')
+        params = params.replace('"args": {}', '"args": null')
+        response = api_call(self, params)
+
+        expected = 'Missing non optional `repoid` arg in JSON DATA'
+        self._compare_error(id_, expected, given=response.body)
+
+    def test_api_missing_non_optional_param_args_bad(self):
+        id_, params = _build_data(self.apikey, 'get_repo')
+        params = params.replace('"args": {}', '"args": 1')
+        response = api_call(self, params)
+
+        expected = 'Missing non optional `repoid` arg in JSON DATA'
+        self._compare_error(id_, expected, given=response.body)
+
+    def test_api_args_is_null(self):
+        id_, params = _build_data(self.apikey, 'get_users',)
+        params = params.replace('"args": {}', '"args": null')
+        response = api_call(self, params)
+        self.assertEqual(response.status, '200 OK')
+
+    def test_api_args_is_bad(self):
+        id_, params = _build_data(self.apikey, 'get_users',)
+        params = params.replace('"args": {}', '"args": 1')
+        response = api_call(self, params)
+        self.assertEqual(response.status, '200 OK')
+
     def test_api_get_users(self):
         id_, params = _build_data(self.apikey, 'get_users',)
         response = api_call(self, params)