Files
@ d7488551578e
Branch filter:
Location: kallithea/rhodecode/tests/functional/test_admin_repos.py - annotation
d7488551578e
14.6 KiB
text/x-python
synced vcs with upstream
- moved subprocessio module to VCS
- many small changes to make embedded vcs as similar to to external lib
- use only absolute imports
- patch vcs config during load pylons env
- moved subprocessio module to VCS
- many small changes to make embedded vcs as similar to to external lib
- use only absolute imports
- patch vcs config during load pylons env
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 | 6dee43453f58 6dee43453f58 b1d6478d4561 7abbb77b02d0 7abbb77b02d0 324ac367a4da 802c94bdfc85 802c94bdfc85 7486da5f0628 40b3a54391f9 40b3a54391f9 802c94bdfc85 8a86836fad64 8a86836fad64 8a86836fad64 802c94bdfc85 802c94bdfc85 802c94bdfc85 802c94bdfc85 802c94bdfc85 802c94bdfc85 802c94bdfc85 802c94bdfc85 802c94bdfc85 7486da5f0628 9492ab68331f 7486da5f0628 7486da5f0628 7486da5f0628 7486da5f0628 7486da5f0628 7486da5f0628 7486da5f0628 7486da5f0628 7486da5f0628 7486da5f0628 7486da5f0628 7486da5f0628 7486da5f0628 7486da5f0628 79c5967a1e5c 8a86836fad64 6104dfd35b16 6104dfd35b16 9492ab68331f a8f2d78d14ea 7abbb77b02d0 7486da5f0628 9c0f5d558789 d7488551578e 9492ab68331f 7486da5f0628 9c0f5d558789 9c0f5d558789 7486da5f0628 7486da5f0628 7486da5f0628 7486da5f0628 9492ab68331f b1d6478d4561 b1d6478d4561 b1d6478d4561 b1d6478d4561 10b4e34841a4 9492ab68331f b1d6478d4561 6dee43453f58 6dee43453f58 6dee43453f58 6dee43453f58 6dee43453f58 6dee43453f58 6dee43453f58 6dee43453f58 6104dfd35b16 8a86836fad64 6104dfd35b16 6104dfd35b16 6dee43453f58 a8f2d78d14ea 7abbb77b02d0 6dee43453f58 d7488551578e 9492ab68331f 6dee43453f58 6dee43453f58 6dee43453f58 6dee43453f58 6dee43453f58 6dee43453f58 6dee43453f58 9492ab68331f 6dee43453f58 6dee43453f58 6dee43453f58 6dee43453f58 10b4e34841a4 9492ab68331f 6dee43453f58 7a5b11c23288 40b3a54391f9 40b3a54391f9 40b3a54391f9 40b3a54391f9 40b3a54391f9 b4daef4cc26d b4daef4cc26d d7488551578e 40b3a54391f9 40b3a54391f9 40b3a54391f9 40b3a54391f9 6104dfd35b16 8a86836fad64 6104dfd35b16 6104dfd35b16 6104dfd35b16 6104dfd35b16 40b3a54391f9 a8f2d78d14ea 28305020a4ed 40b3a54391f9 d7488551578e 40b3a54391f9 40b3a54391f9 40b3a54391f9 40b3a54391f9 40b3a54391f9 40b3a54391f9 40b3a54391f9 40b3a54391f9 40b3a54391f9 40b3a54391f9 40b3a54391f9 40b3a54391f9 40b3a54391f9 10b4e34841a4 40b3a54391f9 d7488551578e 40b3a54391f9 40b3a54391f9 40b3a54391f9 40b3a54391f9 d7488551578e b1d6478d4561 7486da5f0628 7486da5f0628 7486da5f0628 7486da5f0628 6104dfd35b16 6104dfd35b16 8a86836fad64 6104dfd35b16 6104dfd35b16 6104dfd35b16 9492ab68331f a8f2d78d14ea 7abbb77b02d0 7486da5f0628 9492ab68331f d7488551578e 9492ab68331f 7486da5f0628 9492ab68331f 9492ab68331f 7486da5f0628 7486da5f0628 7486da5f0628 7486da5f0628 9492ab68331f 7486da5f0628 b1d6478d4561 b1d6478d4561 b1d6478d4561 10b4e34841a4 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 6104dfd35b16 8a86836fad64 6104dfd35b16 6104dfd35b16 6104dfd35b16 6104dfd35b16 9492ab68331f a8f2d78d14ea 7abbb77b02d0 9492ab68331f 9492ab68331f d7488551578e 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 10b4e34841a4 9492ab68331f 7486da5f0628 7486da5f0628 7486da5f0628 7486da5f0628 7486da5f0628 9c0f5d558789 9c0f5d558789 7486da5f0628 9492ab68331f 7486da5f0628 7486da5f0628 7486da5f0628 6104dfd35b16 8a86836fad64 6104dfd35b16 6104dfd35b16 6104dfd35b16 6104dfd35b16 9492ab68331f a8f2d78d14ea 7abbb77b02d0 7486da5f0628 d7488551578e 9492ab68331f 7486da5f0628 9c0f5d558789 9c0f5d558789 7486da5f0628 7486da5f0628 7486da5f0628 7486da5f0628 9492ab68331f 7486da5f0628 9492ab68331f 9492ab68331f 9492ab68331f 10b4e34841a4 9492ab68331f 7486da5f0628 7486da5f0628 7486da5f0628 4f80df0d45c8 7486da5f0628 7486da5f0628 7486da5f0628 7486da5f0628 d7488551578e 9492ab68331f 9c0f5d558789 9c0f5d558789 7486da5f0628 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 79c5967a1e5c 8a86836fad64 6104dfd35b16 6104dfd35b16 6104dfd35b16 6104dfd35b16 9492ab68331f a8f2d78d14ea 7abbb77b02d0 9492ab68331f d7488551578e 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 10b4e34841a4 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 4f80df0d45c8 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f d7488551578e 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 9c0f5d558789 9c0f5d558789 9c0f5d558789 9c0f5d558789 7486da5f0628 7486da5f0628 9c0f5d558789 9c0f5d558789 7486da5f0628 9492ab68331f 7486da5f0628 7486da5f0628 7486da5f0628 9492ab68331f 9492ab68331f 9492ab68331f 9492ab68331f 7486da5f0628 7486da5f0628 7486da5f0628 802c94bdfc85 802c94bdfc85 802c94bdfc85 802c94bdfc85 802c94bdfc85 802c94bdfc85 802c94bdfc85 802c94bdfc85 802c94bdfc85 802c94bdfc85 8a86836fad64 802c94bdfc85 802c94bdfc85 802c94bdfc85 802c94bdfc85 802c94bdfc85 802c94bdfc85 802c94bdfc85 802c94bdfc85 802c94bdfc85 802c94bdfc85 802c94bdfc85 802c94bdfc85 8a86836fad64 802c94bdfc85 802c94bdfc85 802c94bdfc85 802c94bdfc85 802c94bdfc85 802c94bdfc85 802c94bdfc85 802c94bdfc85 802c94bdfc85 802c94bdfc85 802c94bdfc85 802c94bdfc85 802c94bdfc85 802c94bdfc85 802c94bdfc85 | # -*- coding: utf-8 -*-
import os
import urllib
from rhodecode.lib import vcs
from rhodecode.model.db import Repository, RepoGroup, UserRepoToPerm, User,\
Permission
from rhodecode.tests import *
from rhodecode.model.repos_group import ReposGroupModel
from rhodecode.model.repo import RepoModel
from rhodecode.model.meta import Session
from rhodecode.tests.fixture import Fixture
fixture = Fixture()
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 TestAdminReposController(TestController):
def test_index(self):
self.log_user()
response = self.app.get(url('repos'))
# Test response...
def test_index_as_xml(self):
response = self.app.get(url('formatted_repos', format='xml'))
def test_create_hg(self):
self.log_user()
repo_name = NEW_HG_REPO
description = 'description for newly created repo'
response = self.app.post(url('repos'),
fixture._get_repo_create_params(repo_private=False,
repo_name=repo_name,
repo_description=description))
self.checkSessionFlash(response,
'Created repository <a href="/%s">%s</a>'
% (repo_name, repo_name))
#test if the repo was created in the database
new_repo = Session().query(Repository)\
.filter(Repository.repo_name == repo_name).one()
self.assertEqual(new_repo.repo_name, repo_name)
self.assertEqual(new_repo.description, description)
#test if repository is visible in the list ?
response = response.follow()
response.mustcontain(repo_name)
#test if repository was created on filesystem
try:
vcs.get_repo(os.path.join(TESTS_TMP_PATH, repo_name))
except Exception:
self.fail('no repo %s in filesystem' % repo_name)
def test_create_hg_non_ascii(self):
self.log_user()
non_ascii = "ąęł"
repo_name = "%s%s" % (NEW_HG_REPO, non_ascii)
repo_name_unicode = repo_name.decode('utf8')
description = 'description for newly created repo' + non_ascii
description_unicode = description.decode('utf8')
private = False
response = self.app.post(url('repos'),
fixture._get_repo_create_params(repo_private=False,
repo_name=repo_name,
repo_description=description))
self.checkSessionFlash(response,
u'Created repository <a href="/%s">%s</a>'
% (urllib.quote(repo_name), repo_name_unicode))
#test if the repo was created in the database
new_repo = Session().query(Repository)\
.filter(Repository.repo_name == repo_name_unicode).one()
self.assertEqual(new_repo.repo_name, repo_name_unicode)
self.assertEqual(new_repo.description, description_unicode)
#test if repository is visible in the list ?
response = response.follow()
response.mustcontain(repo_name)
#test if repository was created on filesystem
try:
vcs.get_repo(os.path.join(TESTS_TMP_PATH, repo_name))
except Exception:
self.fail('no repo %s in filesystem' % repo_name)
def test_create_hg_in_group(self):
self.log_user()
## create GROUP
group_name = 'sometest'
gr = ReposGroupModel().create(group_name=group_name,
group_description='test',
owner=TEST_USER_ADMIN_LOGIN)
Session().commit()
repo_name = 'ingroup'
repo_name_full = RepoGroup.url_sep().join([group_name, repo_name])
description = 'description for newly created repo'
response = self.app.post(url('repos'),
fixture._get_repo_create_params(repo_private=False,
repo_name=repo_name,
repo_description=description,
repo_group=gr.group_id,))
self.checkSessionFlash(response,
'Created repository <a href="/%s">%s</a>'
% (repo_name_full, repo_name))
#test if the repo was created in the database
new_repo = Session().query(Repository)\
.filter(Repository.repo_name == repo_name_full).one()
self.assertEqual(new_repo.repo_name, repo_name_full)
self.assertEqual(new_repo.description, description)
#test if repository is visible in the list ?
response = response.follow()
response.mustcontain(repo_name_full)
#test if repository was created on filesystem
try:
vcs.get_repo(os.path.join(TESTS_TMP_PATH, repo_name_full))
except Exception:
ReposGroupModel().delete(group_name)
Session().commit()
self.fail('no repo %s in filesystem' % repo_name)
RepoModel().delete(repo_name_full)
ReposGroupModel().delete(group_name)
Session().commit()
def test_create_git(self):
self.log_user()
repo_name = NEW_GIT_REPO
description = 'description for newly created repo'
response = self.app.post(url('repos'),
fixture._get_repo_create_params(repo_private=False,
repo_type='git',
repo_name=repo_name,
repo_description=description))
self.checkSessionFlash(response,
'Created repository <a href="/%s">%s</a>'
% (repo_name, repo_name))
#test if the repo was created in the database
new_repo = Session().query(Repository)\
.filter(Repository.repo_name == repo_name).one()
self.assertEqual(new_repo.repo_name, repo_name)
self.assertEqual(new_repo.description, description)
#test if repository is visible in the list ?
response = response.follow()
response.mustcontain(repo_name)
#test if repository was created on filesystem
try:
vcs.get_repo(os.path.join(TESTS_TMP_PATH, repo_name))
except Exception:
self.fail('no repo %s in filesystem' % repo_name)
def test_create_git_non_ascii(self):
self.log_user()
non_ascii = "ąęł"
repo_name = "%s%s" % (NEW_GIT_REPO, non_ascii)
repo_name_unicode = repo_name.decode('utf8')
description = 'description for newly created repo' + non_ascii
description_unicode = description.decode('utf8')
private = False
response = self.app.post(url('repos'),
fixture._get_repo_create_params(repo_private=False,
repo_type='git',
repo_name=repo_name,
repo_description=description))
self.checkSessionFlash(response,
u'Created repository <a href="/%s">%s</a>'
% (urllib.quote(repo_name), repo_name_unicode))
#test if the repo was created in the database
new_repo = Session().query(Repository)\
.filter(Repository.repo_name == repo_name_unicode).one()
self.assertEqual(new_repo.repo_name, repo_name_unicode)
self.assertEqual(new_repo.description, description_unicode)
#test if repository is visible in the list ?
response = response.follow()
response.mustcontain(repo_name)
#test if repository was created on filesystem
try:
vcs.get_repo(os.path.join(TESTS_TMP_PATH, repo_name))
except Exception:
self.fail('no repo %s in filesystem' % repo_name)
def test_update(self):
response = self.app.put(url('repo', repo_name=HG_REPO))
def test_update_browser_fakeout(self):
response = self.app.post(url('repo', repo_name=HG_REPO),
params=dict(_method='put'))
def test_delete_hg(self):
self.log_user()
repo_name = 'vcs_test_new_to_delete'
description = 'description for newly created repo'
response = self.app.post(url('repos'),
fixture._get_repo_create_params(repo_private=False,
repo_type='hg',
repo_name=repo_name,
repo_description=description))
self.checkSessionFlash(response,
'Created repository <a href="/%s">%s</a>'
% (repo_name, repo_name))
#test if the repo was created in the database
new_repo = Session().query(Repository)\
.filter(Repository.repo_name == repo_name).one()
self.assertEqual(new_repo.repo_name, repo_name)
self.assertEqual(new_repo.description, description)
#test if repository is visible in the list ?
response = response.follow()
response.mustcontain(repo_name)
#test if repository was created on filesystem
try:
vcs.get_repo(os.path.join(TESTS_TMP_PATH, repo_name))
except Exception:
self.fail('no repo %s in filesystem' % repo_name)
response = self.app.delete(url('repo', repo_name=repo_name))
self.checkSessionFlash(response, 'Deleted repository %s' % (repo_name))
response.follow()
#check if repo was deleted from db
deleted_repo = Session().query(Repository)\
.filter(Repository.repo_name == repo_name).scalar()
self.assertEqual(deleted_repo, None)
self.assertEqual(os.path.isdir(os.path.join(TESTS_TMP_PATH, repo_name)),
False)
def test_delete_git(self):
self.log_user()
repo_name = 'vcs_test_new_to_delete'
description = 'description for newly created repo'
private = False
response = self.app.post(url('repos'),
fixture._get_repo_create_params(repo_private=False,
repo_type='git',
repo_name=repo_name,
repo_description=description))
self.checkSessionFlash(response,
'Created repository <a href="/%s">%s</a>'
% (repo_name, repo_name))
#test if the repo was created in the database
new_repo = Session().query(Repository)\
.filter(Repository.repo_name == repo_name).one()
self.assertEqual(new_repo.repo_name, repo_name)
self.assertEqual(new_repo.description, description)
#test if repository is visible in the list ?
response = response.follow()
response.mustcontain(repo_name)
#test if repository was created on filesystem
try:
vcs.get_repo(os.path.join(TESTS_TMP_PATH, repo_name))
except Exception:
self.fail('no repo %s in filesystem' % repo_name)
response = self.app.delete(url('repo', repo_name=repo_name))
self.checkSessionFlash(response, 'Deleted repository %s' % (repo_name))
response.follow()
#check if repo was deleted from db
deleted_repo = Session().query(Repository)\
.filter(Repository.repo_name == repo_name).scalar()
self.assertEqual(deleted_repo, None)
self.assertEqual(os.path.isdir(os.path.join(TESTS_TMP_PATH, repo_name)),
False)
def test_delete_repo_with_group(self):
#TODO:
pass
def test_delete_browser_fakeout(self):
response = self.app.post(url('repo', repo_name=HG_REPO),
params=dict(_method='delete'))
def test_show_hg(self):
self.log_user()
response = self.app.get(url('repo', repo_name=HG_REPO))
def test_show_git(self):
self.log_user()
response = self.app.get(url('repo', repo_name=GIT_REPO))
def test_edit(self):
response = self.app.get(url('edit_repo', repo_name=HG_REPO))
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),
fixture._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),
fixture._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()
|