changeset 6212:8be0633ff852

api: fail when given unknown arguments This make the API more type safe and can help developers fix issues early.
author Mads Kiilerich <madski@unity3d.com>
date Mon, 12 Sep 2016 17:41:20 +0200
parents 2990b0587e3f
children 591effa1fc4d
files kallithea/controllers/api/__init__.py kallithea/tests/api/api_base.py
diffstat 2 files changed, 12 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/kallithea/controllers/api/__init__.py	Mon Sep 12 17:41:20 2016 +0200
+++ b/kallithea/controllers/api/__init__.py	Mon Sep 12 17:41:20 2016 +0200
@@ -214,6 +214,14 @@
                     )
                 )
 
+        extra = set(self._request_params).difference(func_kwargs)
+        if extra:
+                return jsonrpc_error(
+                    retid=self._req_id,
+                    message=('Unknown %s arg in JSON DATA' %
+                             ', '.join('`%s`' % arg for arg in extra)),
+                )
+
         self._rpc_args = {}
 
         self._rpc_args.update(self._request_params)
--- a/kallithea/tests/api/api_base.py	Mon Sep 12 17:41:20 2016 +0200
+++ b/kallithea/tests/api/api_base.py	Mon Sep 12 17:41:20 2016 +0200
@@ -1143,8 +1143,6 @@
     @parametrize('changing_attr,updates', [
         ('owner', {'owner': TEST_USER_REGULAR_LOGIN}),
         ('description', {'description': u'new description'}),
-        ('active', {'active': True}),
-        ('active', {'active': False}),
         ('clone_uri', {'clone_uri': 'http://example.com/repo'}),
         ('clone_uri', {'clone_uri': None}),
         ('landing_rev', {'landing_rev': 'branch:master'}),
@@ -1181,8 +1179,6 @@
     @parametrize('changing_attr,updates', [
         ('owner', {'owner': TEST_USER_REGULAR_LOGIN}),
         ('description', {'description': u'new description'}),
-        ('active', {'active': True}),
-        ('active', {'active': False}),
         ('clone_uri', {'clone_uri': 'http://example.com/repo'}),
         ('clone_uri', {'clone_uri': None}),
         ('landing_rev', {'landing_rev': 'branch:master'}),
@@ -1235,7 +1231,7 @@
     def test_api_update_repo_regular_user_not_allowed(self):
         repo_name = u'admin_owned'
         fixture.create_repo(repo_name)
-        updates = {'active': False}
+        updates = {'description': 'something else'}
         id_, params = _build_data(self.apikey_regular, 'update_repo',
                                   repoid=repo_name, **updates)
         response = api_call(self, params)
@@ -1714,8 +1710,7 @@
         gr_id = ugroup.users_group_id
         try:
             id_, params = _build_data(self.apikey, 'delete_user_group',
-                                      usergroupid=gr_name,
-                                      userid=TEST_USER_ADMIN_LOGIN)
+                                      usergroupid=gr_name)
             response = api_call(self, params)
             expected = {
                 'user_group': None,
@@ -1736,8 +1731,7 @@
 
         try:
             id_, params = _build_data(self.apikey, 'delete_user_group',
-                                      usergroupid=gr_name,
-                                      userid=TEST_USER_ADMIN_LOGIN)
+                                      usergroupid=gr_name)
             response = api_call(self, params)
             expected = msg
             self._compare_error(id_, expected, given=response.body)
@@ -1750,8 +1744,7 @@
         ugroup = fixture.create_user_group(gr_name)
         gr_id = ugroup.users_group_id
         id_, params = _build_data(self.apikey, 'delete_user_group',
-                                  usergroupid=gr_name,
-                                  userid=TEST_USER_ADMIN_LOGIN)
+                                  usergroupid=gr_name)
 
         try:
             with mock.patch.object(UserGroupModel, 'delete', crash):