comparison rhodecode/tests/api/api_base.py @ 3647:8a86836fad64 beta

more usage of fixture tools in tests
author Marcin Kuzminski <marcin@python-works.com>
date Mon, 01 Apr 2013 23:45:25 +0200
parents 7cde75eac0fe
children 7e3d89d9d3a2
comparison
equal deleted inserted replaced
3646:63e49418a4cc 3647:8a86836fad64
1 from __future__ import with_statement 1 from __future__ import with_statement
2 import random 2 import random
3 import mock 3 import mock
4 4
5 from rhodecode.tests import * 5 from rhodecode.tests import *
6 from rhodecode.tests.fixture import Fixture
6 from rhodecode.lib.compat import json 7 from rhodecode.lib.compat import json
7 from rhodecode.lib.auth import AuthUser 8 from rhodecode.lib.auth import AuthUser
8 from rhodecode.model.user import UserModel 9 from rhodecode.model.user import UserModel
9 from rhodecode.model.users_group import UserGroupModel 10 from rhodecode.model.users_group import UserGroupModel
10 from rhodecode.model.repo import RepoModel 11 from rhodecode.model.repo import RepoModel
11 from rhodecode.model.meta import Session 12 from rhodecode.model.meta import Session
12 from rhodecode.model.scm import ScmModel 13 from rhodecode.model.scm import ScmModel
13 from rhodecode.model.db import Repository 14 from rhodecode.model.db import Repository
14 15
16
15 API_URL = '/_admin/api' 17 API_URL = '/_admin/api'
18 TEST_USER_GROUP = 'test_users_group'
19
20 fixture = Fixture()
16 21
17 22
18 def _build_data(apikey, method, **kw): 23 def _build_data(apikey, method, **kw):
19 """ 24 """
20 Builds API data with given random ID 25 Builds API data with given random ID
41 response = test_obj.app.post(API_URL, content_type='application/json', 46 response = test_obj.app.post(API_URL, content_type='application/json',
42 params=params) 47 params=params)
43 return response 48 return response
44 49
45 50
46 TEST_USER_GROUP = 'test_users_group' 51 ## helpers
47
48
49 def make_users_group(name=TEST_USER_GROUP): 52 def make_users_group(name=TEST_USER_GROUP):
50 gr = UserGroupModel().create(name=name) 53 gr = UserGroupModel().create(name=name)
51 UserGroupModel().add_user_to_group(users_group=gr, 54 UserGroupModel().add_user_to_group(users_group=gr,
52 user=TEST_USER_ADMIN_LOGIN) 55 user=TEST_USER_ADMIN_LOGIN)
53 Session().commit() 56 Session().commit()
54 return gr 57 return gr
55 58
56 59
57 def destroy_users_group(name=TEST_USER_GROUP): 60 def destroy_users_group(name=TEST_USER_GROUP):
58 UserGroupModel().delete(users_group=name, force=True) 61 UserGroupModel().delete(users_group=name, force=True)
59 Session().commit()
60
61
62 def create_repo(repo_name, repo_type, owner=None):
63 # create new repo
64 form_data = _get_repo_create_params(
65 repo_name_full=repo_name,
66 repo_description='description %s' % repo_name,
67 )
68 cur_user = UserModel().get_by_username(owner or TEST_USER_ADMIN_LOGIN)
69 r = RepoModel().create(form_data, cur_user)
70 Session().commit()
71 return r
72
73
74 def create_fork(fork_name, fork_type, fork_of):
75 fork = RepoModel(Session())._get_repo(fork_of)
76 r = create_repo(fork_name, fork_type)
77 r.fork = fork
78 Session().add(r)
79 Session().commit()
80 return r
81
82
83 def destroy_repo(repo_name):
84 RepoModel().delete(repo_name)
85 Session().commit() 62 Session().commit()
86 63
87 64
88 class BaseTestApi(object): 65 class BaseTestApi(object):
89 REPO = None 66 REPO = None
246 def test_api_pull(self): 223 def test_api_pull(self):
247 #TODO: issues with rhodecode_extras here.. not sure why ! 224 #TODO: issues with rhodecode_extras here.. not sure why !
248 pass 225 pass
249 226
250 # repo_name = 'test_pull' 227 # repo_name = 'test_pull'
251 # r = create_repo(repo_name, self.REPO_TYPE) 228 # r = fixture.create_repo(repo_name, repo_type=self.REPO_TYPE)
252 # r.clone_uri = TEST_self.REPO 229 # r.clone_uri = TEST_self.REPO
253 # Session.add(r) 230 # Session.add(r)
254 # Session.commit() 231 # Session.commit()
255 # 232 #
256 # id_, params = _build_data(self.apikey, 'pull', 233 # id_, params = _build_data(self.apikey, 'pull',
259 # params=params) 236 # params=params)
260 # 237 #
261 # expected = 'Pulled from `%s`' % repo_name 238 # expected = 'Pulled from `%s`' % repo_name
262 # self._compare_ok(id_, expected, given=response.body) 239 # self._compare_ok(id_, expected, given=response.body)
263 # 240 #
264 # destroy_repo(repo_name) 241 # fixture.destroy_repo(repo_name)
265 242
266 def test_api_pull_error(self): 243 def test_api_pull_error(self):
267 id_, params = _build_data(self.apikey, 'pull', 244 id_, params = _build_data(self.apikey, 'pull',
268 repoid=self.REPO,) 245 repoid=self.REPO,)
269 response = api_call(self, params) 246 response = api_call(self, params)
315 % (TEST_USER_ADMIN_LOGIN, self.REPO, True)) 292 % (TEST_USER_ADMIN_LOGIN, self.REPO, True))
316 self._compare_ok(id_, expected, given=response.body) 293 self._compare_ok(id_, expected, given=response.body)
317 294
318 def test_api_lock_repo_lock_aquire_by_non_admin(self): 295 def test_api_lock_repo_lock_aquire_by_non_admin(self):
319 repo_name = 'api_delete_me' 296 repo_name = 'api_delete_me'
320 create_repo(repo_name, self.REPO_TYPE, owner=self.TEST_USER_LOGIN) 297 fixture.create_repo(repo_name, repo_type=self.REPO_TYPE,
298 cur_user=self.TEST_USER_LOGIN)
321 try: 299 try:
322 id_, params = _build_data(self.apikey_regular, 'lock', 300 id_, params = _build_data(self.apikey_regular, 'lock',
323 repoid=repo_name, 301 repoid=repo_name,
324 locked=True) 302 locked=True)
325 response = api_call(self, params) 303 response = api_call(self, params)
326 expected = ('User `%s` set lock state for repo `%s` to `%s`' 304 expected = ('User `%s` set lock state for repo `%s` to `%s`'
327 % (self.TEST_USER_LOGIN, repo_name, True)) 305 % (self.TEST_USER_LOGIN, repo_name, True))
328 self._compare_ok(id_, expected, given=response.body) 306 self._compare_ok(id_, expected, given=response.body)
329 finally: 307 finally:
330 destroy_repo(repo_name) 308 fixture.destroy_repo(repo_name)
331 309
332 def test_api_lock_repo_lock_aquire_non_admin_with_userid(self): 310 def test_api_lock_repo_lock_aquire_non_admin_with_userid(self):
333 repo_name = 'api_delete_me' 311 repo_name = 'api_delete_me'
334 create_repo(repo_name, self.REPO_TYPE, owner=self.TEST_USER_LOGIN) 312 fixture.create_repo(repo_name, repo_type=self.REPO_TYPE,
313 cur_user=self.TEST_USER_LOGIN)
335 try: 314 try:
336 id_, params = _build_data(self.apikey_regular, 'lock', 315 id_, params = _build_data(self.apikey_regular, 'lock',
337 userid=TEST_USER_ADMIN_LOGIN, 316 userid=TEST_USER_ADMIN_LOGIN,
338 repoid=repo_name, 317 repoid=repo_name,
339 locked=True) 318 locked=True)
340 response = api_call(self, params) 319 response = api_call(self, params)
341 expected = 'userid is not the same as your user' 320 expected = 'userid is not the same as your user'
342 self._compare_error(id_, expected, given=response.body) 321 self._compare_error(id_, expected, given=response.body)
343 finally: 322 finally:
344 destroy_repo(repo_name) 323 fixture.destroy_repo(repo_name)
345 324
346 def test_api_lock_repo_lock_aquire_non_admin_not_his_repo(self): 325 def test_api_lock_repo_lock_aquire_non_admin_not_his_repo(self):
347 id_, params = _build_data(self.apikey_regular, 'lock', 326 id_, params = _build_data(self.apikey_regular, 'lock',
348 repoid=self.REPO, 327 repoid=self.REPO,
349 locked=True) 328 locked=True)
768 'msg': 'Created new repository `%s`' % repo_name, 747 'msg': 'Created new repository `%s`' % repo_name,
769 'repo': jsonify(repo.get_api_data()) 748 'repo': jsonify(repo.get_api_data())
770 } 749 }
771 expected = ret 750 expected = ret
772 self._compare_ok(id_, expected, given=response.body) 751 self._compare_ok(id_, expected, given=response.body)
773 destroy_repo(repo_name) 752 fixture.destroy_repo(repo_name)
774 753
775 def test_api_create_repo_unknown_owner(self): 754 def test_api_create_repo_unknown_owner(self):
776 repo_name = 'api-repo' 755 repo_name = 'api-repo'
777 owner = 'i-dont-exist' 756 owner = 'i-dont-exist'
778 id_, params = _build_data(self.apikey, 'create_repo', 757 id_, params = _build_data(self.apikey, 'create_repo',
798 'msg': 'Created new repository `%s`' % repo_name, 777 'msg': 'Created new repository `%s`' % repo_name,
799 'repo': jsonify(repo.get_api_data()) 778 'repo': jsonify(repo.get_api_data())
800 } 779 }
801 expected = ret 780 expected = ret
802 self._compare_ok(id_, expected, given=response.body) 781 self._compare_ok(id_, expected, given=response.body)
803 destroy_repo(repo_name) 782 fixture.destroy_repo(repo_name)
804 783
805 def test_api_create_repo_by_non_admin(self): 784 def test_api_create_repo_by_non_admin(self):
806 repo_name = 'api-repo' 785 repo_name = 'api-repo'
807 owner = 'i-dont-exist' 786 owner = 'i-dont-exist'
808 id_, params = _build_data(self.apikey_regular, 'create_repo', 787 id_, params = _build_data(self.apikey_regular, 'create_repo',
816 'msg': 'Created new repository `%s`' % repo_name, 795 'msg': 'Created new repository `%s`' % repo_name,
817 'repo': jsonify(repo.get_api_data()) 796 'repo': jsonify(repo.get_api_data())
818 } 797 }
819 expected = ret 798 expected = ret
820 self._compare_ok(id_, expected, given=response.body) 799 self._compare_ok(id_, expected, given=response.body)
821 destroy_repo(repo_name) 800 fixture.destroy_repo(repo_name)
822 801
823 def test_api_create_repo_by_non_admin_specify_owner(self): 802 def test_api_create_repo_by_non_admin_specify_owner(self):
824 repo_name = 'api-repo' 803 repo_name = 'api-repo'
825 owner = 'i-dont-exist' 804 owner = 'i-dont-exist'
826 id_, params = _build_data(self.apikey_regular, 'create_repo', 805 id_, params = _build_data(self.apikey_regular, 'create_repo',
830 ) 809 )
831 response = api_call(self, params) 810 response = api_call(self, params)
832 811
833 expected = 'Only RhodeCode admin can specify `owner` param' 812 expected = 'Only RhodeCode admin can specify `owner` param'
834 self._compare_error(id_, expected, given=response.body) 813 self._compare_error(id_, expected, given=response.body)
835 destroy_repo(repo_name) 814 fixture.destroy_repo(repo_name)
836 815
837 def test_api_create_repo_exists(self): 816 def test_api_create_repo_exists(self):
838 repo_name = self.REPO 817 repo_name = self.REPO
839 id_, params = _build_data(self.apikey, 'create_repo', 818 id_, params = _build_data(self.apikey, 'create_repo',
840 repo_name=repo_name, 819 repo_name=repo_name,
857 expected = 'failed to create repository `%s`' % repo_name 836 expected = 'failed to create repository `%s`' % repo_name
858 self._compare_error(id_, expected, given=response.body) 837 self._compare_error(id_, expected, given=response.body)
859 838
860 def test_api_delete_repo(self): 839 def test_api_delete_repo(self):
861 repo_name = 'api_delete_me' 840 repo_name = 'api_delete_me'
862 create_repo(repo_name, self.REPO_TYPE) 841 fixture.create_repo(repo_name, repo_type=self.REPO_TYPE)
863 842
864 id_, params = _build_data(self.apikey, 'delete_repo', 843 id_, params = _build_data(self.apikey, 'delete_repo',
865 repoid=repo_name,) 844 repoid=repo_name,)
866 response = api_call(self, params) 845 response = api_call(self, params)
867 846
872 expected = ret 851 expected = ret
873 self._compare_ok(id_, expected, given=response.body) 852 self._compare_ok(id_, expected, given=response.body)
874 853
875 def test_api_delete_repo_by_non_admin(self): 854 def test_api_delete_repo_by_non_admin(self):
876 repo_name = 'api_delete_me' 855 repo_name = 'api_delete_me'
877 create_repo(repo_name, self.REPO_TYPE, owner=self.TEST_USER_LOGIN) 856 fixture.create_repo(repo_name, repo_type=self.REPO_TYPE,
857 cur_user=self.TEST_USER_LOGIN)
878 try: 858 try:
879 id_, params = _build_data(self.apikey_regular, 'delete_repo', 859 id_, params = _build_data(self.apikey_regular, 'delete_repo',
880 repoid=repo_name,) 860 repoid=repo_name,)
881 response = api_call(self, params) 861 response = api_call(self, params)
882 862
885 'success': True 865 'success': True
886 } 866 }
887 expected = ret 867 expected = ret
888 self._compare_ok(id_, expected, given=response.body) 868 self._compare_ok(id_, expected, given=response.body)
889 finally: 869 finally:
890 destroy_repo(repo_name) 870 fixture.destroy_repo(repo_name)
891 871
892 def test_api_delete_repo_by_non_admin_no_permission(self): 872 def test_api_delete_repo_by_non_admin_no_permission(self):
893 repo_name = 'api_delete_me' 873 repo_name = 'api_delete_me'
894 create_repo(repo_name, self.REPO_TYPE) 874 fixture.create_repo(repo_name, repo_type=self.REPO_TYPE)
895 try: 875 try:
896 id_, params = _build_data(self.apikey_regular, 'delete_repo', 876 id_, params = _build_data(self.apikey_regular, 'delete_repo',
897 repoid=repo_name,) 877 repoid=repo_name,)
898 response = api_call(self, params) 878 response = api_call(self, params)
899 expected = 'repository `%s` does not exist' % (repo_name) 879 expected = 'repository `%s` does not exist' % (repo_name)
900 self._compare_error(id_, expected, given=response.body) 880 self._compare_error(id_, expected, given=response.body)
901 finally: 881 finally:
902 destroy_repo(repo_name) 882 fixture.destroy_repo(repo_name)
903 883
904 def test_api_delete_repo_exception_occurred(self): 884 def test_api_delete_repo_exception_occurred(self):
905 repo_name = 'api_delete_me' 885 repo_name = 'api_delete_me'
906 create_repo(repo_name, self.REPO_TYPE) 886 fixture.create_repo(repo_name, repo_type=self.REPO_TYPE)
907 try: 887 try:
908 with mock.patch.object(RepoModel, 'delete', crash): 888 with mock.patch.object(RepoModel, 'delete', crash):
909 id_, params = _build_data(self.apikey, 'delete_repo', 889 id_, params = _build_data(self.apikey, 'delete_repo',
910 repoid=repo_name,) 890 repoid=repo_name,)
911 response = api_call(self, params) 891 response = api_call(self, params)
912 892
913 expected = 'failed to delete repository `%s`' % repo_name 893 expected = 'failed to delete repository `%s`' % repo_name
914 self._compare_error(id_, expected, given=response.body) 894 self._compare_error(id_, expected, given=response.body)
915 finally: 895 finally:
916 destroy_repo(repo_name) 896 fixture.destroy_repo(repo_name)
917 897
918 def test_api_fork_repo(self): 898 def test_api_fork_repo(self):
919 fork_name = 'api-repo-fork' 899 fork_name = 'api-repo-fork'
920 id_, params = _build_data(self.apikey, 'fork_repo', 900 id_, params = _build_data(self.apikey, 'fork_repo',
921 repoid=self.REPO, 901 repoid=self.REPO,
929 fork_name), 909 fork_name),
930 'success': True 910 'success': True
931 } 911 }
932 expected = ret 912 expected = ret
933 self._compare_ok(id_, expected, given=response.body) 913 self._compare_ok(id_, expected, given=response.body)
934 destroy_repo(fork_name) 914 fixture.destroy_repo(fork_name)
935 915
936 def test_api_fork_repo_non_admin(self): 916 def test_api_fork_repo_non_admin(self):
937 fork_name = 'api-repo-fork' 917 fork_name = 'api-repo-fork'
938 id_, params = _build_data(self.apikey_regular, 'fork_repo', 918 id_, params = _build_data(self.apikey_regular, 'fork_repo',
939 repoid=self.REPO, 919 repoid=self.REPO,
946 fork_name), 926 fork_name),
947 'success': True 927 'success': True
948 } 928 }
949 expected = ret 929 expected = ret
950 self._compare_ok(id_, expected, given=response.body) 930 self._compare_ok(id_, expected, given=response.body)
951 destroy_repo(fork_name) 931 fixture.destroy_repo(fork_name)
952 932
953 def test_api_fork_repo_non_admin_specify_owner(self): 933 def test_api_fork_repo_non_admin_specify_owner(self):
954 fork_name = 'api-repo-fork' 934 fork_name = 'api-repo-fork'
955 id_, params = _build_data(self.apikey_regular, 'fork_repo', 935 id_, params = _build_data(self.apikey_regular, 'fork_repo',
956 repoid=self.REPO, 936 repoid=self.REPO,
958 owner=TEST_USER_ADMIN_LOGIN, 938 owner=TEST_USER_ADMIN_LOGIN,
959 ) 939 )
960 response = api_call(self, params) 940 response = api_call(self, params)
961 expected = 'Only RhodeCode admin can specify `owner` param' 941 expected = 'Only RhodeCode admin can specify `owner` param'
962 self._compare_error(id_, expected, given=response.body) 942 self._compare_error(id_, expected, given=response.body)
963 destroy_repo(fork_name) 943 fixture.destroy_repo(fork_name)
964 944
965 def test_api_fork_repo_non_admin_no_permission_to_fork(self): 945 def test_api_fork_repo_non_admin_no_permission_to_fork(self):
966 RepoModel().grant_user_permission(repo=self.REPO, 946 RepoModel().grant_user_permission(repo=self.REPO,
967 user=self.TEST_USER_LOGIN, 947 user=self.TEST_USER_LOGIN,
968 perm='repository.none') 948 perm='repository.none')
972 fork_name=fork_name, 952 fork_name=fork_name,
973 ) 953 )
974 response = api_call(self, params) 954 response = api_call(self, params)
975 expected = 'repository `%s` does not exist' % (self.REPO) 955 expected = 'repository `%s` does not exist' % (self.REPO)
976 self._compare_error(id_, expected, given=response.body) 956 self._compare_error(id_, expected, given=response.body)
977 destroy_repo(fork_name) 957 fixture.destroy_repo(fork_name)
978 958
979 def test_api_fork_repo_unknown_owner(self): 959 def test_api_fork_repo_unknown_owner(self):
980 fork_name = 'api-repo-fork' 960 fork_name = 'api-repo-fork'
981 owner = 'i-dont-exist' 961 owner = 'i-dont-exist'
982 id_, params = _build_data(self.apikey, 'fork_repo', 962 id_, params = _build_data(self.apikey, 'fork_repo',
988 expected = 'user `%s` does not exist' % owner 968 expected = 'user `%s` does not exist' % owner
989 self._compare_error(id_, expected, given=response.body) 969 self._compare_error(id_, expected, given=response.body)
990 970
991 def test_api_fork_repo_fork_exists(self): 971 def test_api_fork_repo_fork_exists(self):
992 fork_name = 'api-repo-fork' 972 fork_name = 'api-repo-fork'
993 create_fork(fork_name, self.REPO_TYPE, self.REPO) 973 fixture.create_fork(self.REPO, fork_name)
994 974
995 try: 975 try:
996 fork_name = 'api-repo-fork' 976 fork_name = 'api-repo-fork'
997 977
998 id_, params = _build_data(self.apikey, 'fork_repo', 978 id_, params = _build_data(self.apikey, 'fork_repo',
1003 response = api_call(self, params) 983 response = api_call(self, params)
1004 984
1005 expected = "fork `%s` already exist" % fork_name 985 expected = "fork `%s` already exist" % fork_name
1006 self._compare_error(id_, expected, given=response.body) 986 self._compare_error(id_, expected, given=response.body)
1007 finally: 987 finally:
1008 destroy_repo(fork_name) 988 fixture.destroy_repo(fork_name)
1009 989
1010 def test_api_fork_repo_repo_exists(self): 990 def test_api_fork_repo_repo_exists(self):
1011 fork_name = self.REPO 991 fork_name = self.REPO
1012 992
1013 id_, params = _build_data(self.apikey, 'fork_repo', 993 id_, params = _build_data(self.apikey, 'fork_repo',