comparison rhodecode/tests/models/test_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 os
2 from sqlalchemy.exc import IntegrityError
3
4 from rhodecode.tests import *
5 from rhodecode.tests.fixture import Fixture
6
7 from rhodecode.model.repo_group import RepoGroupModel
8 from rhodecode.model.repo import RepoModel
9 from rhodecode.model.db import RepoGroup
10 from rhodecode.model.meta import Session
11
12
13 fixture = Fixture()
14
15
16 def _update_group(id_, group_name, desc='desc', parent_id=None):
17 form_data = fixture._get_group_create_params(group_name=group_name,
18 group_desc=desc,
19 group_parent_id=parent_id)
20 gr = RepoGroupModel().update(id_, form_data)
21 return gr
22
23
24 def _update_repo(name, **kwargs):
25 form_data = fixture._get_repo_create_params(**kwargs)
26 if not 'repo_name' in kwargs:
27 form_data['repo_name'] = name
28 if not 'perms_new' in kwargs:
29 form_data['perms_new'] = []
30 if not 'perms_updates' in kwargs:
31 form_data['perms_updates'] = []
32 r = RepoModel().update(name, **form_data)
33 return r
34
35
36 class TestRepoGroups(BaseTestCase):
37
38 def setUp(self):
39 self.g1 = fixture.create_repo_group('test1', skip_if_exists=True)
40 self.g2 = fixture.create_repo_group('test2', skip_if_exists=True)
41 self.g3 = fixture.create_repo_group('test3', skip_if_exists=True)
42
43 def tearDown(self):
44 Session.remove()
45
46 def __check_path(self, *path):
47 """
48 Checks the path for existance !
49 """
50 path = [TESTS_TMP_PATH] + list(path)
51 path = os.path.join(*path)
52 return os.path.isdir(path)
53
54 def _check_folders(self):
55 print os.listdir(TESTS_TMP_PATH)
56
57 def __delete_group(self, id_):
58 RepoGroupModel().delete(id_)
59
60 def test_create_group(self):
61 g = fixture.create_repo_group('newGroup')
62 Session().commit()
63 self.assertEqual(g.full_path, 'newGroup')
64
65 self.assertTrue(self.__check_path('newGroup'))
66
67 def test_create_same_name_group(self):
68 self.assertRaises(IntegrityError, lambda: fixture.create_repo_group('newGroup'))
69 Session().rollback()
70
71 def test_same_subgroup(self):
72 sg1 = fixture.create_repo_group('sub1', group_parent_id=self.g1.group_id)
73 self.assertEqual(sg1.parent_group, self.g1)
74 self.assertEqual(sg1.full_path, 'test1/sub1')
75 self.assertTrue(self.__check_path('test1', 'sub1'))
76
77 ssg1 = fixture.create_repo_group('subsub1', group_parent_id=sg1.group_id)
78 self.assertEqual(ssg1.parent_group, sg1)
79 self.assertEqual(ssg1.full_path, 'test1/sub1/subsub1')
80 self.assertTrue(self.__check_path('test1', 'sub1', 'subsub1'))
81
82 def test_remove_group(self):
83 sg1 = fixture.create_repo_group('deleteme')
84 self.__delete_group(sg1.group_id)
85
86 self.assertEqual(RepoGroup.get(sg1.group_id), None)
87 self.assertFalse(self.__check_path('deteteme'))
88
89 sg1 = fixture.create_repo_group('deleteme', group_parent_id=self.g1.group_id)
90 self.__delete_group(sg1.group_id)
91
92 self.assertEqual(RepoGroup.get(sg1.group_id), None)
93 self.assertFalse(self.__check_path('test1', 'deteteme'))
94
95 def test_rename_single_group(self):
96 sg1 = fixture.create_repo_group('initial')
97
98 new_sg1 = _update_group(sg1.group_id, 'after')
99 self.assertTrue(self.__check_path('after'))
100 self.assertEqual(RepoGroup.get_by_group_name('initial'), None)
101
102 def test_update_group_parent(self):
103
104 sg1 = fixture.create_repo_group('initial', group_parent_id=self.g1.group_id)
105
106 new_sg1 = _update_group(sg1.group_id, 'after', parent_id=self.g1.group_id)
107 self.assertTrue(self.__check_path('test1', 'after'))
108 self.assertEqual(RepoGroup.get_by_group_name('test1/initial'), None)
109
110 new_sg1 = _update_group(sg1.group_id, 'after', parent_id=self.g3.group_id)
111 self.assertTrue(self.__check_path('test3', 'after'))
112 self.assertEqual(RepoGroup.get_by_group_name('test3/initial'), None)
113
114 new_sg1 = _update_group(sg1.group_id, 'hello')
115 self.assertTrue(self.__check_path('hello'))
116
117 self.assertEqual(RepoGroup.get_by_group_name('hello'), new_sg1)
118
119 def test_subgrouping_with_repo(self):
120
121 g1 = fixture.create_repo_group('g1')
122 g2 = fixture.create_repo_group('g2')
123 # create new repo
124 r = fixture.create_repo('john')
125
126 self.assertEqual(r.repo_name, 'john')
127 # put repo into group
128 r = _update_repo('john', repo_group=g1.group_id)
129 Session().commit()
130 self.assertEqual(r.repo_name, 'g1/john')
131
132 _update_group(g1.group_id, 'g1', parent_id=g2.group_id)
133 self.assertTrue(self.__check_path('g2', 'g1'))
134
135 # test repo
136 self.assertEqual(r.repo_name, RepoGroup.url_sep().join(['g2', 'g1',
137 r.just_name]))
138
139 def test_move_to_root(self):
140 g1 = fixture.create_repo_group('t11')
141 g2 = fixture.create_repo_group('t22', group_parent_id=g1.group_id)
142
143 self.assertEqual(g2.full_path, 't11/t22')
144 self.assertTrue(self.__check_path('t11', 't22'))
145
146 g2 = _update_group(g2.group_id, 'g22', parent_id=None)
147 Session().commit()
148
149 self.assertEqual(g2.group_name, 'g22')
150 # we moved out group from t1 to '' so it's full path should be 'g2'
151 self.assertEqual(g2.full_path, 'g22')
152 self.assertFalse(self.__check_path('t11', 't22'))
153 self.assertTrue(self.__check_path('g22'))
154
155 def test_rename_top_level_group_in_nested_setup(self):
156 g1 = fixture.create_repo_group('L1')
157 g2 = fixture.create_repo_group('L2', group_parent_id=g1.group_id)
158 g3 = fixture.create_repo_group('L3', group_parent_id=g2.group_id)
159
160 r = fixture.create_repo('L1/L2/L3/L3_REPO', repo_group=g3.group_id)
161
162 ##rename L1 all groups should be now changed
163 _update_group(g1.group_id, 'L1_NEW')
164 Session().commit()
165 self.assertEqual(g1.full_path, 'L1_NEW')
166 self.assertEqual(g2.full_path, 'L1_NEW/L2')
167 self.assertEqual(g3.full_path, 'L1_NEW/L2/L3')
168 self.assertEqual(r.repo_name, 'L1_NEW/L2/L3/L3_REPO')
169
170 def test_change_parent_of_top_level_group_in_nested_setup(self):
171 g1 = fixture.create_repo_group('R1')
172 g2 = fixture.create_repo_group('R2', group_parent_id=g1.group_id)
173 g3 = fixture.create_repo_group('R3', group_parent_id=g2.group_id)
174 g4 = fixture.create_repo_group('R1_NEW')
175
176 r = fixture.create_repo('R1/R2/R3/R3_REPO', repo_group=g3.group_id)
177 ##rename L1 all groups should be now changed
178 _update_group(g1.group_id, 'R1', parent_id=g4.group_id)
179 Session().commit()
180 self.assertEqual(g1.full_path, 'R1_NEW/R1')
181 self.assertEqual(g2.full_path, 'R1_NEW/R1/R2')
182 self.assertEqual(g3.full_path, 'R1_NEW/R1/R2/R3')
183 self.assertEqual(r.repo_name, 'R1_NEW/R1/R2/R3/R3_REPO')
184
185 def test_change_parent_of_top_level_group_in_nested_setup_with_rename(self):
186 g1 = fixture.create_repo_group('X1')
187 g2 = fixture.create_repo_group('X2', group_parent_id=g1.group_id)
188 g3 = fixture.create_repo_group('X3', group_parent_id=g2.group_id)
189 g4 = fixture.create_repo_group('X1_NEW')
190
191 r = fixture.create_repo('X1/X2/X3/X3_REPO', repo_group=g3.group_id)
192
193 ##rename L1 all groups should be now changed
194 _update_group(g1.group_id, 'X1_PRIM', parent_id=g4.group_id)
195 Session().commit()
196 self.assertEqual(g1.full_path, 'X1_NEW/X1_PRIM')
197 self.assertEqual(g2.full_path, 'X1_NEW/X1_PRIM/X2')
198 self.assertEqual(g3.full_path, 'X1_NEW/X1_PRIM/X2/X3')
199 self.assertEqual(r.repo_name, 'X1_NEW/X1_PRIM/X2/X3/X3_REPO')