Mercurial > kallithea
annotate rhodecode/tests/api/api_base.py @ 3163:28571535dd61 beta
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
can be executed by non-admin users ref #539
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Mon, 14 Jan 2013 00:38:24 +0100 |
parents | 3563c47e52fd |
children | e1baadec6217 |
rev | line source |
---|---|
2529
40b3a54391f9
Added functional test create repo with a group
Marcin Kuzminski <marcin@python-works.com>
parents:
2526
diff
changeset
|
1 from __future__ import with_statement |
2526 | 2 import random |
3 import mock | |
4 | |
5 from rhodecode.tests import * | |
6 from rhodecode.lib.compat import json | |
7 from rhodecode.lib.auth import AuthUser | |
8 from rhodecode.model.user import UserModel | |
9 from rhodecode.model.users_group import UsersGroupModel | |
10 from rhodecode.model.repo import RepoModel | |
2529
40b3a54391f9
Added functional test create repo with a group
Marcin Kuzminski <marcin@python-works.com>
parents:
2526
diff
changeset
|
11 from rhodecode.model.meta import Session |
2697
4565e655ea2a
API: Added option to rescann repositories via api call
Marcin Kuzminski <marcin@python-works.com>
parents:
2673
diff
changeset
|
12 from rhodecode.model.scm import ScmModel |
2737
e21cb7b1a4a5
added API call for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2697
diff
changeset
|
13 from rhodecode.model.db import Repository |
2526 | 14 |
15 API_URL = '/_admin/api' | |
16 | |
17 | |
18 def _build_data(apikey, method, **kw): | |
19 """ | |
20 Builds API data with given random ID | |
21 | |
22 :param random_id: | |
23 :type random_id: | |
24 """ | |
25 random_id = random.randrange(1, 9999) | |
26 return random_id, json.dumps({ | |
27 "id": random_id, | |
28 "api_key": apikey, | |
29 "method": method, | |
30 "args": kw | |
31 }) | |
32 | |
33 jsonify = lambda obj: json.loads(json.dumps(obj)) | |
34 | |
35 | |
36 def crash(*args, **kwargs): | |
37 raise Exception('Total Crash !') | |
38 | |
39 | |
2738 | 40 def api_call(test_obj, params): |
41 response = test_obj.app.post(API_URL, content_type='application/json', | |
42 params=params) | |
43 return response | |
44 | |
45 | |
2526 | 46 TEST_USERS_GROUP = 'test_users_group' |
47 | |
48 | |
49 def make_users_group(name=TEST_USERS_GROUP): | |
50 gr = UsersGroupModel().create(name=name) | |
51 UsersGroupModel().add_user_to_group(users_group=gr, | |
52 user=TEST_USER_ADMIN_LOGIN) | |
53 Session().commit() | |
54 return gr | |
55 | |
56 | |
57 def destroy_users_group(name=TEST_USERS_GROUP): | |
58 UsersGroupModel().delete(users_group=name, force=True) | |
59 Session().commit() | |
60 | |
61 | |
3163
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
62 def create_repo(repo_name, repo_type, owner=None): |
2526 | 63 # create new repo |
3056
6104dfd35b16
Implemented #379 defaults settings page for creation of repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2738
diff
changeset
|
64 form_data = _get_repo_create_params( |
6104dfd35b16
Implemented #379 defaults settings page for creation of repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2738
diff
changeset
|
65 repo_name_full=repo_name, |
6104dfd35b16
Implemented #379 defaults settings page for creation of repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2738
diff
changeset
|
66 repo_description='description %s' % repo_name, |
6104dfd35b16
Implemented #379 defaults settings page for creation of repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2738
diff
changeset
|
67 ) |
3163
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
68 cur_user = UserModel().get_by_username(owner or TEST_USER_ADMIN_LOGIN) |
2526 | 69 r = RepoModel().create(form_data, cur_user) |
70 Session().commit() | |
71 return r | |
72 | |
73 | |
2653
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
74 def create_fork(fork_name, fork_type, fork_of): |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
75 fork = RepoModel(Session())._get_repo(fork_of) |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
76 r = create_repo(fork_name, fork_type) |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
77 r.fork = fork |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
78 Session().add(r) |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
79 Session().commit() |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
80 return r |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
81 |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
82 |
2526 | 83 def destroy_repo(repo_name): |
84 RepoModel().delete(repo_name) | |
85 Session().commit() | |
86 | |
87 | |
88 class BaseTestApi(object): | |
89 REPO = None | |
90 REPO_TYPE = None | |
91 | |
92 @classmethod | |
93 def setUpClass(self): | |
94 self.usr = UserModel().get_by_username(TEST_USER_ADMIN_LOGIN) | |
95 self.apikey = self.usr.api_key | |
3163
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
96 self.test_user = UserModel().create_or_update( |
2526 | 97 username='test-api', |
98 password='test', | |
99 email='test@api.rhodecode.org', | |
100 firstname='first', | |
101 lastname='last' | |
102 ) | |
103 Session().commit() | |
3163
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
104 self.TEST_USER_LOGIN = self.test_user.username |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
105 self.apikey_regular = self.test_user.api_key |
2526 | 106 |
107 @classmethod | |
108 def teardownClass(self): | |
109 pass | |
110 | |
111 def setUp(self): | |
112 self.maxDiff = None | |
113 make_users_group() | |
114 | |
115 def tearDown(self): | |
116 destroy_users_group() | |
117 | |
118 def _compare_ok(self, id_, expected, given): | |
119 expected = jsonify({ | |
120 'id': id_, | |
121 'error': None, | |
122 'result': expected | |
123 }) | |
124 given = json.loads(given) | |
125 self.assertEqual(expected, given) | |
126 | |
127 def _compare_error(self, id_, expected, given): | |
128 expected = jsonify({ | |
129 'id': id_, | |
130 'error': expected, | |
131 'result': None | |
132 }) | |
133 given = json.loads(given) | |
134 self.assertEqual(expected, given) | |
135 | |
136 # def test_Optional(self): | |
137 # from rhodecode.controllers.api.api import Optional | |
138 # option1 = Optional(None) | |
139 # self.assertEqual('<Optional:%s>' % None, repr(option1)) | |
140 # | |
141 # self.assertEqual(1, Optional.extract(Optional(1))) | |
142 # self.assertEqual('trololo', Optional.extract('trololo')) | |
143 | |
144 def test_api_wrong_key(self): | |
145 id_, params = _build_data('trololo', 'get_user') | |
2738 | 146 response = api_call(self, params) |
2526 | 147 |
148 expected = 'Invalid API KEY' | |
149 self._compare_error(id_, expected, given=response.body) | |
150 | |
151 def test_api_missing_non_optional_param(self): | |
3163
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
152 id_, params = _build_data(self.apikey, 'get_repo') |
2738 | 153 response = api_call(self, params) |
2526 | 154 |
3163
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
155 expected = 'Missing non optional `repoid` arg in JSON DATA' |
2526 | 156 self._compare_error(id_, expected, given=response.body) |
157 | |
158 def test_api_get_users(self): | |
159 id_, params = _build_data(self.apikey, 'get_users',) | |
2738 | 160 response = api_call(self, params) |
2526 | 161 ret_all = [] |
162 for usr in UserModel().get_all(): | |
163 ret = usr.get_api_data() | |
164 ret_all.append(jsonify(ret)) | |
165 expected = ret_all | |
166 self._compare_ok(id_, expected, given=response.body) | |
167 | |
168 def test_api_get_user(self): | |
169 id_, params = _build_data(self.apikey, 'get_user', | |
170 userid=TEST_USER_ADMIN_LOGIN) | |
2738 | 171 response = api_call(self, params) |
2526 | 172 |
173 usr = UserModel().get_by_username(TEST_USER_ADMIN_LOGIN) | |
174 ret = usr.get_api_data() | |
175 ret['permissions'] = AuthUser(usr.user_id).permissions | |
176 | |
177 expected = ret | |
178 self._compare_ok(id_, expected, given=response.body) | |
179 | |
180 def test_api_get_user_that_does_not_exist(self): | |
181 id_, params = _build_data(self.apikey, 'get_user', | |
182 userid='trololo') | |
2738 | 183 response = api_call(self, params) |
2526 | 184 |
185 expected = "user `%s` does not exist" % 'trololo' | |
186 self._compare_error(id_, expected, given=response.body) | |
187 | |
3163
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
188 def test_api_get_user_without_giving_userid(self): |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
189 id_, params = _build_data(self.apikey, 'get_user') |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
190 response = api_call(self, params) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
191 |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
192 usr = UserModel().get_by_username(TEST_USER_ADMIN_LOGIN) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
193 ret = usr.get_api_data() |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
194 ret['permissions'] = AuthUser(usr.user_id).permissions |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
195 |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
196 expected = ret |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
197 self._compare_ok(id_, expected, given=response.body) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
198 |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
199 def test_api_get_user_without_giving_userid_non_admin(self): |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
200 id_, params = _build_data(self.apikey_regular, 'get_user') |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
201 response = api_call(self, params) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
202 |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
203 usr = UserModel().get_by_username(self.TEST_USER_LOGIN) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
204 ret = usr.get_api_data() |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
205 ret['permissions'] = AuthUser(usr.user_id).permissions |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
206 |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
207 expected = ret |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
208 self._compare_ok(id_, expected, given=response.body) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
209 |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
210 def test_api_get_user_with_giving_userid_non_admin(self): |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
211 id_, params = _build_data(self.apikey_regular, 'get_user', |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
212 userid=self.TEST_USER_LOGIN) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
213 response = api_call(self, params) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
214 |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
215 expected = 'userid is not the same as your user' |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
216 self._compare_error(id_, expected, given=response.body) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
217 |
2526 | 218 def test_api_pull(self): |
219 #TODO: issues with rhodecode_extras here.. not sure why ! | |
220 pass | |
221 | |
222 # repo_name = 'test_pull' | |
223 # r = create_repo(repo_name, self.REPO_TYPE) | |
224 # r.clone_uri = TEST_self.REPO | |
225 # Session.add(r) | |
226 # Session.commit() | |
227 # | |
228 # id_, params = _build_data(self.apikey, 'pull', | |
229 # repoid=repo_name,) | |
230 # response = self.app.post(API_URL, content_type='application/json', | |
231 # params=params) | |
232 # | |
233 # expected = 'Pulled from `%s`' % repo_name | |
234 # self._compare_ok(id_, expected, given=response.body) | |
235 # | |
236 # destroy_repo(repo_name) | |
237 | |
238 def test_api_pull_error(self): | |
239 id_, params = _build_data(self.apikey, 'pull', | |
240 repoid=self.REPO,) | |
2738 | 241 response = api_call(self, params) |
2526 | 242 |
243 expected = 'Unable to pull changes from `%s`' % self.REPO | |
244 self._compare_error(id_, expected, given=response.body) | |
245 | |
2697
4565e655ea2a
API: Added option to rescann repositories via api call
Marcin Kuzminski <marcin@python-works.com>
parents:
2673
diff
changeset
|
246 def test_api_rescan_repos(self): |
4565e655ea2a
API: Added option to rescann repositories via api call
Marcin Kuzminski <marcin@python-works.com>
parents:
2673
diff
changeset
|
247 id_, params = _build_data(self.apikey, 'rescan_repos') |
2738 | 248 response = api_call(self, params) |
2697
4565e655ea2a
API: Added option to rescann repositories via api call
Marcin Kuzminski <marcin@python-works.com>
parents:
2673
diff
changeset
|
249 |
4565e655ea2a
API: Added option to rescann repositories via api call
Marcin Kuzminski <marcin@python-works.com>
parents:
2673
diff
changeset
|
250 expected = {'added': [], 'removed': []} |
4565e655ea2a
API: Added option to rescann repositories via api call
Marcin Kuzminski <marcin@python-works.com>
parents:
2673
diff
changeset
|
251 self._compare_ok(id_, expected, given=response.body) |
4565e655ea2a
API: Added option to rescann repositories via api call
Marcin Kuzminski <marcin@python-works.com>
parents:
2673
diff
changeset
|
252 |
4565e655ea2a
API: Added option to rescann repositories via api call
Marcin Kuzminski <marcin@python-works.com>
parents:
2673
diff
changeset
|
253 @mock.patch.object(ScmModel, 'repo_scan', crash) |
4565e655ea2a
API: Added option to rescann repositories via api call
Marcin Kuzminski <marcin@python-works.com>
parents:
2673
diff
changeset
|
254 def test_api_rescann_error(self): |
4565e655ea2a
API: Added option to rescann repositories via api call
Marcin Kuzminski <marcin@python-works.com>
parents:
2673
diff
changeset
|
255 id_, params = _build_data(self.apikey, 'rescan_repos',) |
2738 | 256 response = api_call(self, params) |
2697
4565e655ea2a
API: Added option to rescann repositories via api call
Marcin Kuzminski <marcin@python-works.com>
parents:
2673
diff
changeset
|
257 |
2737
e21cb7b1a4a5
added API call for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2697
diff
changeset
|
258 expected = 'Error occurred during rescan repositories action' |
e21cb7b1a4a5
added API call for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2697
diff
changeset
|
259 self._compare_error(id_, expected, given=response.body) |
e21cb7b1a4a5
added API call for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2697
diff
changeset
|
260 |
e21cb7b1a4a5
added API call for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2697
diff
changeset
|
261 def test_api_lock_repo_lock_aquire(self): |
e21cb7b1a4a5
added API call for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2697
diff
changeset
|
262 id_, params = _build_data(self.apikey, 'lock', |
e21cb7b1a4a5
added API call for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2697
diff
changeset
|
263 userid=TEST_USER_ADMIN_LOGIN, |
e21cb7b1a4a5
added API call for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2697
diff
changeset
|
264 repoid=self.REPO, |
e21cb7b1a4a5
added API call for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2697
diff
changeset
|
265 locked=True) |
2738 | 266 response = api_call(self, params) |
2737
e21cb7b1a4a5
added API call for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2697
diff
changeset
|
267 expected = ('User `%s` set lock state for repo `%s` to `%s`' |
e21cb7b1a4a5
added API call for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2697
diff
changeset
|
268 % (TEST_USER_ADMIN_LOGIN, self.REPO, True)) |
e21cb7b1a4a5
added API call for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2697
diff
changeset
|
269 self._compare_ok(id_, expected, given=response.body) |
e21cb7b1a4a5
added API call for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2697
diff
changeset
|
270 |
3163
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
271 def test_api_lock_repo_lock_aquire_by_non_admin(self): |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
272 repo_name = 'api_delete_me' |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
273 create_repo(repo_name, self.REPO_TYPE, owner=self.TEST_USER_LOGIN) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
274 try: |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
275 id_, params = _build_data(self.apikey_regular, 'lock', |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
276 repoid=repo_name, |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
277 locked=True) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
278 response = api_call(self, params) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
279 expected = ('User `%s` set lock state for repo `%s` to `%s`' |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
280 % (self.TEST_USER_LOGIN, repo_name, True)) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
281 self._compare_ok(id_, expected, given=response.body) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
282 finally: |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
283 destroy_repo(repo_name) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
284 |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
285 def test_api_lock_repo_lock_aquire_non_admin_with_userid(self): |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
286 repo_name = 'api_delete_me' |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
287 create_repo(repo_name, self.REPO_TYPE, owner=self.TEST_USER_LOGIN) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
288 try: |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
289 id_, params = _build_data(self.apikey_regular, 'lock', |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
290 userid=TEST_USER_ADMIN_LOGIN, |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
291 repoid=repo_name, |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
292 locked=True) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
293 response = api_call(self, params) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
294 expected = 'userid is not the same as your user' |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
295 self._compare_error(id_, expected, given=response.body) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
296 finally: |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
297 destroy_repo(repo_name) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
298 |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
299 def test_api_lock_repo_lock_aquire_non_admin_not_his_repo(self): |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
300 id_, params = _build_data(self.apikey_regular, 'lock', |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
301 repoid=self.REPO, |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
302 locked=True) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
303 response = api_call(self, params) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
304 expected = 'repository `%s` does not exist' % (self.REPO) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
305 self._compare_error(id_, expected, given=response.body) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
306 |
2737
e21cb7b1a4a5
added API call for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2697
diff
changeset
|
307 def test_api_lock_repo_lock_release(self): |
e21cb7b1a4a5
added API call for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2697
diff
changeset
|
308 id_, params = _build_data(self.apikey, 'lock', |
e21cb7b1a4a5
added API call for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2697
diff
changeset
|
309 userid=TEST_USER_ADMIN_LOGIN, |
e21cb7b1a4a5
added API call for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2697
diff
changeset
|
310 repoid=self.REPO, |
e21cb7b1a4a5
added API call for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2697
diff
changeset
|
311 locked=False) |
2738 | 312 response = api_call(self, params) |
2737
e21cb7b1a4a5
added API call for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2697
diff
changeset
|
313 expected = ('User `%s` set lock state for repo `%s` to `%s`' |
e21cb7b1a4a5
added API call for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2697
diff
changeset
|
314 % (TEST_USER_ADMIN_LOGIN, self.REPO, False)) |
e21cb7b1a4a5
added API call for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2697
diff
changeset
|
315 self._compare_ok(id_, expected, given=response.body) |
e21cb7b1a4a5
added API call for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2697
diff
changeset
|
316 |
3161
3563c47e52fd
Implemented API calls for non-admin users for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
3056
diff
changeset
|
317 def test_api_lock_repo_lock_aquire_optional_userid(self): |
3563c47e52fd
Implemented API calls for non-admin users for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
3056
diff
changeset
|
318 id_, params = _build_data(self.apikey, 'lock', |
3563c47e52fd
Implemented API calls for non-admin users for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
3056
diff
changeset
|
319 repoid=self.REPO, |
3563c47e52fd
Implemented API calls for non-admin users for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
3056
diff
changeset
|
320 locked=True) |
3563c47e52fd
Implemented API calls for non-admin users for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
3056
diff
changeset
|
321 response = api_call(self, params) |
3563c47e52fd
Implemented API calls for non-admin users for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
3056
diff
changeset
|
322 expected = ('User `%s` set lock state for repo `%s` to `%s`' |
3563c47e52fd
Implemented API calls for non-admin users for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
3056
diff
changeset
|
323 % (TEST_USER_ADMIN_LOGIN, self.REPO, True)) |
3563c47e52fd
Implemented API calls for non-admin users for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
3056
diff
changeset
|
324 self._compare_ok(id_, expected, given=response.body) |
3563c47e52fd
Implemented API calls for non-admin users for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
3056
diff
changeset
|
325 |
2737
e21cb7b1a4a5
added API call for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2697
diff
changeset
|
326 @mock.patch.object(Repository, 'lock', crash) |
e21cb7b1a4a5
added API call for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2697
diff
changeset
|
327 def test_api_lock_error(self): |
e21cb7b1a4a5
added API call for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2697
diff
changeset
|
328 id_, params = _build_data(self.apikey, 'lock', |
e21cb7b1a4a5
added API call for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2697
diff
changeset
|
329 userid=TEST_USER_ADMIN_LOGIN, |
e21cb7b1a4a5
added API call for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2697
diff
changeset
|
330 repoid=self.REPO, |
e21cb7b1a4a5
added API call for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2697
diff
changeset
|
331 locked=True) |
2738 | 332 response = api_call(self, params) |
2737
e21cb7b1a4a5
added API call for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2697
diff
changeset
|
333 |
e21cb7b1a4a5
added API call for locking/unlocking repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2697
diff
changeset
|
334 expected = 'Error occurred locking repository `%s`' % self.REPO |
2697
4565e655ea2a
API: Added option to rescann repositories via api call
Marcin Kuzminski <marcin@python-works.com>
parents:
2673
diff
changeset
|
335 self._compare_error(id_, expected, given=response.body) |
4565e655ea2a
API: Added option to rescann repositories via api call
Marcin Kuzminski <marcin@python-works.com>
parents:
2673
diff
changeset
|
336 |
2526 | 337 def test_api_create_existing_user(self): |
338 id_, params = _build_data(self.apikey, 'create_user', | |
339 username=TEST_USER_ADMIN_LOGIN, | |
340 email='test@foo.com', | |
341 password='trololo') | |
2738 | 342 response = api_call(self, params) |
2526 | 343 |
344 expected = "user `%s` already exist" % TEST_USER_ADMIN_LOGIN | |
345 self._compare_error(id_, expected, given=response.body) | |
346 | |
347 def test_api_create_user_with_existing_email(self): | |
348 id_, params = _build_data(self.apikey, 'create_user', | |
349 username=TEST_USER_ADMIN_LOGIN + 'new', | |
350 email=TEST_USER_REGULAR_EMAIL, | |
351 password='trololo') | |
2738 | 352 response = api_call(self, params) |
2526 | 353 |
354 expected = "email `%s` already exist" % TEST_USER_REGULAR_EMAIL | |
355 self._compare_error(id_, expected, given=response.body) | |
356 | |
357 def test_api_create_user(self): | |
358 username = 'test_new_api_user' | |
359 email = username + "@foo.com" | |
360 | |
361 id_, params = _build_data(self.apikey, 'create_user', | |
362 username=username, | |
363 email=email, | |
364 password='trololo') | |
2738 | 365 response = api_call(self, params) |
2526 | 366 |
367 usr = UserModel().get_by_username(username) | |
368 ret = dict( | |
369 msg='created new user `%s`' % username, | |
370 user=jsonify(usr.get_api_data()) | |
371 ) | |
372 | |
373 expected = ret | |
374 self._compare_ok(id_, expected, given=response.body) | |
375 | |
376 UserModel().delete(usr.user_id) | |
2738 | 377 Session().commit() |
2526 | 378 |
379 @mock.patch.object(UserModel, 'create_or_update', crash) | |
380 def test_api_create_user_when_exception_happened(self): | |
381 | |
382 username = 'test_new_api_user' | |
383 email = username + "@foo.com" | |
384 | |
385 id_, params = _build_data(self.apikey, 'create_user', | |
386 username=username, | |
387 email=email, | |
388 password='trololo') | |
2738 | 389 response = api_call(self, params) |
2526 | 390 expected = 'failed to create user `%s`' % username |
391 self._compare_error(id_, expected, given=response.body) | |
392 | |
393 def test_api_delete_user(self): | |
394 usr = UserModel().create_or_update(username=u'test_user', | |
395 password=u'qweqwe', | |
396 email=u'u232@rhodecode.org', | |
397 firstname=u'u1', lastname=u'u1') | |
2738 | 398 Session().commit() |
2526 | 399 username = usr.username |
400 email = usr.email | |
401 usr_id = usr.user_id | |
402 ## DELETE THIS USER NOW | |
403 | |
404 id_, params = _build_data(self.apikey, 'delete_user', | |
405 userid=username,) | |
2738 | 406 response = api_call(self, params) |
2526 | 407 |
408 ret = {'msg': 'deleted user ID:%s %s' % (usr_id, username), | |
409 'user': None} | |
410 expected = ret | |
411 self._compare_ok(id_, expected, given=response.body) | |
412 | |
413 @mock.patch.object(UserModel, 'delete', crash) | |
414 def test_api_delete_user_when_exception_happened(self): | |
415 usr = UserModel().create_or_update(username=u'test_user', | |
416 password=u'qweqwe', | |
417 email=u'u232@rhodecode.org', | |
418 firstname=u'u1', lastname=u'u1') | |
2738 | 419 Session().commit() |
2526 | 420 username = usr.username |
421 | |
422 id_, params = _build_data(self.apikey, 'delete_user', | |
423 userid=username,) | |
2738 | 424 response = api_call(self, params) |
2526 | 425 ret = 'failed to delete ID:%s %s' % (usr.user_id, |
426 usr.username) | |
427 expected = ret | |
428 self._compare_error(id_, expected, given=response.body) | |
429 | |
430 @parameterized.expand([('firstname', 'new_username'), | |
431 ('lastname', 'new_username'), | |
432 ('email', 'new_username'), | |
433 ('admin', True), | |
434 ('admin', False), | |
435 ('ldap_dn', 'test'), | |
436 ('ldap_dn', None), | |
437 ('active', False), | |
438 ('active', True), | |
439 ('password', 'newpass') | |
440 ]) | |
441 def test_api_update_user(self, name, expected): | |
442 usr = UserModel().get_by_username(self.TEST_USER_LOGIN) | |
443 kw = {name: expected, | |
444 'userid': usr.user_id} | |
445 id_, params = _build_data(self.apikey, 'update_user', **kw) | |
2738 | 446 response = api_call(self, params) |
2526 | 447 |
448 ret = { | |
449 'msg': 'updated user ID:%s %s' % (usr.user_id, self.TEST_USER_LOGIN), | |
450 'user': jsonify(UserModel()\ | |
451 .get_by_username(self.TEST_USER_LOGIN)\ | |
452 .get_api_data()) | |
453 } | |
454 | |
455 expected = ret | |
456 self._compare_ok(id_, expected, given=response.body) | |
457 | |
458 def test_api_update_user_no_changed_params(self): | |
459 usr = UserModel().get_by_username(TEST_USER_ADMIN_LOGIN) | |
460 ret = jsonify(usr.get_api_data()) | |
461 id_, params = _build_data(self.apikey, 'update_user', | |
462 userid=TEST_USER_ADMIN_LOGIN) | |
463 | |
2738 | 464 response = api_call(self, params) |
2526 | 465 ret = { |
466 'msg': 'updated user ID:%s %s' % (usr.user_id, TEST_USER_ADMIN_LOGIN), | |
467 'user': ret | |
468 } | |
469 expected = ret | |
470 self._compare_ok(id_, expected, given=response.body) | |
471 | |
472 def test_api_update_user_by_user_id(self): | |
473 usr = UserModel().get_by_username(TEST_USER_ADMIN_LOGIN) | |
474 ret = jsonify(usr.get_api_data()) | |
475 id_, params = _build_data(self.apikey, 'update_user', | |
476 userid=usr.user_id) | |
477 | |
2738 | 478 response = api_call(self, params) |
2526 | 479 ret = { |
480 'msg': 'updated user ID:%s %s' % (usr.user_id, TEST_USER_ADMIN_LOGIN), | |
481 'user': ret | |
482 } | |
483 expected = ret | |
484 self._compare_ok(id_, expected, given=response.body) | |
485 | |
2657
001c7e2ae986
fixed api issue with changing username during update_user
Marcin Kuzminski <marcin@python-works.com>
parents:
2653
diff
changeset
|
486 @mock.patch.object(UserModel, 'update_user', crash) |
2526 | 487 def test_api_update_user_when_exception_happens(self): |
488 usr = UserModel().get_by_username(TEST_USER_ADMIN_LOGIN) | |
489 ret = jsonify(usr.get_api_data()) | |
490 id_, params = _build_data(self.apikey, 'update_user', | |
491 userid=usr.user_id) | |
492 | |
2738 | 493 response = api_call(self, params) |
2526 | 494 ret = 'failed to update user `%s`' % usr.user_id |
495 | |
496 expected = ret | |
497 self._compare_error(id_, expected, given=response.body) | |
498 | |
499 def test_api_get_repo(self): | |
500 new_group = 'some_new_group' | |
501 make_users_group(new_group) | |
502 RepoModel().grant_users_group_permission(repo=self.REPO, | |
503 group_name=new_group, | |
504 perm='repository.read') | |
2738 | 505 Session().commit() |
2526 | 506 id_, params = _build_data(self.apikey, 'get_repo', |
507 repoid=self.REPO) | |
2738 | 508 response = api_call(self, params) |
2526 | 509 |
510 repo = RepoModel().get_by_repo_name(self.REPO) | |
511 ret = repo.get_api_data() | |
512 | |
513 members = [] | |
514 for user in repo.repo_to_perm: | |
515 perm = user.permission.permission_name | |
516 user = user.user | |
517 user_data = user.get_api_data() | |
518 user_data['type'] = "user" | |
519 user_data['permission'] = perm | |
520 members.append(user_data) | |
521 | |
522 for users_group in repo.users_group_to_perm: | |
523 perm = users_group.permission.permission_name | |
524 users_group = users_group.users_group | |
525 users_group_data = users_group.get_api_data() | |
526 users_group_data['type'] = "users_group" | |
527 users_group_data['permission'] = perm | |
528 members.append(users_group_data) | |
529 | |
530 ret['members'] = members | |
531 | |
532 expected = ret | |
533 self._compare_ok(id_, expected, given=response.body) | |
534 destroy_users_group(new_group) | |
535 | |
3163
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
536 def test_api_get_repo_by_non_admin(self): |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
537 id_, params = _build_data(self.apikey, 'get_repo', |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
538 repoid=self.REPO) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
539 response = api_call(self, params) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
540 |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
541 repo = RepoModel().get_by_repo_name(self.REPO) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
542 ret = repo.get_api_data() |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
543 |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
544 members = [] |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
545 for user in repo.repo_to_perm: |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
546 perm = user.permission.permission_name |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
547 user = user.user |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
548 user_data = user.get_api_data() |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
549 user_data['type'] = "user" |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
550 user_data['permission'] = perm |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
551 members.append(user_data) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
552 |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
553 for users_group in repo.users_group_to_perm: |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
554 perm = users_group.permission.permission_name |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
555 users_group = users_group.users_group |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
556 users_group_data = users_group.get_api_data() |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
557 users_group_data['type'] = "users_group" |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
558 users_group_data['permission'] = perm |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
559 members.append(users_group_data) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
560 |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
561 ret['members'] = members |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
562 |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
563 expected = ret |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
564 self._compare_ok(id_, expected, given=response.body) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
565 |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
566 def test_api_get_repo_by_non_admin_no_permission_to_repo(self): |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
567 RepoModel().grant_user_permission(repo=self.REPO, |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
568 user=self.TEST_USER_LOGIN, |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
569 perm='repository.none') |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
570 |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
571 id_, params = _build_data(self.apikey_regular, 'get_repo', |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
572 repoid=self.REPO) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
573 response = api_call(self, params) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
574 |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
575 expected = 'repository `%s` does not exist' % (self.REPO) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
576 self._compare_error(id_, expected, given=response.body) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
577 |
2526 | 578 def test_api_get_repo_that_doesn_not_exist(self): |
579 id_, params = _build_data(self.apikey, 'get_repo', | |
580 repoid='no-such-repo') | |
2738 | 581 response = api_call(self, params) |
2526 | 582 |
583 ret = 'repository `%s` does not exist' % 'no-such-repo' | |
584 expected = ret | |
585 self._compare_error(id_, expected, given=response.body) | |
586 | |
587 def test_api_get_repos(self): | |
588 id_, params = _build_data(self.apikey, 'get_repos') | |
2738 | 589 response = api_call(self, params) |
2526 | 590 |
591 result = [] | |
592 for repo in RepoModel().get_all(): | |
593 result.append(repo.get_api_data()) | |
594 ret = jsonify(result) | |
595 | |
596 expected = ret | |
597 self._compare_ok(id_, expected, given=response.body) | |
598 | |
3163
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
599 def test_api_get_repos_non_admin(self): |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
600 id_, params = _build_data(self.apikey_regular, 'get_repos') |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
601 response = api_call(self, params) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
602 |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
603 result = [] |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
604 for repo in RepoModel().get_all_user_repos(self.TEST_USER_LOGIN): |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
605 result.append(repo.get_api_data()) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
606 ret = jsonify(result) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
607 |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
608 expected = ret |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
609 self._compare_ok(id_, expected, given=response.body) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
610 |
2526 | 611 @parameterized.expand([('all', 'all'), |
612 ('dirs', 'dirs'), | |
613 ('files', 'files'), ]) | |
614 def test_api_get_repo_nodes(self, name, ret_type): | |
615 rev = 'tip' | |
616 path = '/' | |
617 id_, params = _build_data(self.apikey, 'get_repo_nodes', | |
618 repoid=self.REPO, revision=rev, | |
619 root_path=path, | |
620 ret_type=ret_type) | |
2738 | 621 response = api_call(self, params) |
2526 | 622 |
623 # we don't the actual return types here since it's tested somewhere | |
624 # else | |
625 expected = json.loads(response.body)['result'] | |
626 self._compare_ok(id_, expected, given=response.body) | |
627 | |
628 def test_api_get_repo_nodes_bad_revisions(self): | |
629 rev = 'i-dont-exist' | |
630 path = '/' | |
631 id_, params = _build_data(self.apikey, 'get_repo_nodes', | |
632 repoid=self.REPO, revision=rev, | |
633 root_path=path,) | |
2738 | 634 response = api_call(self, params) |
2526 | 635 |
636 expected = 'failed to get repo: `%s` nodes' % self.REPO | |
637 self._compare_error(id_, expected, given=response.body) | |
638 | |
639 def test_api_get_repo_nodes_bad_path(self): | |
640 rev = 'tip' | |
641 path = '/idontexits' | |
642 id_, params = _build_data(self.apikey, 'get_repo_nodes', | |
643 repoid=self.REPO, revision=rev, | |
644 root_path=path,) | |
2738 | 645 response = api_call(self, params) |
2526 | 646 |
647 expected = 'failed to get repo: `%s` nodes' % self.REPO | |
648 self._compare_error(id_, expected, given=response.body) | |
649 | |
650 def test_api_get_repo_nodes_bad_ret_type(self): | |
651 rev = 'tip' | |
652 path = '/' | |
653 ret_type = 'error' | |
654 id_, params = _build_data(self.apikey, 'get_repo_nodes', | |
655 repoid=self.REPO, revision=rev, | |
656 root_path=path, | |
657 ret_type=ret_type) | |
2738 | 658 response = api_call(self, params) |
2526 | 659 |
660 expected = 'ret_type must be one of %s' % (['files', 'dirs', 'all']) | |
661 self._compare_error(id_, expected, given=response.body) | |
662 | |
663 def test_api_create_repo(self): | |
664 repo_name = 'api-repo' | |
665 id_, params = _build_data(self.apikey, 'create_repo', | |
666 repo_name=repo_name, | |
667 owner=TEST_USER_ADMIN_LOGIN, | |
668 repo_type='hg', | |
669 ) | |
2738 | 670 response = api_call(self, params) |
2526 | 671 |
672 repo = RepoModel().get_by_repo_name(repo_name) | |
673 ret = { | |
674 'msg': 'Created new repository `%s`' % repo_name, | |
675 'repo': jsonify(repo.get_api_data()) | |
676 } | |
677 expected = ret | |
678 self._compare_ok(id_, expected, given=response.body) | |
679 destroy_repo(repo_name) | |
680 | |
681 def test_api_create_repo_unknown_owner(self): | |
682 repo_name = 'api-repo' | |
683 owner = 'i-dont-exist' | |
684 id_, params = _build_data(self.apikey, 'create_repo', | |
685 repo_name=repo_name, | |
686 owner=owner, | |
687 repo_type='hg', | |
688 ) | |
2738 | 689 response = api_call(self, params) |
2526 | 690 expected = 'user `%s` does not exist' % owner |
691 self._compare_error(id_, expected, given=response.body) | |
692 | |
3163
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
693 def test_api_create_repo_dont_specify_owner(self): |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
694 repo_name = 'api-repo' |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
695 owner = 'i-dont-exist' |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
696 id_, params = _build_data(self.apikey, 'create_repo', |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
697 repo_name=repo_name, |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
698 repo_type='hg', |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
699 ) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
700 response = api_call(self, params) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
701 |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
702 repo = RepoModel().get_by_repo_name(repo_name) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
703 ret = { |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
704 'msg': 'Created new repository `%s`' % repo_name, |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
705 'repo': jsonify(repo.get_api_data()) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
706 } |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
707 expected = ret |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
708 self._compare_ok(id_, expected, given=response.body) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
709 destroy_repo(repo_name) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
710 |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
711 def test_api_create_repo_by_non_admin(self): |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
712 repo_name = 'api-repo' |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
713 owner = 'i-dont-exist' |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
714 id_, params = _build_data(self.apikey_regular, 'create_repo', |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
715 repo_name=repo_name, |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
716 repo_type='hg', |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
717 ) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
718 response = api_call(self, params) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
719 |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
720 repo = RepoModel().get_by_repo_name(repo_name) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
721 ret = { |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
722 'msg': 'Created new repository `%s`' % repo_name, |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
723 'repo': jsonify(repo.get_api_data()) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
724 } |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
725 expected = ret |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
726 self._compare_ok(id_, expected, given=response.body) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
727 destroy_repo(repo_name) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
728 |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
729 def test_api_create_repo_by_non_admin_specify_owner(self): |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
730 repo_name = 'api-repo' |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
731 owner = 'i-dont-exist' |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
732 id_, params = _build_data(self.apikey_regular, 'create_repo', |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
733 repo_name=repo_name, |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
734 repo_type='hg', |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
735 owner=owner |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
736 ) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
737 response = api_call(self, params) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
738 |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
739 expected = 'Only RhodeCode admin can specify `owner` param' |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
740 self._compare_error(id_, expected, given=response.body) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
741 destroy_repo(repo_name) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
742 |
2526 | 743 def test_api_create_repo_exists(self): |
744 repo_name = self.REPO | |
745 id_, params = _build_data(self.apikey, 'create_repo', | |
746 repo_name=repo_name, | |
747 owner=TEST_USER_ADMIN_LOGIN, | |
748 repo_type='hg', | |
749 ) | |
2738 | 750 response = api_call(self, params) |
2526 | 751 expected = "repo `%s` already exist" % repo_name |
752 self._compare_error(id_, expected, given=response.body) | |
753 | |
754 @mock.patch.object(RepoModel, 'create_repo', crash) | |
755 def test_api_create_repo_exception_occurred(self): | |
756 repo_name = 'api-repo' | |
757 id_, params = _build_data(self.apikey, 'create_repo', | |
758 repo_name=repo_name, | |
759 owner=TEST_USER_ADMIN_LOGIN, | |
760 repo_type='hg', | |
761 ) | |
2738 | 762 response = api_call(self, params) |
2526 | 763 expected = 'failed to create repository `%s`' % repo_name |
764 self._compare_error(id_, expected, given=response.body) | |
765 | |
766 def test_api_delete_repo(self): | |
767 repo_name = 'api_delete_me' | |
768 create_repo(repo_name, self.REPO_TYPE) | |
769 | |
770 id_, params = _build_data(self.apikey, 'delete_repo', | |
771 repoid=repo_name,) | |
2738 | 772 response = api_call(self, params) |
2526 | 773 |
774 ret = { | |
775 'msg': 'Deleted repository `%s`' % repo_name, | |
776 'success': True | |
777 } | |
778 expected = ret | |
779 self._compare_ok(id_, expected, given=response.body) | |
780 | |
3163
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
781 def test_api_delete_repo_by_non_admin(self): |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
782 repo_name = 'api_delete_me' |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
783 create_repo(repo_name, self.REPO_TYPE, owner=self.TEST_USER_LOGIN) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
784 try: |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
785 id_, params = _build_data(self.apikey_regular, 'delete_repo', |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
786 repoid=repo_name,) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
787 response = api_call(self, params) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
788 |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
789 ret = { |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
790 'msg': 'Deleted repository `%s`' % repo_name, |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
791 'success': True |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
792 } |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
793 expected = ret |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
794 self._compare_ok(id_, expected, given=response.body) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
795 finally: |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
796 destroy_repo(repo_name) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
797 |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
798 def test_api_delete_repo_by_non_admin_no_permission(self): |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
799 repo_name = 'api_delete_me' |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
800 create_repo(repo_name, self.REPO_TYPE) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
801 try: |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
802 id_, params = _build_data(self.apikey_regular, 'delete_repo', |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
803 repoid=repo_name,) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
804 response = api_call(self, params) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
805 expected = 'repository `%s` does not exist' % (repo_name) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
806 self._compare_error(id_, expected, given=response.body) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
807 finally: |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
808 destroy_repo(repo_name) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
809 |
2526 | 810 def test_api_delete_repo_exception_occurred(self): |
811 repo_name = 'api_delete_me' | |
812 create_repo(repo_name, self.REPO_TYPE) | |
2653
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
813 try: |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
814 with mock.patch.object(RepoModel, 'delete', crash): |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
815 id_, params = _build_data(self.apikey, 'delete_repo', |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
816 repoid=repo_name,) |
2738 | 817 response = api_call(self, params) |
2653
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
818 |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
819 expected = 'failed to delete repository `%s`' % repo_name |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
820 self._compare_error(id_, expected, given=response.body) |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
821 finally: |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
822 destroy_repo(repo_name) |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
823 |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
824 def test_api_fork_repo(self): |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
825 fork_name = 'api-repo-fork' |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
826 id_, params = _build_data(self.apikey, 'fork_repo', |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
827 repoid=self.REPO, |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
828 fork_name=fork_name, |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
829 owner=TEST_USER_ADMIN_LOGIN, |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
830 ) |
2738 | 831 response = api_call(self, params) |
2653
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
832 |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
833 ret = { |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
834 'msg': 'Created fork of `%s` as `%s`' % (self.REPO, |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
835 fork_name), |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
836 'success': True |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
837 } |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
838 expected = ret |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
839 self._compare_ok(id_, expected, given=response.body) |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
840 destroy_repo(fork_name) |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
841 |
3163
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
842 def test_api_fork_repo_non_admin(self): |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
843 fork_name = 'api-repo-fork' |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
844 id_, params = _build_data(self.apikey_regular, 'fork_repo', |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
845 repoid=self.REPO, |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
846 fork_name=fork_name, |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
847 ) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
848 response = api_call(self, params) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
849 |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
850 ret = { |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
851 'msg': 'Created fork of `%s` as `%s`' % (self.REPO, |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
852 fork_name), |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
853 'success': True |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
854 } |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
855 expected = ret |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
856 self._compare_ok(id_, expected, given=response.body) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
857 destroy_repo(fork_name) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
858 |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
859 def test_api_fork_repo_non_admin_specify_owner(self): |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
860 fork_name = 'api-repo-fork' |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
861 id_, params = _build_data(self.apikey_regular, 'fork_repo', |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
862 repoid=self.REPO, |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
863 fork_name=fork_name, |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
864 owner=TEST_USER_ADMIN_LOGIN, |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
865 ) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
866 response = api_call(self, params) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
867 expected = 'Only RhodeCode admin can specify `owner` param' |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
868 self._compare_error(id_, expected, given=response.body) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
869 destroy_repo(fork_name) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
870 |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
871 def test_api_fork_repo_non_admin_no_permission_to_fork(self): |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
872 RepoModel().grant_user_permission(repo=self.REPO, |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
873 user=self.TEST_USER_LOGIN, |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
874 perm='repository.none') |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
875 fork_name = 'api-repo-fork' |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
876 id_, params = _build_data(self.apikey_regular, 'fork_repo', |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
877 repoid=self.REPO, |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
878 fork_name=fork_name, |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
879 ) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
880 response = api_call(self, params) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
881 expected = 'repository `%s` does not exist' % (self.REPO) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
882 self._compare_error(id_, expected, given=response.body) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
883 destroy_repo(fork_name) |
28571535dd61
API methods create_repo, fork_repo, delete_repo, get_repo, get_repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3161
diff
changeset
|
884 |
2653
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
885 def test_api_fork_repo_unknown_owner(self): |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
886 fork_name = 'api-repo-fork' |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
887 owner = 'i-dont-exist' |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
888 id_, params = _build_data(self.apikey, 'fork_repo', |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
889 repoid=self.REPO, |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
890 fork_name=fork_name, |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
891 owner=owner, |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
892 ) |
2738 | 893 response = api_call(self, params) |
2653
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
894 expected = 'user `%s` does not exist' % owner |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
895 self._compare_error(id_, expected, given=response.body) |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
896 |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
897 def test_api_fork_repo_fork_exists(self): |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
898 fork_name = 'api-repo-fork' |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
899 create_fork(fork_name, self.REPO_TYPE, self.REPO) |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
900 |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
901 try: |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
902 fork_name = 'api-repo-fork' |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
903 |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
904 id_, params = _build_data(self.apikey, 'fork_repo', |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
905 repoid=self.REPO, |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
906 fork_name=fork_name, |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
907 owner=TEST_USER_ADMIN_LOGIN, |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
908 ) |
2738 | 909 response = api_call(self, params) |
2526 | 910 |
2653
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
911 expected = "fork `%s` already exist" % fork_name |
2526 | 912 self._compare_error(id_, expected, given=response.body) |
2653
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
913 finally: |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
914 destroy_repo(fork_name) |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
915 |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
916 def test_api_fork_repo_repo_exists(self): |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
917 fork_name = self.REPO |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
918 |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
919 id_, params = _build_data(self.apikey, 'fork_repo', |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
920 repoid=self.REPO, |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
921 fork_name=fork_name, |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
922 owner=TEST_USER_ADMIN_LOGIN, |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
923 ) |
2738 | 924 response = api_call(self, params) |
2526 | 925 |
2653
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
926 expected = "repo `%s` already exist" % fork_name |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
927 self._compare_error(id_, expected, given=response.body) |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
928 |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
929 @mock.patch.object(RepoModel, 'create_fork', crash) |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
930 def test_api_fork_repo_exception_occurred(self): |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
931 fork_name = 'api-repo-fork' |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
932 id_, params = _build_data(self.apikey, 'fork_repo', |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
933 repoid=self.REPO, |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
934 fork_name=fork_name, |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
935 owner=TEST_USER_ADMIN_LOGIN, |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
936 ) |
2738 | 937 response = api_call(self, params) |
2653
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
938 |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
939 expected = 'failed to fork repository `%s` as `%s`' % (self.REPO, |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
940 fork_name) |
8be70a4d72c7
Implemented #354 added forking option to API
Marcin Kuzminski <marcin@python-works.com>
parents:
2529
diff
changeset
|
941 self._compare_error(id_, expected, given=response.body) |
2526 | 942 |
943 def test_api_get_users_group(self): | |
944 id_, params = _build_data(self.apikey, 'get_users_group', | |
945 usersgroupid=TEST_USERS_GROUP) | |
2738 | 946 response = api_call(self, params) |
2526 | 947 |
948 users_group = UsersGroupModel().get_group(TEST_USERS_GROUP) | |
949 members = [] | |
950 for user in users_group.members: | |
951 user = user.user | |
952 members.append(user.get_api_data()) | |
953 | |
954 ret = users_group.get_api_data() | |
955 ret['members'] = members | |
956 expected = ret | |
957 self._compare_ok(id_, expected, given=response.body) | |
958 | |
959 def test_api_get_users_groups(self): | |
960 | |
961 make_users_group('test_users_group2') | |
962 | |
963 id_, params = _build_data(self.apikey, 'get_users_groups',) | |
2738 | 964 response = api_call(self, params) |
2526 | 965 |
966 expected = [] | |
967 for gr_name in [TEST_USERS_GROUP, 'test_users_group2']: | |
968 users_group = UsersGroupModel().get_group(gr_name) | |
969 ret = users_group.get_api_data() | |
970 expected.append(ret) | |
971 self._compare_ok(id_, expected, given=response.body) | |
972 | |
973 UsersGroupModel().delete(users_group='test_users_group2') | |
2738 | 974 Session().commit() |
2526 | 975 |
976 def test_api_create_users_group(self): | |
977 group_name = 'some_new_group' | |
978 id_, params = _build_data(self.apikey, 'create_users_group', | |
979 group_name=group_name) | |
2738 | 980 response = api_call(self, params) |
2526 | 981 |
982 ret = { | |
983 'msg': 'created new users group `%s`' % group_name, | |
984 'users_group': jsonify(UsersGroupModel()\ | |
985 .get_by_name(group_name)\ | |
986 .get_api_data()) | |
987 } | |
988 expected = ret | |
989 self._compare_ok(id_, expected, given=response.body) | |
990 | |
991 destroy_users_group(group_name) | |
992 | |
993 def test_api_get_users_group_that_exist(self): | |
994 id_, params = _build_data(self.apikey, 'create_users_group', | |
995 group_name=TEST_USERS_GROUP) | |
2738 | 996 response = api_call(self, params) |
2526 | 997 |
998 expected = "users group `%s` already exist" % TEST_USERS_GROUP | |
999 self._compare_error(id_, expected, given=response.body) | |
1000 | |
1001 @mock.patch.object(UsersGroupModel, 'create', crash) | |
1002 def test_api_get_users_group_exception_occurred(self): | |
1003 group_name = 'exception_happens' | |
1004 id_, params = _build_data(self.apikey, 'create_users_group', | |
1005 group_name=group_name) | |
2738 | 1006 response = api_call(self, params) |
2526 | 1007 |
1008 expected = 'failed to create group `%s`' % group_name | |
1009 self._compare_error(id_, expected, given=response.body) | |
1010 | |
1011 def test_api_add_user_to_users_group(self): | |
1012 gr_name = 'test_group' | |
1013 UsersGroupModel().create(gr_name) | |
2738 | 1014 Session().commit() |
2526 | 1015 id_, params = _build_data(self.apikey, 'add_user_to_users_group', |
1016 usersgroupid=gr_name, | |
1017 userid=TEST_USER_ADMIN_LOGIN) | |
2738 | 1018 response = api_call(self, params) |
2526 | 1019 |
1020 expected = { | |
1021 'msg': 'added member `%s` to users group `%s`' % ( | |
1022 TEST_USER_ADMIN_LOGIN, gr_name | |
1023 ), | |
1024 'success': True} | |
1025 self._compare_ok(id_, expected, given=response.body) | |
1026 | |
1027 UsersGroupModel().delete(users_group=gr_name) | |
2738 | 1028 Session().commit() |
2526 | 1029 |
1030 def test_api_add_user_to_users_group_that_doesnt_exist(self): | |
1031 id_, params = _build_data(self.apikey, 'add_user_to_users_group', | |
1032 usersgroupid='false-group', | |
1033 userid=TEST_USER_ADMIN_LOGIN) | |
2738 | 1034 response = api_call(self, params) |
2526 | 1035 |
1036 expected = 'users group `%s` does not exist' % 'false-group' | |
1037 self._compare_error(id_, expected, given=response.body) | |
1038 | |
1039 @mock.patch.object(UsersGroupModel, 'add_user_to_group', crash) | |
1040 def test_api_add_user_to_users_group_exception_occurred(self): | |
1041 gr_name = 'test_group' | |
1042 UsersGroupModel().create(gr_name) | |
2738 | 1043 Session().commit() |
2526 | 1044 id_, params = _build_data(self.apikey, 'add_user_to_users_group', |
1045 usersgroupid=gr_name, | |
1046 userid=TEST_USER_ADMIN_LOGIN) | |
2738 | 1047 response = api_call(self, params) |
2526 | 1048 |
1049 expected = 'failed to add member to users group `%s`' % gr_name | |
1050 self._compare_error(id_, expected, given=response.body) | |
1051 | |
1052 UsersGroupModel().delete(users_group=gr_name) | |
2738 | 1053 Session().commit() |
2526 | 1054 |
1055 def test_api_remove_user_from_users_group(self): | |
1056 gr_name = 'test_group_3' | |
1057 gr = UsersGroupModel().create(gr_name) | |
1058 UsersGroupModel().add_user_to_group(gr, user=TEST_USER_ADMIN_LOGIN) | |
2738 | 1059 Session().commit() |
2526 | 1060 id_, params = _build_data(self.apikey, 'remove_user_from_users_group', |
1061 usersgroupid=gr_name, | |
1062 userid=TEST_USER_ADMIN_LOGIN) | |
2738 | 1063 response = api_call(self, params) |
2526 | 1064 |
1065 expected = { | |
1066 'msg': 'removed member `%s` from users group `%s`' % ( | |
1067 TEST_USER_ADMIN_LOGIN, gr_name | |
1068 ), | |
1069 'success': True} | |
1070 self._compare_ok(id_, expected, given=response.body) | |
1071 | |
1072 UsersGroupModel().delete(users_group=gr_name) | |
2738 | 1073 Session().commit() |
2526 | 1074 |
1075 @mock.patch.object(UsersGroupModel, 'remove_user_from_group', crash) | |
1076 def test_api_remove_user_from_users_group_exception_occurred(self): | |
1077 gr_name = 'test_group_3' | |
1078 gr = UsersGroupModel().create(gr_name) | |
1079 UsersGroupModel().add_user_to_group(gr, user=TEST_USER_ADMIN_LOGIN) | |
2738 | 1080 Session().commit() |
2526 | 1081 id_, params = _build_data(self.apikey, 'remove_user_from_users_group', |
1082 usersgroupid=gr_name, | |
1083 userid=TEST_USER_ADMIN_LOGIN) | |
2738 | 1084 response = api_call(self, params) |
2526 | 1085 |
1086 expected = 'failed to remove member from users group `%s`' % gr_name | |
1087 self._compare_error(id_, expected, given=response.body) | |
1088 | |
1089 UsersGroupModel().delete(users_group=gr_name) | |
2738 | 1090 Session().commit() |
2526 | 1091 |
1092 @parameterized.expand([('none', 'repository.none'), | |
1093 ('read', 'repository.read'), | |
1094 ('write', 'repository.write'), | |
1095 ('admin', 'repository.admin')]) | |
1096 def test_api_grant_user_permission(self, name, perm): | |
1097 id_, params = _build_data(self.apikey, 'grant_user_permission', | |
1098 repoid=self.REPO, | |
1099 userid=TEST_USER_ADMIN_LOGIN, | |
1100 perm=perm) | |
2738 | 1101 response = api_call(self, params) |
2526 | 1102 |
1103 ret = { | |
1104 'msg': 'Granted perm: `%s` for user: `%s` in repo: `%s`' % ( | |
1105 perm, TEST_USER_ADMIN_LOGIN, self.REPO | |
1106 ), | |
1107 'success': True | |
1108 } | |
1109 expected = ret | |
1110 self._compare_ok(id_, expected, given=response.body) | |
1111 | |
1112 def test_api_grant_user_permission_wrong_permission(self): | |
1113 perm = 'haha.no.permission' | |
1114 id_, params = _build_data(self.apikey, 'grant_user_permission', | |
1115 repoid=self.REPO, | |
1116 userid=TEST_USER_ADMIN_LOGIN, | |
1117 perm=perm) | |
2738 | 1118 response = api_call(self, params) |
2526 | 1119 |
1120 expected = 'permission `%s` does not exist' % perm | |
1121 self._compare_error(id_, expected, given=response.body) | |
1122 | |
1123 @mock.patch.object(RepoModel, 'grant_user_permission', crash) | |
1124 def test_api_grant_user_permission_exception_when_adding(self): | |
1125 perm = 'repository.read' | |
1126 id_, params = _build_data(self.apikey, 'grant_user_permission', | |
1127 repoid=self.REPO, | |
1128 userid=TEST_USER_ADMIN_LOGIN, | |
1129 perm=perm) | |
2738 | 1130 response = api_call(self, params) |
2526 | 1131 |
1132 expected = 'failed to edit permission for user: `%s` in repo: `%s`' % ( | |
1133 TEST_USER_ADMIN_LOGIN, self.REPO | |
1134 ) | |
1135 self._compare_error(id_, expected, given=response.body) | |
1136 | |
1137 def test_api_revoke_user_permission(self): | |
1138 id_, params = _build_data(self.apikey, 'revoke_user_permission', | |
1139 repoid=self.REPO, | |
1140 userid=TEST_USER_ADMIN_LOGIN,) | |
2738 | 1141 response = api_call(self, params) |
2526 | 1142 |
1143 expected = { | |
1144 'msg': 'Revoked perm for user: `%s` in repo: `%s`' % ( | |
1145 TEST_USER_ADMIN_LOGIN, self.REPO | |
1146 ), | |
1147 'success': True | |
1148 } | |
1149 self._compare_ok(id_, expected, given=response.body) | |
1150 | |
1151 @mock.patch.object(RepoModel, 'revoke_user_permission', crash) | |
1152 def test_api_revoke_user_permission_exception_when_adding(self): | |
1153 id_, params = _build_data(self.apikey, 'revoke_user_permission', | |
1154 repoid=self.REPO, | |
1155 userid=TEST_USER_ADMIN_LOGIN,) | |
2738 | 1156 response = api_call(self, params) |
2526 | 1157 |
1158 expected = 'failed to edit permission for user: `%s` in repo: `%s`' % ( | |
1159 TEST_USER_ADMIN_LOGIN, self.REPO | |
1160 ) | |
1161 self._compare_error(id_, expected, given=response.body) | |
1162 | |
1163 @parameterized.expand([('none', 'repository.none'), | |
1164 ('read', 'repository.read'), | |
1165 ('write', 'repository.write'), | |
1166 ('admin', 'repository.admin')]) | |
1167 def test_api_grant_users_group_permission(self, name, perm): | |
1168 id_, params = _build_data(self.apikey, 'grant_users_group_permission', | |
1169 repoid=self.REPO, | |
1170 usersgroupid=TEST_USERS_GROUP, | |
1171 perm=perm) | |
2738 | 1172 response = api_call(self, params) |
2526 | 1173 |
1174 ret = { | |
1175 'msg': 'Granted perm: `%s` for users group: `%s` in repo: `%s`' % ( | |
1176 perm, TEST_USERS_GROUP, self.REPO | |
1177 ), | |
1178 'success': True | |
1179 } | |
1180 expected = ret | |
1181 self._compare_ok(id_, expected, given=response.body) | |
1182 | |
1183 def test_api_grant_users_group_permission_wrong_permission(self): | |
1184 perm = 'haha.no.permission' | |
1185 id_, params = _build_data(self.apikey, 'grant_users_group_permission', | |
1186 repoid=self.REPO, | |
1187 usersgroupid=TEST_USERS_GROUP, | |
1188 perm=perm) | |
2738 | 1189 response = api_call(self, params) |
2526 | 1190 |
1191 expected = 'permission `%s` does not exist' % perm | |
1192 self._compare_error(id_, expected, given=response.body) | |
1193 | |
1194 @mock.patch.object(RepoModel, 'grant_users_group_permission', crash) | |
1195 def test_api_grant_users_group_permission_exception_when_adding(self): | |
1196 perm = 'repository.read' | |
1197 id_, params = _build_data(self.apikey, 'grant_users_group_permission', | |
1198 repoid=self.REPO, | |
1199 usersgroupid=TEST_USERS_GROUP, | |
1200 perm=perm) | |
2738 | 1201 response = api_call(self, params) |
2526 | 1202 |
1203 expected = 'failed to edit permission for users group: `%s` in repo: `%s`' % ( | |
1204 TEST_USERS_GROUP, self.REPO | |
1205 ) | |
1206 self._compare_error(id_, expected, given=response.body) | |
1207 | |
1208 def test_api_revoke_users_group_permission(self): | |
1209 RepoModel().grant_users_group_permission(repo=self.REPO, | |
1210 group_name=TEST_USERS_GROUP, | |
1211 perm='repository.read') | |
2738 | 1212 Session().commit() |
2526 | 1213 id_, params = _build_data(self.apikey, 'revoke_users_group_permission', |
1214 repoid=self.REPO, | |
1215 usersgroupid=TEST_USERS_GROUP,) | |
2738 | 1216 response = api_call(self, params) |
2526 | 1217 |
1218 expected = { | |
1219 'msg': 'Revoked perm for users group: `%s` in repo: `%s`' % ( | |
1220 TEST_USERS_GROUP, self.REPO | |
1221 ), | |
1222 'success': True | |
1223 } | |
1224 self._compare_ok(id_, expected, given=response.body) | |
1225 | |
1226 @mock.patch.object(RepoModel, 'revoke_users_group_permission', crash) | |
1227 def test_api_revoke_users_group_permission_exception_when_adding(self): | |
1228 | |
1229 id_, params = _build_data(self.apikey, 'revoke_users_group_permission', | |
1230 repoid=self.REPO, | |
1231 usersgroupid=TEST_USERS_GROUP,) | |
2738 | 1232 response = api_call(self, params) |
2526 | 1233 |
1234 expected = 'failed to edit permission for users group: `%s` in repo: `%s`' % ( | |
1235 TEST_USERS_GROUP, self.REPO | |
1236 ) | |
1237 self._compare_error(id_, expected, given=response.body) |