changeset 3219:42d7ca49d073 beta

added test for setting repo as private which should set perm => None for default user
author Marcin Kuzminski <marcin@python-works.com>
date Thu, 24 Jan 2013 22:41:53 +0100
parents c0b0351233ec
children 9e76876a0690
files rhodecode/model/validators.py rhodecode/tests/__init__.py rhodecode/tests/functional/test_admin_repos.py rhodecode/tests/functional/test_settings.py rhodecode/tests/models/test_users_group_permissions_on_groups.py
diffstat 5 files changed, 62 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/model/validators.py	Thu Jan 24 01:20:03 2013 +0100
+++ b/rhodecode/model/validators.py	Thu Jan 24 22:41:53 2013 +0100
@@ -538,6 +538,9 @@
                             # private repo
                             v = EMPTY_PERM
                     perms_update.add((member, v, t))
+            #always set NONE when private flag is set
+            if value.get('repo_private'):
+                perms_update.add(('default', EMPTY_PERM, 'user'))
 
             value['perms_updates'] = list(perms_update)
             value['perms_new'] = list(perms_new)
--- a/rhodecode/tests/__init__.py	Thu Jan 24 01:20:03 2013 +0100
+++ b/rhodecode/tests/__init__.py	Thu Jan 24 22:41:53 2013 +0100
@@ -157,7 +157,8 @@
         return User.get_by_username(self._logged_username)
 
     def checkSessionFlash(self, response, msg):
-        self.assertTrue('flash' in response.session)
+        self.assertTrue('flash' in response.session,
+                        msg='Response session:%r have no flash' % response.session)
         if not msg in response.session['flash'][0][1]:
             self.fail(
                 'msg `%s` not found in session flash: got `%s` instead' % (
--- a/rhodecode/tests/functional/test_admin_repos.py	Thu Jan 24 01:20:03 2013 +0100
+++ b/rhodecode/tests/functional/test_admin_repos.py	Thu Jan 24 22:41:53 2013 +0100
@@ -213,7 +213,6 @@
         self.log_user()
         repo_name = 'vcs_test_new_to_delete'
         description = 'description for newly created repo'
-        private = False
         response = self.app.post(url('repos'),
                         _get_repo_create_params(repo_private=False,
                                                 repo_type='hg',
--- a/rhodecode/tests/functional/test_settings.py	Thu Jan 24 01:20:03 2013 +0100
+++ b/rhodecode/tests/functional/test_settings.py	Thu Jan 24 22:41:53 2013 +0100
@@ -1,5 +1,16 @@
-from rhodecode.model.db import Repository
 from rhodecode.tests import *
+from rhodecode.model.db import UserRepoToPerm, Repository, User, Permission
+from rhodecode.model.meta import Session
+
+
+def _get_permission_for_user(user, repo):
+    perm = UserRepoToPerm.query()\
+                .filter(UserRepoToPerm.repository ==
+                        Repository.get_by_repo_name(repo))\
+                .filter(UserRepoToPerm.user == User.get_by_username(user))\
+                .all()
+    return perm
+
 
 class TestSettingsController(TestController):
 
@@ -8,3 +19,43 @@
         response = self.app.get(url(controller='settings', action='index',
                                     repo_name=HG_REPO))
         # Test response...
+
+    def test_set_private_flag_sets_default_to_none(self):
+        self.log_user()
+        #initially repository perm should be read
+        perm = _get_permission_for_user(user='default', repo=HG_REPO)
+        self.assertTrue(len(perm), 1)
+        self.assertEqual(perm[0].permission.permission_name, 'repository.read')
+        self.assertEqual(Repository.get_by_repo_name(HG_REPO).private, False)
+
+        response = self.app.put(url('repo', repo_name=HG_REPO),
+                        _get_repo_create_params(repo_private=1,
+                                                repo_name=HG_REPO,
+                                                user=TEST_USER_ADMIN_LOGIN))
+        self.checkSessionFlash(response,
+                               msg='Repository %s updated successfully' % (HG_REPO))
+        self.assertEqual(Repository.get_by_repo_name(HG_REPO).private, True)
+
+        #now the repo default permission should be None
+        perm = _get_permission_for_user(user='default', repo=HG_REPO)
+        self.assertTrue(len(perm), 1)
+        self.assertEqual(perm[0].permission.permission_name, 'repository.none')
+
+        response = self.app.put(url('repo', repo_name=HG_REPO),
+                        _get_repo_create_params(repo_private=False,
+                                                repo_name=HG_REPO,
+                                                user=TEST_USER_ADMIN_LOGIN))
+        self.checkSessionFlash(response,
+                               msg='Repository %s updated successfully' % (HG_REPO))
+        self.assertEqual(Repository.get_by_repo_name(HG_REPO).private, False)
+
+        #we turn off private now the repo default permission should stay None
+        perm = _get_permission_for_user(user='default', repo=HG_REPO)
+        self.assertTrue(len(perm), 1)
+        self.assertEqual(perm[0].permission.permission_name, 'repository.none')
+
+        #update this permission back
+        perm[0].permission = Permission.get_by_key('repository.read')
+        Session().add(perm[0])
+        Session().commit()
+        
\ No newline at end of file
--- a/rhodecode/tests/models/test_users_group_permissions_on_groups.py	Thu Jan 24 01:20:03 2013 +0100
+++ b/rhodecode/tests/models/test_users_group_permissions_on_groups.py	Thu Jan 24 22:41:53 2013 +0100
@@ -117,6 +117,11 @@
 
 
 @with_setup(permissions_setup_func)
+def test_user_permissions_on_group_with_recursive_mode_and_private_repos():
+    assert 0
+
+
+@with_setup(permissions_setup_func)
 def test_user_permissions_on_group_with_recursive_mode_inner_group():
     ## set permission to g0_3 group to none
     recursive = True