comparison rhodecode/tests/models/test_user_group_permissions_on_repo_groups.py @ 4116:ffd45b185016 rhodecode-2.2.5-gpl

Imported some of the GPLv3'd changes from RhodeCode v2.2.5. This imports changes between changesets 21af6c4eab3d and 6177597791c2 in RhodeCode's original repository, including only changes to Python files and HTML. RhodeCode clearly licensed its changes to these files under GPLv3 in their /LICENSE file, which states the following: The Python code and integrated HTML are licensed under the GPLv3 license. (See: https://code.rhodecode.com/rhodecode/files/v2.2.5/LICENSE or http://web.archive.org/web/20140512193334/https://code.rhodecode.com/rhodecode/files/f3b123159901f15426d18e3dc395e8369f70ebe0/LICENSE for an online copy of that LICENSE file) Conservancy reviewed these changes and confirmed that they can be licensed as a whole to the Kallithea project under GPLv3-only. While some of the contents committed herein are clearly licensed GPLv3-or-later, on the whole we must assume the are GPLv3-only, since the statement above from RhodeCode indicates that they intend GPLv3-only as their license, per GPLv3ยง14 and other relevant sections of GPLv3.
author Bradley M. Kuhn <bkuhn@sfconservancy.org>
date Wed, 02 Jul 2014 19:03:13 -0400
parents
children 7e5f8c12a3fc
comparison
equal deleted inserted replaced
4115:8b7294a804a0 4116:ffd45b185016
1 import functools
2 from rhodecode.tests import *
3
4 from rhodecode.model.repo_group import RepoGroupModel
5 from rhodecode.model.db import RepoGroup
6
7 from rhodecode.model.meta import Session
8 from nose.tools import with_setup
9 from rhodecode.tests.models.common import _create_project_tree, check_tree_perms, \
10 _get_perms, _check_expected_count, expected_count, _destroy_project_tree
11 from rhodecode.model.user_group import UserGroupModel
12 from rhodecode.tests.fixture import Fixture
13
14 fixture = Fixture()
15
16 test_u2_id = None
17 test_u2_gr_id = None
18 _get_repo_perms = None
19 _get_group_perms = None
20
21
22 def permissions_setup_func(group_name='g0', perm='group.read', recursive='all'):
23 """
24 Resets all permissions to perm attribute
25 """
26 repo_group = RepoGroup.get_by_group_name(group_name=group_name)
27 if not repo_group:
28 raise Exception('Cannot get group %s' % group_name)
29 perms_updates = [[test_u2_gr_id, perm, 'users_group']]
30 RepoGroupModel()._update_permissions(repo_group,
31 perms_updates=perms_updates,
32 recursive=recursive, check_perms=False)
33 Session().commit()
34
35
36 def setup_module():
37 global test_u2_id, test_u2_gr_id, _get_repo_perms, _get_group_perms
38 test_u2 = _create_project_tree()
39 Session().commit()
40 test_u2_id = test_u2.user_id
41
42 gr1 = fixture.create_user_group('perms_group_1')
43 Session().commit()
44 test_u2_gr_id = gr1.users_group_id
45 UserGroupModel().add_user_to_group(gr1, user=test_u2_id)
46 Session().commit()
47
48 _get_repo_perms = functools.partial(_get_perms, key='repositories',
49 test_u1_id=test_u2_id)
50 _get_group_perms = functools.partial(_get_perms, key='repositories_groups',
51 test_u1_id=test_u2_id)
52
53
54 def teardown_module():
55 _destroy_project_tree(test_u2_id)
56
57
58 @with_setup(permissions_setup_func)
59 def test_user_permissions_on_group_without_recursive_mode():
60 # set permission to g0 non-recursive mode
61 recursive = 'none'
62 group = 'g0'
63 permissions_setup_func(group, 'group.write', recursive=recursive)
64
65 items = [x for x in _get_repo_perms(group, recursive)]
66 expected = 0
67 assert len(items) == expected, ' %s != %s' % (len(items), expected)
68 for name, perm in items:
69 yield check_tree_perms, name, perm, group, 'repository.read'
70
71 items = [x for x in _get_group_perms(group, recursive)]
72 expected = 1
73 assert len(items) == expected, ' %s != %s' % (len(items), expected)
74 for name, perm in items:
75 yield check_tree_perms, name, perm, group, 'group.write'
76
77
78 @with_setup(permissions_setup_func)
79 def test_user_permissions_on_group_without_recursive_mode_subgroup():
80 # set permission to g0 non-recursive mode
81 recursive = 'none'
82 group = 'g0/g0_1'
83 permissions_setup_func(group, 'group.write', recursive=recursive)
84
85 items = [x for x in _get_repo_perms(group, recursive)]
86 expected = 0
87 assert len(items) == expected, ' %s != %s' % (len(items), expected)
88 for name, perm in items:
89 yield check_tree_perms, name, perm, group, 'repository.read'
90
91 items = [x for x in _get_group_perms(group, recursive)]
92 expected = 1
93 assert len(items) == expected, ' %s != %s' % (len(items), expected)
94 for name, perm in items:
95 yield check_tree_perms, name, perm, group, 'group.write'
96
97
98 @with_setup(permissions_setup_func)
99 def test_user_permissions_on_group_with_recursive_mode():
100
101 # set permission to g0 recursive mode, all children including
102 # other repos and groups should have this permission now set !
103 recursive = 'all'
104 group = 'g0'
105 permissions_setup_func(group, 'group.write', recursive=recursive)
106
107 repo_items = [x for x in _get_repo_perms(group, recursive)]
108 items = [x for x in _get_group_perms(group, recursive)]
109 _check_expected_count(items, repo_items, expected_count(group, True))
110
111 for name, perm in repo_items:
112 yield check_tree_perms, name, perm, group, 'repository.write'
113
114 for name, perm in items:
115 yield check_tree_perms, name, perm, group, 'group.write'
116
117
118 @with_setup(permissions_setup_func)
119 def test_user_permissions_on_group_with_recursive_mode_inner_group():
120 ## set permission to g0_3 group to none
121 recursive = 'all'
122 group = 'g0/g0_3'
123 permissions_setup_func(group, 'group.none', recursive=recursive)
124
125 repo_items = [x for x in _get_repo_perms(group, recursive)]
126 items = [x for x in _get_group_perms(group, recursive)]
127 _check_expected_count(items, repo_items, expected_count(group, True))
128
129 for name, perm in repo_items:
130 yield check_tree_perms, name, perm, group, 'repository.none'
131
132 for name, perm in items:
133 yield check_tree_perms, name, perm, group, 'group.none'
134
135
136 @with_setup(permissions_setup_func)
137 def test_user_permissions_on_group_with_recursive_mode_deepest():
138 ## set permission to g0_3 group to none
139 recursive = 'all'
140 group = 'g0/g0_1/g0_1_1'
141 permissions_setup_func(group, 'group.write', recursive=recursive)
142
143 repo_items = [x for x in _get_repo_perms(group, recursive)]
144 items = [x for x in _get_group_perms(group, recursive)]
145 _check_expected_count(items, repo_items, expected_count(group, True))
146
147 for name, perm in repo_items:
148 yield check_tree_perms, name, perm, group, 'repository.write'
149
150 for name, perm in items:
151 yield check_tree_perms, name, perm, group, 'group.write'
152
153
154 @with_setup(permissions_setup_func)
155 def test_user_permissions_on_group_with_recursive_mode_only_with_repos():
156 ## set permission to g0_3 group to none
157 recursive = 'all'
158 group = 'g0/g0_2'
159 permissions_setup_func(group, 'group.admin', recursive=recursive)
160
161 repo_items = [x for x in _get_repo_perms(group, recursive)]
162 items = [x for x in _get_group_perms(group, recursive)]
163 _check_expected_count(items, repo_items, expected_count(group, True))
164
165 for name, perm in repo_items:
166 yield check_tree_perms, name, perm, group, 'repository.admin'
167
168 for name, perm in items:
169 yield check_tree_perms, name, perm, group, 'group.admin'
170
171 @with_setup(permissions_setup_func)
172 def test_user_permissions_on_group_with_recursive_mode_on_repos():
173 # set permission to g0/g0_1 with recursive mode on just repositories
174 recursive = 'repos'
175 group = 'g0/g0_1'
176 perm = 'group.write'
177 permissions_setup_func(group, perm, recursive=recursive)
178
179 repo_items = [x for x in _get_repo_perms(group, recursive)]
180 items = [x for x in _get_group_perms(group, recursive)]
181 _check_expected_count(items, repo_items, expected_count(group, True))
182
183 for name, perm in repo_items:
184 yield check_tree_perms, name, perm, group, 'repository.write'
185
186 for name, perm in items:
187 # permission is set with repos only mode, but we also change the permission
188 # on the group we trigger the apply to children from, thus we need
189 # to change its permission check
190 old_perm = 'group.read'
191 if name == group:
192 old_perm = perm
193 yield check_tree_perms, name, perm, group, old_perm
194
195 @with_setup(permissions_setup_func)
196 def test_user_permissions_on_group_with_recursive_mode_on_repo_groups():
197 # set permission to g0/g0_1 with recursive mode on just repository groups
198 recursive = 'groups'
199 group = 'g0/g0_1'
200 perm = 'group.none'
201 permissions_setup_func(group, perm, recursive=recursive)
202
203 repo_items = [x for x in _get_repo_perms(group, recursive)]
204 items = [x for x in _get_group_perms(group, recursive)]
205 _check_expected_count(items, repo_items, expected_count(group, True))
206
207 for name, perm in repo_items:
208 yield check_tree_perms, name, perm, group, 'repository.read'
209
210 for name, perm in items:
211 yield check_tree_perms, name, perm, group, 'group.none'