From 69a865a7a3e0a4fdc3cd561712da104bbad28806 Mon Sep 17 00:00:00 2001 From: Marcin Kuzminski Date: Tue, 17 Oct 2017 14:06:51 +0200 Subject: [PATCH] repo-groups: moved to pyramid --- rhodecode/apps/_base/__init__.py | 14 + rhodecode/apps/admin/__init__.py | 13 + .../tests/test_admin_repository_groups.py} | 179 +++----- rhodecode/apps/admin/views/repo_groups.py | 204 +++++++++ rhodecode/apps/repo_group/__init__.py | 32 +- rhodecode/apps/repo_group/tests/__init__.py | 19 + .../tests/test_repo_groups_advanced.py | 89 ++++ .../tests/test_repo_groups_permissions.py | 49 +++ .../tests/test_repo_groups_settings.py | 90 ++++ .../repo_group/views/repo_group_advanced.py | 105 +++++ .../views/repo_group_permissions.py | 100 +++++ .../repo_group/views/repo_group_settings.py | 183 ++++++++ rhodecode/apps/repository/__init__.py | 2 +- rhodecode/apps/repository/tests/__init__.py | 19 + .../repository/tests/test_repo_settings.py | 4 +- .../apps/repository/views/repo_settings.py | 2 +- rhodecode/config/routing.py | 47 -- rhodecode/controllers/admin/repo_groups.py | 405 ------------------ rhodecode/integrations/routes.py | 10 +- .../integrations/tests/test_integrations.py | 16 +- rhodecode/model/repo_group.py | 28 +- .../schemas/repo_group_schema.py | 50 ++- rhodecode/public/js/rhodecode/routes.js | 18 +- .../templates/admin/integrations/form.mako | 4 +- .../templates/admin/integrations/list.mako | 4 +- .../templates/admin/integrations/new.mako | 4 +- .../admin/repo_groups/repo_group_add.mako | 4 +- .../admin/repo_groups/repo_group_edit.mako | 10 +- .../repo_groups/repo_group_edit_advanced.mako | 2 +- ....mako => repo_group_edit_permissions.mako} | 24 +- .../repo_groups/repo_group_edit_settings.mako | 51 ++- .../admin/repo_groups/repo_groups.mako | 2 +- rhodecode/templates/base/base.mako | 4 +- rhodecode/templates/base/perms_summary.mako | 2 +- .../templates/data_table/_dt_elements.mako | 4 +- rhodecode/templates/index_base.mako | 6 +- .../tests/controllers/test_repo_groups.py | 79 ---- .../tests/functional/test_delegated_admin.py | 10 +- rhodecode/tests/lib/test_utils.py | 18 - rhodecode/tests/models/test_repo_groups.py | 2 +- rhodecode/tests/plugin.py | 26 ++ 41 files changed, 1178 insertions(+), 756 deletions(-) rename rhodecode/{tests/functional/test_admin_repo_groups.py => apps/admin/tests/test_admin_repository_groups.py} (50%) create mode 100644 rhodecode/apps/admin/views/repo_groups.py create mode 100644 rhodecode/apps/repo_group/tests/test_repo_groups_advanced.py create mode 100644 rhodecode/apps/repo_group/tests/test_repo_groups_permissions.py create mode 100644 rhodecode/apps/repo_group/tests/test_repo_groups_settings.py create mode 100644 rhodecode/apps/repo_group/views/repo_group_advanced.py create mode 100644 rhodecode/apps/repo_group/views/repo_group_permissions.py create mode 100644 rhodecode/apps/repo_group/views/repo_group_settings.py delete mode 100644 rhodecode/controllers/admin/repo_groups.py rename rhodecode/templates/admin/repo_groups/{repo_group_edit_perms.mako => repo_group_edit_permissions.mako} (88%) delete mode 100644 rhodecode/tests/controllers/test_repo_groups.py diff --git a/rhodecode/apps/_base/__init__.py b/rhodecode/apps/_base/__init__.py index 2c76c456..08db2a02 100644 --- a/rhodecode/apps/_base/__init__.py +++ b/rhodecode/apps/_base/__init__.py @@ -260,6 +260,20 @@ class RepoGroupAppView(BaseAppView): self.db_repo_group = request.db_repo_group self.db_repo_group_name = self.db_repo_group.group_name + def _revoke_perms_on_yourself(self, form_result): + _updates = filter(lambda u: self._rhodecode_user.user_id == int(u[0]), + form_result['perm_updates']) + _additions = filter(lambda u: self._rhodecode_user.user_id == int(u[0]), + form_result['perm_additions']) + _deletions = filter(lambda u: self._rhodecode_user.user_id == int(u[0]), + form_result['perm_deletions']) + admin_perm = 'group.admin' + if _updates and _updates[0][1] != admin_perm or \ + _additions and _additions[0][1] != admin_perm or \ + _deletions and _deletions[0][1] != admin_perm: + return True + return False + class UserGroupAppView(BaseAppView): def __init__(self, context, request): diff --git a/rhodecode/apps/admin/__init__.py b/rhodecode/apps/admin/__init__.py index a8a38443..528084c4 100644 --- a/rhodecode/apps/admin/__init__.py +++ b/rhodecode/apps/admin/__init__.py @@ -295,6 +295,19 @@ def admin_routes(config): name='repo_create', pattern='/repos/create') + # repo groups admin + config.add_route( + name='repo_groups', + pattern='/repo_groups') + + config.add_route( + name='repo_group_new', + pattern='/repo_group/new') + + config.add_route( + name='repo_group_create', + pattern='/repo_group/create') + def includeme(config): settings = config.get_settings() diff --git a/rhodecode/tests/functional/test_admin_repo_groups.py b/rhodecode/apps/admin/tests/test_admin_repository_groups.py similarity index 50% rename from rhodecode/tests/functional/test_admin_repo_groups.py rename to rhodecode/apps/admin/tests/test_admin_repository_groups.py index 6797bb20..7c3a66b5 100644 --- a/rhodecode/tests/functional/test_admin_repo_groups.py +++ b/rhodecode/apps/admin/tests/test_admin_repository_groups.py @@ -19,107 +19,85 @@ # and proprietary license terms, please see https://rhodecode.com/licenses/ import os +import pytest +from rhodecode.apps._base import ADMIN_PREFIX from rhodecode.lib import helpers as h +from rhodecode.model.db import Repository, UserRepoToPerm, User from rhodecode.model.meta import Session from rhodecode.model.repo_group import RepoGroupModel from rhodecode.tests import ( - url, TestController, assert_session_flash, GIT_REPO, HG_REPO, - TESTS_TMP_PATH, TEST_USER_REGULAR_LOGIN, TEST_USER_REGULAR_PASS) + assert_session_flash, TEST_USER_REGULAR_LOGIN, TESTS_TMP_PATH, TestController) from rhodecode.tests.fixture import Fixture fixture = Fixture() +def route_path(name, params=None, **kwargs): + import urllib -def test_update(app, csrf_token, autologin_user, user_util): - repo_group = user_util.create_repo_group() - description = 'description for newly created repo group' - Session().commit() - response = app.post( - url('update_repo_group', group_name=repo_group.group_name), - fixture._get_group_create_params( - group_name=repo_group.group_name, - group_description=description, - csrf_token=csrf_token, - _method='PUT') - ) - # TODO: anderson: johbo: we believe that this update should return - # a redirect instead of rendering the template. - assert response.status_code == 200 + base_url = { + 'repo_groups': ADMIN_PREFIX + '/repo_groups', + 'repo_group_new': ADMIN_PREFIX + '/repo_group/new', + 'repo_group_create': ADMIN_PREFIX + '/repo_group/create', + + }[name].format(**kwargs) + + if params: + base_url = '{}?{}'.format(base_url, urllib.urlencode(params)) + return base_url -def test_edit(app, user_util, autologin_user): - repo_group = user_util.create_repo_group() - Session().commit() - response = app.get( - url('edit_repo_group', group_name=repo_group.group_name)) - assert response.status_code == 200 +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 -def test_edit_repo_group_perms(app, user_util, autologin_user): - repo_group = user_util.create_repo_group() - Session().commit() - response = app.get( - url('edit_repo_group_perms', group_name=repo_group.group_name)) - assert response.status_code == 200 - - -def test_update_fails_when_parent_pointing_to_self( - app, csrf_token, user_util, autologin_user): - group = user_util.create_repo_group() - response = app.post( - url('update_repo_group', group_name=group.group_name), - fixture._get_group_create_params( - group_parent_id=group.group_id, - csrf_token=csrf_token, - _method='PUT') - ) - response.mustcontain( - '