Mercurial > kallithea
view rhodecode/tests/models/test_user_permissions_on_groups.py @ 3733:af049a957506 beta
fixed default permissions population during upgrades
- it often happen that introducing new permission
caused default permission to reset it's state to installation
default.
new version makes sure that only missing permissions are
created while leaving old defaults
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Wed, 10 Apr 2013 02:55:21 +0200 |
parents | dd0ee9119aa9 |
children | f5270697be3e |
line wrap: on
line source
import os import unittest import functools from rhodecode.tests import * from rhodecode.model.repos_group import ReposGroupModel from rhodecode.model.db import RepoGroup, Repository, User from rhodecode.model.meta import Session from nose.tools import with_setup from rhodecode.tests.models.common import _create_project_tree, check_tree_perms, \ _get_perms, _check_expected_count, expected_count, _destroy_project_tree from rhodecode.model.repo import RepoModel test_u1_id = None _get_repo_perms = None _get_group_perms = None def permissions_setup_func(group_name='g0', perm='group.read', recursive=True): """ Resets all permissions to perm attribute """ repos_group = RepoGroup.get_by_group_name(group_name=group_name) if not repos_group: raise Exception('Cannot get group %s' % group_name) perms_updates = [[test_u1_id, perm, 'user']] ReposGroupModel()._update_permissions(repos_group, perms_updates=perms_updates, recursive=recursive) Session().commit() def setup_module(): global test_u1_id, _get_repo_perms, _get_group_perms test_u1 = _create_project_tree() Session().commit() test_u1_id = test_u1.user_id _get_repo_perms = functools.partial(_get_perms, key='repositories', test_u1_id=test_u1_id) _get_group_perms = functools.partial(_get_perms, key='repositories_groups', test_u1_id=test_u1_id) def teardown_module(): _destroy_project_tree(test_u1_id) @with_setup(permissions_setup_func) def test_user_permissions_on_group_without_recursive_mode(): # set permission to g0 non-recursive mode recursive = False group = 'g0' permissions_setup_func(group, 'group.write', recursive=recursive) items = [x for x in _get_repo_perms(group, recursive)] expected = 0 assert len(items) == expected, ' %s != %s' % (len(items), expected) for name, perm in items: yield check_tree_perms, name, perm, group, 'repository.read' items = [x for x in _get_group_perms(group, recursive)] expected = 1 assert len(items) == expected, ' %s != %s' % (len(items), expected) for name, perm in items: yield check_tree_perms, name, perm, group, 'group.write' @with_setup(permissions_setup_func) def test_user_permissions_on_group_without_recursive_mode_subgroup(): # set permission to g0 non-recursive mode recursive = False group = 'g0/g0_1' permissions_setup_func(group, 'group.write', recursive=recursive) items = [x for x in _get_repo_perms(group, recursive)] expected = 0 assert len(items) == expected, ' %s != %s' % (len(items), expected) for name, perm in items: yield check_tree_perms, name, perm, group, 'repository.read' items = [x for x in _get_group_perms(group, recursive)] expected = 1 assert len(items) == expected, ' %s != %s' % (len(items), expected) for name, perm in items: yield check_tree_perms, name, perm, group, 'group.write' @with_setup(permissions_setup_func) def test_user_permissions_on_group_with_recursive_mode(): # set permission to g0 recursive mode, all children including # other repos and groups should have this permission now set ! recursive = True group = 'g0' permissions_setup_func(group, 'group.write', recursive=recursive) repo_items = [x for x in _get_repo_perms(group, recursive)] items = [x for x in _get_group_perms(group, recursive)] _check_expected_count(items, repo_items, expected_count(group, True)) for name, perm in repo_items: if name == 'g0/g0_3/g0_3_r1_private': yield check_tree_perms, name, perm, group, 'repository.none' else: yield check_tree_perms, name, perm, group, 'repository.write' for name, perm in items: yield check_tree_perms, name, perm, group, 'group.write' @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 group = 'g0/g0_3' permissions_setup_func(group, 'group.none', recursive=recursive) repo_items = [x for x in _get_repo_perms(group, recursive)] items = [x for x in _get_group_perms(group, recursive)] _check_expected_count(items, repo_items, expected_count(group, True)) for name, perm in repo_items: yield check_tree_perms, name, perm, group, 'repository.none' for name, perm in items: yield check_tree_perms, name, perm, group, 'group.none' @with_setup(permissions_setup_func) def test_user_permissions_on_group_with_recursive_mode_deepest(): ## set permission to g0_3 group to none recursive = True group = 'g0/g0_1/g0_1_1' permissions_setup_func(group, 'group.write', recursive=recursive) repo_items = [x for x in _get_repo_perms(group, recursive)] items = [x for x in _get_group_perms(group, recursive)] _check_expected_count(items, repo_items, expected_count(group, True)) for name, perm in repo_items: yield check_tree_perms, name, perm, group, 'repository.write' for name, perm in items: yield check_tree_perms, name, perm, group, 'group.write' @with_setup(permissions_setup_func) def test_user_permissions_on_group_with_recursive_mode_only_with_repos(): ## set permission to g0_3 group to none recursive = True group = 'g0/g0_2' permissions_setup_func(group, 'group.admin', recursive=recursive) repo_items = [x for x in _get_repo_perms(group, recursive)] items = [x for x in _get_group_perms(group, recursive)] _check_expected_count(items, repo_items, expected_count(group, True)) for name, perm in repo_items: yield check_tree_perms, name, perm, group, 'repository.admin' for name, perm in items: yield check_tree_perms, name, perm, group, 'group.admin'