comparison rhodecode/tests/functional/test_admin_repos.py @ 3629:802c94bdfc85 beta

#749 and #516 Removed dupliciting of repo settings for rhodecode admins and repo admins - repo admin now is allowed the same set of operations as the rhodecode admin - single logic for forms/validations/permissions - fixes #805 update external repo via webinterface -
author Marcin Kuzminski <marcin@python-works.com>
date Thu, 28 Mar 2013 02:57:05 +0100
parents a8f2d78d14ea
children 10b4e34841a4
comparison
equal deleted inserted replaced
3628:c734686b3cf2 3629:802c94bdfc85
2 2
3 import os 3 import os
4 import urllib 4 import urllib
5 5
6 from rhodecode.lib import vcs 6 from rhodecode.lib import vcs
7 from rhodecode.model.db import Repository, RepoGroup 7 from rhodecode.model.db import Repository, RepoGroup, UserRepoToPerm, User,\
8 Permission
8 from rhodecode.tests import * 9 from rhodecode.tests import *
9 from rhodecode.model.repos_group import ReposGroupModel 10 from rhodecode.model.repos_group import ReposGroupModel
10 from rhodecode.model.repo import RepoModel 11 from rhodecode.model.repo import RepoModel
12 from rhodecode.model.meta import Session
13
14
15 def _get_permission_for_user(user, repo):
16 perm = UserRepoToPerm.query()\
17 .filter(UserRepoToPerm.repository ==
18 Repository.get_by_repo_name(repo))\
19 .filter(UserRepoToPerm.user == User.get_by_username(user))\
20 .all()
21 return perm
11 22
12 23
13 class TestAdminReposController(TestController): 24 class TestAdminReposController(TestController):
14 25
15 def __make_repo(self): 26 def __make_repo(self):
198 try: 209 try:
199 vcs.get_repo(os.path.join(TESTS_TMP_PATH, repo_name)) 210 vcs.get_repo(os.path.join(TESTS_TMP_PATH, repo_name))
200 except: 211 except:
201 self.fail('no repo %s in filesystem' % repo_name) 212 self.fail('no repo %s in filesystem' % repo_name)
202 213
203 def test_new(self):
204 self.log_user()
205 response = self.app.get(url('new_repo'))
206
207 def test_new_as_xml(self):
208 response = self.app.get(url('formatted_new_repo', format='xml'))
209
210 def test_update(self): 214 def test_update(self):
211 response = self.app.put(url('repo', repo_name=HG_REPO)) 215 response = self.app.put(url('repo', repo_name=HG_REPO))
212 216
213 def test_update_browser_fakeout(self): 217 def test_update_browser_fakeout(self):
214 response = self.app.post(url('repo', repo_name=HG_REPO), 218 response = self.app.post(url('repo', repo_name=HG_REPO),
326 response = self.app.get(url('repo', repo_name=GIT_REPO)) 330 response = self.app.get(url('repo', repo_name=GIT_REPO))
327 331
328 332
329 def test_edit(self): 333 def test_edit(self):
330 response = self.app.get(url('edit_repo', repo_name=HG_REPO)) 334 response = self.app.get(url('edit_repo', repo_name=HG_REPO))
335
336 def test_set_private_flag_sets_default_to_none(self):
337 self.log_user()
338 #initially repository perm should be read
339 perm = _get_permission_for_user(user='default', repo=HG_REPO)
340 self.assertTrue(len(perm), 1)
341 self.assertEqual(perm[0].permission.permission_name, 'repository.read')
342 self.assertEqual(Repository.get_by_repo_name(HG_REPO).private, False)
343
344 response = self.app.put(url('repo', repo_name=HG_REPO),
345 _get_repo_create_params(repo_private=1,
346 repo_name=HG_REPO,
347 user=TEST_USER_ADMIN_LOGIN))
348 self.checkSessionFlash(response,
349 msg='Repository %s updated successfully' % (HG_REPO))
350 self.assertEqual(Repository.get_by_repo_name(HG_REPO).private, True)
351
352 #now the repo default permission should be None
353 perm = _get_permission_for_user(user='default', repo=HG_REPO)
354 self.assertTrue(len(perm), 1)
355 self.assertEqual(perm[0].permission.permission_name, 'repository.none')
356
357 response = self.app.put(url('repo', repo_name=HG_REPO),
358 _get_repo_create_params(repo_private=False,
359 repo_name=HG_REPO,
360 user=TEST_USER_ADMIN_LOGIN))
361 self.checkSessionFlash(response,
362 msg='Repository %s updated successfully' % (HG_REPO))
363 self.assertEqual(Repository.get_by_repo_name(HG_REPO).private, False)
364
365 #we turn off private now the repo default permission should stay None
366 perm = _get_permission_for_user(user='default', repo=HG_REPO)
367 self.assertTrue(len(perm), 1)
368 self.assertEqual(perm[0].permission.permission_name, 'repository.none')
369
370 #update this permission back
371 perm[0].permission = Permission.get_by_key('repository.read')
372 Session().add(perm[0])
373 Session().commit()