tests: stabilize tests for mysql/postgres.

This commit is contained in:
Marcin Kuzminski 2019-10-08 17:06:35 +02:00
parent 4409e2b26b
commit 3876870e28
18 changed files with 169 additions and 68 deletions

View file

@ -155,7 +155,7 @@ class TestAuthSettingsView(object):
response = self._post_ldap_settings(params, override={ response = self._post_ldap_settings(params, override={
'port': invalid_port_value, 'port': invalid_port_value,
}) })
assertr = AssertResponse(response) assertr = response.assert_response()
assertr.element_contains( assertr.element_contains(
'.form .field #port ~ .error-message', '.form .field #port ~ .error-message',
invalid_port_value) invalid_port_value)

View file

@ -81,13 +81,13 @@ class TestAdminRepos(object):
def test_create_page_restricted_to_single_backend(self, autologin_user, backend): def test_create_page_restricted_to_single_backend(self, autologin_user, backend):
with mock.patch('rhodecode.BACKENDS', {'git': 'git'}): with mock.patch('rhodecode.BACKENDS', {'git': 'git'}):
response = self.app.get(route_path('repo_new'), status=200) response = self.app.get(route_path('repo_new'), status=200)
assert_response = AssertResponse(response) assert_response = response.assert_response()
element = assert_response.get_element('#repo_type') element = assert_response.get_element('#repo_type')
assert element.text_content() == '\ngit\n' assert element.text_content() == '\ngit\n'
def test_create_page_non_restricted_backends(self, autologin_user, backend): def test_create_page_non_restricted_backends(self, autologin_user, backend):
response = self.app.get(route_path('repo_new'), status=200) response = self.app.get(route_path('repo_new'), status=200)
assert_response = AssertResponse(response) assert_response = response.assert_response()
assert_response.element_contains('#repo_type', 'git') assert_response.element_contains('#repo_type', 'git')
assert_response.element_contains('#repo_type', 'svn') assert_response.element_contains('#repo_type', 'svn')
assert_response.element_contains('#repo_type', 'hg') assert_response.element_contains('#repo_type', 'hg')

View file

@ -367,7 +367,7 @@ class TestAdminSettingsVcs(object):
def test_has_an_input_for_invalidation_of_inline_comments(self): def test_has_an_input_for_invalidation_of_inline_comments(self):
response = self.app.get(route_path('admin_settings_vcs')) response = self.app.get(route_path('admin_settings_vcs'))
assert_response = AssertResponse(response) assert_response = response.assert_response()
assert_response.one_element_exists( assert_response.one_element_exists(
'[name=rhodecode_use_outdated_comments]') '[name=rhodecode_use_outdated_comments]')
@ -518,7 +518,7 @@ class TestOpenSourceLicenses(object):
response = self.app.get( response = self.app.get(
route_path('admin_settings_open_source'), status=200) route_path('admin_settings_open_source'), status=200)
assert_response = AssertResponse(response) assert_response = response.assert_response()
assert_response.element_contains( assert_response.element_contains(
'.panel-heading', 'Licenses of Third Party Packages') '.panel-heading', 'Licenses of Third Party Packages')
for license_data in sample_licenses: for license_data in sample_licenses:
@ -528,7 +528,7 @@ class TestOpenSourceLicenses(object):
def test_records_can_be_read(self, autologin_user): def test_records_can_be_read(self, autologin_user):
response = self.app.get( response = self.app.get(
route_path('admin_settings_open_source'), status=200) route_path('admin_settings_open_source'), status=200)
assert_response = AssertResponse(response) assert_response = response.assert_response()
assert_response.element_contains( assert_response.element_contains(
'.panel-heading', 'Licenses of Third Party Packages') '.panel-heading', 'Licenses of Third Party Packages')

View file

@ -88,7 +88,7 @@ class TestPasswordReset(TestController):
response = self.app.get(route_path('reset_password')) response = self.app.get(route_path('reset_password'))
assert_response = AssertResponse(response) assert_response = response.assert_response()
if show_reset: if show_reset:
response.mustcontain('Send password reset email') response.mustcontain('Send password reset email')
assert_response.one_element_exists('#email') assert_response.one_element_exists('#email')

View file

@ -90,7 +90,7 @@ class TestRegisterCaptcha(object):
response = app.get(ADMIN_PREFIX + '/register') response = app.get(ADMIN_PREFIX + '/register')
assertr = AssertResponse(response) assertr = response.assert_response()
if active: if active:
assertr.one_element_exists('#recaptcha_field') assertr.one_element_exists('#recaptcha_field')
else: else:
@ -128,6 +128,6 @@ class TestRegisterCaptcha(object):
else: else:
# If captche input is invalid we expect to stay on the registration # If captche input is invalid we expect to stay on the registration
# page with an error message displayed. # page with an error message displayed.
assertr = AssertResponse(response) assertr = response.assert_response()
assert response.status_int == 200 assert response.status_int == 200
assertr.one_element_exists('#recaptcha_field ~ span.error-message') assertr.one_element_exists('#recaptcha_field ~ span.error-message')

View file

@ -116,7 +116,7 @@ class TestFeedView(TestController):
self, backend, user_util, feed_type): self, backend, user_util, feed_type):
user = user_util.create_user() user = user_util.create_user()
auth_token = AuthTokenModel().create( auth_token = AuthTokenModel().create(
user.user_id, 'test-token', -1, AuthTokenModel.cls.ROLE_API) user.user_id, u'test-token', -1, AuthTokenModel.cls.ROLE_API)
auth_token = auth_token.api_key auth_token = auth_token.api_key
self.app.get( self.app.get(
@ -127,7 +127,7 @@ class TestFeedView(TestController):
status=302) status=302)
auth_token = AuthTokenModel().create( auth_token = AuthTokenModel().create(
user.user_id, 'test-token', -1, AuthTokenModel.cls.ROLE_FEED) user.user_id, u'test-token', -1, AuthTokenModel.cls.ROLE_FEED)
auth_token = auth_token.api_key auth_token = auth_token.api_key
self.app.get( self.app.get(
route_path( route_path(

View file

@ -236,7 +236,7 @@ class TestSummaryView(object):
with scm_patcher: with scm_patcher:
response = self.app.get( response = self.app.get(
route_path('repo_summary', repo_name=repo_name)) route_path('repo_summary', repo_name=repo_name))
assert_response = AssertResponse(response) assert_response = response.assert_response()
assert_response.element_contains( assert_response.element_contains(
'.main .alert-warning strong', 'Missing requirements') '.main .alert-warning strong', 'Missing requirements')
assert_response.element_contains( assert_response.element_contains(

View file

@ -98,7 +98,7 @@ class TestVcsSettings(object):
repo_name = backend.repo_name repo_name = backend.repo_name
response = self.app.get(route_path('edit_repo_vcs', repo_name=repo_name)) response = self.app.get(route_path('edit_repo_vcs', repo_name=repo_name))
assert_response = AssertResponse(response) assert_response = response.assert_response()
element = assert_response.get_element('#inherit_global_settings') element = assert_response.get_element('#inherit_global_settings')
assert element.checked assert element.checked
@ -111,7 +111,7 @@ class TestVcsSettings(object):
repo, 'inherit_vcs_settings', checked_value, 'bool') repo, 'inherit_vcs_settings', checked_value, 'bool')
response = self.app.get(route_path('edit_repo_vcs', repo_name=repo_name)) response = self.app.get(route_path('edit_repo_vcs', repo_name=repo_name))
assert_response = AssertResponse(response) assert_response = response.assert_response()
element = assert_response.get_element('#inherit_global_settings') element = assert_response.get_element('#inherit_global_settings')
assert element.checked == checked_value assert element.checked == checked_value
@ -491,7 +491,7 @@ class TestVcsSettings(object):
response = self.app.get( response = self.app.get(
route_path('edit_repo_vcs', repo_name=repo_name), status=200) route_path('edit_repo_vcs', repo_name=repo_name), status=200)
assert_response = AssertResponse(response) assert_response = response.assert_response()
for branch in branches: for branch in branches:
css_selector = '[name=branch_value_{}]'.format(branch.ui_id) css_selector = '[name=branch_value_{}]'.format(branch.ui_id)
element = assert_response.get_element(css_selector) element = assert_response.get_element(css_selector)
@ -668,7 +668,7 @@ class TestVcsSettings(object):
Session().commit() Session().commit()
def assert_repo_value_equals_global_value(self, response, setting): def assert_repo_value_equals_global_value(self, response, setting):
assert_response = AssertResponse(response) assert_response = response.assert_response()
global_css_selector = '[name={}_inherited]'.format(setting) global_css_selector = '[name={}_inherited]'.format(setting)
repo_css_selector = '[name={}]'.format(setting) repo_css_selector = '[name={}]'.format(setting)
repo_element = assert_response.get_element(repo_css_selector) repo_element = assert_response.get_element(repo_css_selector)

View file

@ -59,7 +59,7 @@ class TestAdminRepoVcsSettings(object):
rhodecode.CONFIG, {'labs_settings_active': 'true'}): rhodecode.CONFIG, {'labs_settings_active': 'true'}):
response = self.app.get(vcs_settings_url) response = self.app.get(vcs_settings_url)
assertr = AssertResponse(response) assertr = response.assert_response()
assertr.one_element_exists('#rhodecode_{}'.format(setting_name)) assertr.one_element_exists('#rhodecode_{}'.format(setting_name))
@pytest.mark.parametrize('setting_name, setting_backends', [ @pytest.mark.parametrize('setting_name, setting_backends', [

View file

@ -46,7 +46,7 @@ class TestSearchController(TestController):
def test_index(self): def test_index(self):
self.log_user() self.log_user()
response = self.app.get(route_path('search')) response = self.app.get(route_path('search'))
assert_response = AssertResponse(response) assert_response = response.assert_response()
assert_response.one_element_exists('input#q') assert_response.one_element_exists('input#q')
def test_search_files_empty_search(self): def test_search_files_empty_search(self):

View file

@ -46,14 +46,14 @@ class TestUsersController(TestController):
response = self.app.get(route_path('user_profile', username=username)) response = self.app.get(route_path('user_profile', username=username))
response.mustcontain('testme') response.mustcontain('testme')
response.mustcontain('testme@rhodecode.org') response.mustcontain('testme@rhodecode.org')
assert_response = AssertResponse(response) assert_response = response.assert_response()
assert_response.no_element_exists(edit_link_css) assert_response.no_element_exists(edit_link_css)
# edit should be available to superadmin users # edit should be available to superadmin users
self.logout_user() self.logout_user()
self.log_user(TEST_USER_ADMIN_LOGIN, TEST_USER_ADMIN_PASS) self.log_user(TEST_USER_ADMIN_LOGIN, TEST_USER_ADMIN_PASS)
response = self.app.get(route_path('user_profile', username=username)) response = self.app.get(route_path('user_profile', username=username))
assert_response = AssertResponse(response) assert_response = response.assert_response()
assert_response.element_contains(edit_link_css, 'Edit') assert_response.element_contains(edit_link_css, 'Edit')
def test_user_profile_not_available(self, user_util): def test_user_profile_not_available(self, user_util):

View file

@ -584,7 +584,7 @@ class User(Base, BaseModel):
_user_data = Column("user_data", LargeBinary(), nullable=True) # JSON data _user_data = Column("user_data", LargeBinary(), nullable=True) # JSON data
user_log = relationship('UserLog') user_log = relationship('UserLog')
user_perms = relationship('UserToPerm', primaryjoin="User.user_id==UserToPerm.user_id", cascade='all') user_perms = relationship('UserToPerm', primaryjoin="User.user_id==UserToPerm.user_id", cascade='all, delete-orphan')
repositories = relationship('Repository') repositories = relationship('Repository')
repository_groups = relationship('RepoGroup') repository_groups = relationship('RepoGroup')
@ -593,9 +593,9 @@ class User(Base, BaseModel):
user_followers = relationship('UserFollowing', primaryjoin='UserFollowing.follows_user_id==User.user_id', cascade='all') user_followers = relationship('UserFollowing', primaryjoin='UserFollowing.follows_user_id==User.user_id', cascade='all')
followings = relationship('UserFollowing', primaryjoin='UserFollowing.user_id==User.user_id', cascade='all') followings = relationship('UserFollowing', primaryjoin='UserFollowing.user_id==User.user_id', cascade='all')
repo_to_perm = relationship('UserRepoToPerm', primaryjoin='UserRepoToPerm.user_id==User.user_id', cascade='all') repo_to_perm = relationship('UserRepoToPerm', primaryjoin='UserRepoToPerm.user_id==User.user_id', cascade='all, delete-orphan')
repo_group_to_perm = relationship('UserRepoGroupToPerm', primaryjoin='UserRepoGroupToPerm.user_id==User.user_id', cascade='all') repo_group_to_perm = relationship('UserRepoGroupToPerm', primaryjoin='UserRepoGroupToPerm.user_id==User.user_id', cascade='all, delete-orphan')
user_group_to_perm = relationship('UserUserGroupToPerm', primaryjoin='UserUserGroupToPerm.user_id==User.user_id', cascade='all') user_group_to_perm = relationship('UserUserGroupToPerm', primaryjoin='UserUserGroupToPerm.user_id==User.user_id', cascade='all, delete-orphan')
group_member = relationship('UserGroupMember', cascade='all') group_member = relationship('UserGroupMember', cascade='all')
@ -1328,7 +1328,7 @@ class UserGroup(Base, BaseModel):
created_on = Column('created_on', DateTime(timezone=False), nullable=False, default=datetime.datetime.now) created_on = Column('created_on', DateTime(timezone=False), nullable=False, default=datetime.datetime.now)
_group_data = Column("group_data", LargeBinary(), nullable=True) # JSON data _group_data = Column("group_data", LargeBinary(), nullable=True) # JSON data
members = relationship('UserGroupMember', cascade="all, delete, delete-orphan", lazy="joined") members = relationship('UserGroupMember', cascade="all, delete-orphan", lazy="joined")
users_group_to_perm = relationship('UserGroupToPerm', cascade='all') users_group_to_perm = relationship('UserGroupToPerm', cascade='all')
users_group_repo_to_perm = relationship('UserGroupRepoToPerm', cascade='all') users_group_repo_to_perm = relationship('UserGroupRepoToPerm', cascade='all')
users_group_repo_group_to_perm = relationship('UserGroupRepoGroupToPerm', cascade='all') users_group_repo_group_to_perm = relationship('UserGroupRepoGroupToPerm', cascade='all')
@ -1665,21 +1665,21 @@ class Repository(Base, BaseModel):
primaryjoin='UserFollowing.follows_repo_id==Repository.repo_id', primaryjoin='UserFollowing.follows_repo_id==Repository.repo_id',
cascade='all') cascade='all')
extra_fields = relationship( extra_fields = relationship(
'RepositoryField', cascade="all, delete, delete-orphan") 'RepositoryField', cascade="all, delete-orphan")
logs = relationship('UserLog') logs = relationship('UserLog')
comments = relationship( comments = relationship(
'ChangesetComment', cascade="all, delete, delete-orphan") 'ChangesetComment', cascade="all, delete-orphan")
pull_requests_source = relationship( pull_requests_source = relationship(
'PullRequest', 'PullRequest',
primaryjoin='PullRequest.source_repo_id==Repository.repo_id', primaryjoin='PullRequest.source_repo_id==Repository.repo_id',
cascade="all, delete, delete-orphan") cascade="all, delete-orphan")
pull_requests_target = relationship( pull_requests_target = relationship(
'PullRequest', 'PullRequest',
primaryjoin='PullRequest.target_repo_id==Repository.repo_id', primaryjoin='PullRequest.target_repo_id==Repository.repo_id',
cascade="all, delete, delete-orphan") cascade="all, delete-orphan")
ui = relationship('RepoRhodeCodeUi', cascade="all") ui = relationship('RepoRhodeCodeUi', cascade="all")
settings = relationship('RepoRhodeCodeSetting', cascade="all") settings = relationship('RepoRhodeCodeSetting', cascade="all")
integrations = relationship('Integration', cascade="all, delete, delete-orphan") integrations = relationship('Integration', cascade="all, delete-orphan")
scoped_tokens = relationship('UserApiKeys', cascade="all") scoped_tokens = relationship('UserApiKeys', cascade="all")
@ -2551,7 +2551,7 @@ class RepoGroup(Base, BaseModel):
users_group_to_perm = relationship('UserGroupRepoGroupToPerm', cascade='all') users_group_to_perm = relationship('UserGroupRepoGroupToPerm', cascade='all')
parent_group = relationship('RepoGroup', remote_side=group_id) parent_group = relationship('RepoGroup', remote_side=group_id)
user = relationship('User') user = relationship('User')
integrations = relationship('Integration', cascade="all, delete, delete-orphan") integrations = relationship('Integration', cascade="all, delete-orphan")
def __init__(self, group_name='', parent_group=None): def __init__(self, group_name='', parent_group=None):
self.group_name = group_name self.group_name = group_name
@ -3270,7 +3270,7 @@ class UserRepoToPerm(Base, BaseModel):
repository = relationship('Repository') repository = relationship('Repository')
permission = relationship('Permission') permission = relationship('Permission')
branch_perm_entry = relationship('UserToRepoBranchPermission', cascade="all, delete, delete-orphan", lazy='joined') branch_perm_entry = relationship('UserToRepoBranchPermission', cascade="all, delete-orphan", lazy='joined')
@classmethod @classmethod
def create(cls, user, repository, permission): def create(cls, user, repository, permission):
@ -3646,7 +3646,7 @@ class ChangesetComment(Base, BaseModel):
author = relationship('User', lazy='joined') author = relationship('User', lazy='joined')
repo = relationship('Repository') repo = relationship('Repository')
status_change = relationship('ChangesetStatus', cascade="all, delete, delete-orphan", lazy='joined') status_change = relationship('ChangesetStatus', cascade="all, delete-orphan", lazy='joined')
pull_request = relationship('PullRequest', lazy='joined') pull_request = relationship('PullRequest', lazy='joined')
pull_request_version = relationship('PullRequestVersion') pull_request_version = relationship('PullRequestVersion')
@ -4120,13 +4120,13 @@ class PullRequest(Base, _PullRequestBase):
return '<DB:PullRequest at %#x>' % id(self) return '<DB:PullRequest at %#x>' % id(self)
reviewers = relationship('PullRequestReviewers', reviewers = relationship('PullRequestReviewers',
cascade="all, delete, delete-orphan") cascade="all, delete-orphan")
statuses = relationship('ChangesetStatus', statuses = relationship('ChangesetStatus',
cascade="all, delete, delete-orphan") cascade="all, delete-orphan")
comments = relationship('ChangesetComment', comments = relationship('ChangesetComment',
cascade="all, delete, delete-orphan") cascade="all, delete-orphan")
versions = relationship('PullRequestVersion', versions = relationship('PullRequestVersion',
cascade="all, delete, delete-orphan", cascade="all, delete-orphan",
lazy='dynamic') lazy='dynamic')
@classmethod @classmethod
@ -4341,7 +4341,7 @@ class Notification(Base, BaseModel):
created_by_user = relationship('User') created_by_user = relationship('User')
notifications_to_users = relationship('UserNotification', lazy='joined', notifications_to_users = relationship('UserNotification', lazy='joined',
cascade="all, delete, delete-orphan") cascade="all, delete-orphan")
@property @property
def recipients(self): def recipients(self):

View file

@ -510,8 +510,7 @@ class UserModel(BaseModel):
from rhodecode.lib.hooks_base import log_delete_user from rhodecode.lib.hooks_base import log_delete_user
if not cur_user: if not cur_user:
cur_user = getattr( cur_user = getattr(get_current_rhodecode_user(), 'username', None)
get_current_rhodecode_user(), 'username', None)
user = self._get_user(user) user = self._get_user(user)
try: try:

View file

@ -27,7 +27,7 @@ from mock import patch
from rhodecode.lib import auth from rhodecode.lib import auth
from rhodecode.lib.utils2 import md5 from rhodecode.lib.utils2 import md5
from rhodecode.model.auth_token import AuthTokenModel from rhodecode.model.auth_token import AuthTokenModel
from rhodecode.model.db import User from rhodecode.model.db import Session, User
from rhodecode.model.repo import RepoModel from rhodecode.model.repo import RepoModel
from rhodecode.model.user import UserModel from rhodecode.model.user import UserModel
from rhodecode.model.user_group import UserGroupModel from rhodecode.model.user_group import UserGroupModel
@ -93,6 +93,7 @@ def test_cached_perms_data_user_group_global_permissions(user_util):
granted_permission = 'repository.write' granted_permission = 'repository.write'
UserGroupModel().grant_perm(user_group, granted_permission) UserGroupModel().grant_perm(user_group, granted_permission)
Session().commit()
permissions = get_permissions(user) permissions = get_permissions(user)
assert granted_permission in permissions['global'] assert granted_permission in permissions['global']
@ -104,6 +105,7 @@ def test_cached_perms_data_user_group_global_permissions_(user_util):
granted_permission = 'repository.write' granted_permission = 'repository.write'
UserGroupModel().grant_perm(user_group, granted_permission) UserGroupModel().grant_perm(user_group, granted_permission)
Session().commit()
permissions = get_permissions(user) permissions = get_permissions(user)
assert granted_permission in permissions['global'] assert granted_permission in permissions['global']
@ -112,6 +114,7 @@ def test_cached_perms_data_user_group_global_permissions_(user_util):
def test_cached_perms_data_user_global_permissions(user_util): def test_cached_perms_data_user_global_permissions(user_util):
user = user_util.create_user() user = user_util.create_user()
UserModel().grant_perm(user, 'repository.none') UserModel().grant_perm(user, 'repository.none')
Session().commit()
permissions = get_permissions(user, user_inherit_default_permissions=True) permissions = get_permissions(user, user_inherit_default_permissions=True)
assert 'repository.read' in permissions['global'] assert 'repository.read' in permissions['global']
@ -127,6 +130,7 @@ def test_cached_perms_data_repository_permissions_on_private_repository(
granted_permission = 'repository.write' granted_permission = 'repository.write'
RepoModel().grant_user_group_permission( RepoModel().grant_user_group_permission(
repo, user_group.users_group_name, granted_permission) repo, user_group.users_group_name, granted_permission)
Session().commit()
permissions = get_permissions(user) permissions = get_permissions(user)
assert permissions['repositories'][repo.repo_name] == granted_permission assert permissions['repositories'][repo.repo_name] == granted_permission
@ -153,6 +157,7 @@ def test_cached_perms_data_repository_permissions_not_inheriting_defaults(
# Don't inherit default object permissions # Don't inherit default object permissions
UserModel().grant_perm(user, 'hg.inherit_default_perms.false') UserModel().grant_perm(user, 'hg.inherit_default_perms.false')
Session().commit()
permissions = get_permissions(user) permissions = get_permissions(user)
assert permissions['repositories'][repo.repo_name] == 'repository.none' assert permissions['repositories'][repo.repo_name] == 'repository.none'
@ -203,6 +208,7 @@ def test_cached_perms_data_default_permissions_on_repository_group_no_inherit(
# Don't inherit default object permissions # Don't inherit default object permissions
user = user_util.create_user() user = user_util.create_user()
UserModel().grant_perm(user, 'hg.inherit_default_perms.false') UserModel().grant_perm(user, 'hg.inherit_default_perms.false')
Session().commit()
permissions = get_permissions(user) permissions = get_permissions(user)
assert permissions['repositories_groups'][repo_group.group_name] == \ assert permissions['repositories_groups'][repo_group.group_name] == \
@ -224,6 +230,7 @@ def test_cached_perms_data_repository_permissions_from_user_group(
repo, user_group.users_group_name, 'repository.read') repo, user_group.users_group_name, 'repository.read')
RepoModel().grant_user_group_permission( RepoModel().grant_user_group_permission(
repo, user_group2.users_group_name, 'repository.write') repo, user_group2.users_group_name, 'repository.write')
Session().commit()
permissions = get_permissions(user) permissions = get_permissions(user)
assert permissions['repositories'][repo.repo_name] == 'repository.write' assert permissions['repositories'][repo.repo_name] == 'repository.write'
@ -238,6 +245,7 @@ def test_cached_perms_data_repository_permissions_from_user_group_owner(
RepoModel().grant_user_group_permission( RepoModel().grant_user_group_permission(
repo, user_group.users_group_name, 'repository.write') repo, user_group.users_group_name, 'repository.write')
Session().commit()
permissions = get_permissions(user) permissions = get_permissions(user)
assert permissions['repositories'][repo.repo_name] == 'repository.admin' assert permissions['repositories'][repo.repo_name] == 'repository.admin'
@ -249,6 +257,7 @@ def test_cached_perms_data_user_repository_permissions(
repo = backend_random.create_repo() repo = backend_random.create_repo()
granted_permission = 'repository.write' granted_permission = 'repository.write'
RepoModel().grant_user_permission(repo, user, granted_permission) RepoModel().grant_user_permission(repo, user, granted_permission)
Session().commit()
permissions = get_permissions(user) permissions = get_permissions(user)
assert permissions['repositories'][repo.repo_name] == granted_permission assert permissions['repositories'][repo.repo_name] == granted_permission
@ -260,6 +269,7 @@ def test_cached_perms_data_user_repository_permissions_explicit(
repo = backend_random.create_repo() repo = backend_random.create_repo()
granted_permission = 'repository.none' granted_permission = 'repository.none'
RepoModel().grant_user_permission(repo, user, granted_permission) RepoModel().grant_user_permission(repo, user, granted_permission)
Session().commit()
permissions = get_permissions(user, explicit=True) permissions = get_permissions(user, explicit=True)
assert permissions['repositories'][repo.repo_name] == granted_permission assert permissions['repositories'][repo.repo_name] == granted_permission
@ -271,6 +281,7 @@ def test_cached_perms_data_user_repository_permissions_owner(
repo = backend_random.create_repo() repo = backend_random.create_repo()
repo.user_id = user.user_id repo.user_id = user.user_id
RepoModel().grant_user_permission(repo, user, 'repository.write') RepoModel().grant_user_permission(repo, user, 'repository.write')
Session().commit()
permissions = get_permissions(user) permissions = get_permissions(user)
assert permissions['repositories'][repo.repo_name] == 'repository.admin' assert permissions['repositories'][repo.repo_name] == 'repository.admin'
@ -380,6 +391,7 @@ def test_cached_perms_data_user_group_permissions(
user = user_util.create_user() user = user_util.create_user()
user_group = user_util.create_user_group() user_group = user_util.create_user_group()
UserGroupModel().grant_user_permission(user_group, user, 'usergroup.write') UserGroupModel().grant_user_permission(user_group, user, 'usergroup.write')
Session().commit()
permissions = get_permissions(user) permissions = get_permissions(user)
assert permissions['user_groups'][user_group.users_group_name] == \ assert permissions['user_groups'][user_group.users_group_name] == \
@ -391,6 +403,7 @@ def test_cached_perms_data_user_group_permissions_explicit(
user = user_util.create_user() user = user_util.create_user()
user_group = user_util.create_user_group() user_group = user_util.create_user_group()
UserGroupModel().grant_user_permission(user_group, user, 'usergroup.none') UserGroupModel().grant_user_permission(user_group, user, 'usergroup.none')
Session().commit()
permissions = get_permissions(user, explicit=True) permissions = get_permissions(user, explicit=True)
assert permissions['user_groups'][user_group.users_group_name] == \ assert permissions['user_groups'][user_group.users_group_name] == \
@ -404,6 +417,7 @@ def test_cached_perms_data_user_group_permissions_not_inheriting_defaults(
# Don't inherit default object permissions # Don't inherit default object permissions
UserModel().grant_perm(user, 'hg.inherit_default_perms.false') UserModel().grant_perm(user, 'hg.inherit_default_perms.false')
Session().commit()
permissions = get_permissions(user) permissions = get_permissions(user)
assert permissions['user_groups'][user_group.users_group_name] == \ assert permissions['user_groups'][user_group.users_group_name] == \
@ -447,6 +461,7 @@ def test_permission_calculator_repository_permissions_robustness_from_user(
RepoModel().grant_user_permission( RepoModel().grant_user_permission(
backend_random.repo, user, 'repository.write') backend_random.repo, user, 'repository.write')
Session().commit()
calculator = auth.PermissionCalculator( calculator = auth.PermissionCalculator(
user.user_id, {}, False, False, False, 'higherwin') user.user_id, {}, False, False, False, 'higherwin')
@ -610,7 +625,7 @@ def test_auth_by_token(test_token, test_roles, auth_result, expected_tokens,
user = user_util.create_user() user = user_util.create_user()
user_id = user.user_id user_id = user.user_id
for token, role, expires in expected_tokens: for token, role, expires in expected_tokens:
new_token = AuthTokenModel().create(user_id, 'test-token', expires, role) new_token = AuthTokenModel().create(user_id, u'test-token', expires, role)
new_token.api_key = token # inject known name for testing... new_token.api_key = token # inject known name for testing...
assert auth_result == user.authenticate_by_token( assert auth_result == user.authenticate_by_token(

View file

@ -277,6 +277,8 @@ class TestCreateOrUpdateRepoHookSettings(object):
with pytest.raises(ValueError) as exc_info: with pytest.raises(ValueError) as exc_info:
model.create_or_update_repo_hook_settings(data) model.create_or_update_repo_hook_settings(data)
Session().commit()
msg = 'The given data does not contain {} key'.format(deleted_key) msg = 'The given data does not contain {} key'.format(deleted_key)
assert str(exc_info.value) == msg assert str(exc_info.value) == msg
@ -286,6 +288,8 @@ class TestCreateOrUpdateRepoHookSettings(object):
settings_util.create_repo_rhodecode_ui( settings_util.create_repo_rhodecode_ui(
repo_stub, section, None, key=key, active=False) repo_stub, section, None, key=key, active=False)
model.create_or_update_repo_hook_settings(HOOKS_FORM_DATA) model.create_or_update_repo_hook_settings(HOOKS_FORM_DATA)
Session().commit()
for section, key in model.HOOKS_SETTINGS: for section, key in model.HOOKS_SETTINGS:
ui = model.repo_settings.get_ui_by_section_and_key(section, key) ui = model.repo_settings.get_ui_by_section_and_key(section, key)
assert ui.ui_active is True assert ui.ui_active is True
@ -297,6 +301,7 @@ class TestCreateOrUpdateRepoHookSettings(object):
with global_patch as global_mock: with global_patch as global_mock:
global_mock.get_ui_by_section_and_key.return_value = global_setting global_mock.get_ui_by_section_and_key.return_value = global_setting
model.create_or_update_repo_hook_settings(HOOKS_FORM_DATA) model.create_or_update_repo_hook_settings(HOOKS_FORM_DATA)
Session().commit()
class TestUpdateGlobalHookSettings(object): class TestUpdateGlobalHookSettings(object):
@ -309,6 +314,8 @@ class TestUpdateGlobalHookSettings(object):
with pytest.raises(ValueError) as exc_info: with pytest.raises(ValueError) as exc_info:
model.update_global_hook_settings(data) model.update_global_hook_settings(data)
Session().commit()
msg = 'The given data does not contain {} key'.format(deleted_key) msg = 'The given data does not contain {} key'.format(deleted_key)
assert str(exc_info.value) == msg assert str(exc_info.value) == msg
@ -322,6 +329,8 @@ class TestUpdateGlobalHookSettings(object):
session_patcher = mock.patch('rhodecode.model.settings.Session') session_patcher = mock.patch('rhodecode.model.settings.Session')
with get_settings_patcher as get_settings_mock, session_patcher: with get_settings_patcher as get_settings_mock, session_patcher:
model.update_global_hook_settings(HOOKS_FORM_DATA) model.update_global_hook_settings(HOOKS_FORM_DATA)
Session().commit()
assert setting_mock.ui_active is True assert setting_mock.ui_active is True
assert get_settings_mock.call_count == 3 assert get_settings_mock.call_count == 3
@ -333,6 +342,8 @@ class TestCreateOrUpdateRepoGeneralSettings(object):
model, '_create_or_update_general_settings') model, '_create_or_update_general_settings')
with create_patch as create_mock: with create_patch as create_mock:
model.create_or_update_repo_pr_settings(GENERAL_FORM_DATA) model.create_or_update_repo_pr_settings(GENERAL_FORM_DATA)
Session().commit()
create_mock.assert_called_once_with( create_mock.assert_called_once_with(
model.repo_settings, GENERAL_FORM_DATA) model.repo_settings, GENERAL_FORM_DATA)
@ -380,6 +391,7 @@ class TestCreateOrUpdateGeneralSettings(object):
with pytest.raises(ValueError) as exc_info: with pytest.raises(ValueError) as exc_info:
model._create_or_update_general_settings(model.repo_settings, data) model._create_or_update_general_settings(model.repo_settings, data)
Session().commit()
msg = 'The given data does not contain {} key'.format(deleted_key) msg = 'The given data does not contain {} key'.format(deleted_key)
assert str(exc_info.value) == msg assert str(exc_info.value) == msg
@ -392,6 +404,7 @@ class TestCreateOrUpdateGeneralSettings(object):
model._create_or_update_general_settings( model._create_or_update_general_settings(
model.repo_settings, GENERAL_FORM_DATA) model.repo_settings, GENERAL_FORM_DATA)
Session().commit()
for name in model.GENERAL_SETTINGS: for name in model.GENERAL_SETTINGS:
setting = model.repo_settings.get_setting_by_name(name) setting = model.repo_settings.get_setting_by_name(name)
@ -403,12 +416,16 @@ class TestCreateRepoSvnSettings(object):
model = VcsSettingsModel(repo=repo_stub.repo_name) model = VcsSettingsModel(repo=repo_stub.repo_name)
with mock.patch.object(model, '_create_svn_settings') as create_mock: with mock.patch.object(model, '_create_svn_settings') as create_mock:
model.create_repo_svn_settings(SVN_FORM_DATA) model.create_repo_svn_settings(SVN_FORM_DATA)
Session().commit()
create_mock.assert_called_once_with(model.repo_settings, SVN_FORM_DATA) create_mock.assert_called_once_with(model.repo_settings, SVN_FORM_DATA)
def test_raises_exception_when_repository_is_not_specified(self): def test_raises_exception_when_repository_is_not_specified(self):
model = VcsSettingsModel() model = VcsSettingsModel()
with pytest.raises(Exception) as exc_info: with pytest.raises(Exception) as exc_info:
model.create_repo_svn_settings(SVN_FORM_DATA) model.create_repo_svn_settings(SVN_FORM_DATA)
Session().commit()
assert str(exc_info.value) == 'Repository is not specified' assert str(exc_info.value) == 'Repository is not specified'
@ -547,6 +564,8 @@ class TestCreateOrUpdateRepoHgSettings(object):
data.pop(field_to_remove) data.pop(field_to_remove)
with pytest.raises(ValueError) as exc_info: with pytest.raises(ValueError) as exc_info:
model.create_or_update_repo_hg_settings(data) model.create_or_update_repo_hg_settings(data)
Session().commit()
expected_message = 'The given data does not contain {} key'.format( expected_message = 'The given data does not contain {} key'.format(
field_to_remove) field_to_remove)
assert str(exc_info.value) == expected_message assert str(exc_info.value) == expected_message
@ -555,6 +574,8 @@ class TestCreateOrUpdateRepoHgSettings(object):
model = VcsSettingsModel() model = VcsSettingsModel()
with pytest.raises(Exception) as exc_info: with pytest.raises(Exception) as exc_info:
model.create_or_update_repo_hg_settings(self.FORM_DATA) model.create_or_update_repo_hg_settings(self.FORM_DATA)
Session().commit()
assert str(exc_info.value) == 'Repository is not specified' assert str(exc_info.value) == 'Repository is not specified'
@ -563,6 +584,8 @@ class TestUpdateGlobalSslSetting(object):
model = VcsSettingsModel() model = VcsSettingsModel()
with mock.patch.object(model, '_create_or_update_ui') as create_mock: with mock.patch.object(model, '_create_or_update_ui') as create_mock:
model.update_global_ssl_setting('False') model.update_global_ssl_setting('False')
Session().commit()
create_mock.assert_called_once_with( create_mock.assert_called_once_with(
model.global_settings, 'web', 'push_ssl', value='False') model.global_settings, 'web', 'push_ssl', value='False')
@ -572,6 +595,8 @@ class TestUpdateGlobalPathSetting(object):
model = VcsSettingsModel() model = VcsSettingsModel()
with mock.patch.object(model, '_create_or_update_ui') as create_mock: with mock.patch.object(model, '_create_or_update_ui') as create_mock:
model.update_global_path_setting('False') model.update_global_path_setting('False')
Session().commit()
create_mock.assert_called_once_with( create_mock.assert_called_once_with(
model.global_settings, 'paths', '/', value='False') model.global_settings, 'paths', '/', value='False')
@ -589,6 +614,8 @@ class TestCreateOrUpdateGlobalHgSettings(object):
model = VcsSettingsModel() model = VcsSettingsModel()
with mock.patch.object(model, '_create_or_update_ui') as create_mock: with mock.patch.object(model, '_create_or_update_ui') as create_mock:
model.create_or_update_global_hg_settings(self.FORM_DATA) model.create_or_update_global_hg_settings(self.FORM_DATA)
Session().commit()
expected_calls = [ expected_calls = [
mock.call(model.global_settings, 'extensions', 'largefiles', active=False, value=''), mock.call(model.global_settings, 'extensions', 'largefiles', active=False, value=''),
mock.call(model.global_settings, 'largefiles', 'usercache', value='/example/largefiles-store'), mock.call(model.global_settings, 'largefiles', 'usercache', value='/example/largefiles-store'),
@ -609,6 +636,8 @@ class TestCreateOrUpdateGlobalHgSettings(object):
data.pop(field_to_remove) data.pop(field_to_remove)
with pytest.raises(Exception) as exc_info: with pytest.raises(Exception) as exc_info:
model.create_or_update_global_hg_settings(data) model.create_or_update_global_hg_settings(data)
Session().commit()
expected_message = 'The given data does not contain {} key'.format( expected_message = 'The given data does not contain {} key'.format(
field_to_remove) field_to_remove)
assert str(exc_info.value) == expected_message assert str(exc_info.value) == expected_message
@ -624,6 +653,8 @@ class TestCreateOrUpdateGlobalGitSettings(object):
model = VcsSettingsModel() model = VcsSettingsModel()
with mock.patch.object(model, '_create_or_update_ui') as create_mock: with mock.patch.object(model, '_create_or_update_ui') as create_mock:
model.create_or_update_global_git_settings(self.FORM_DATA) model.create_or_update_global_git_settings(self.FORM_DATA)
Session().commit()
expected_calls = [ expected_calls = [
mock.call(model.global_settings, 'vcs_git_lfs', 'enabled', active=False, value=False), mock.call(model.global_settings, 'vcs_git_lfs', 'enabled', active=False, value=False),
mock.call(model.global_settings, 'vcs_git_lfs', 'store_location', value='/example/lfs-store'), mock.call(model.global_settings, 'vcs_git_lfs', 'store_location', value='/example/lfs-store'),
@ -649,6 +680,8 @@ class TestDeleteRepoSvnPattern(object):
delete_ui_patch = mock.patch.object(model.repo_settings, 'delete_ui') delete_ui_patch = mock.patch.object(model.repo_settings, 'delete_ui')
with delete_ui_patch as delete_ui_mock: with delete_ui_patch as delete_ui_mock:
model.delete_repo_svn_pattern(123) model.delete_repo_svn_pattern(123)
Session().commit()
delete_ui_mock.assert_called_once_with(-1) delete_ui_mock.assert_called_once_with(-1)
def test_raises_exception_when_repository_is_not_specified(self): def test_raises_exception_when_repository_is_not_specified(self):
@ -748,6 +781,8 @@ class TestGetRepoUiSettings(object):
for section in svn_sections: for section in svn_sections:
settings_util.create_rhodecode_ui( settings_util.create_rhodecode_ui(
section, 'repo', key='deadbeef' + section, active=False) section, 'repo', key='deadbeef' + section, active=False)
Session().commit()
model = VcsSettingsModel(repo=repo_stub.repo_name) model = VcsSettingsModel(repo=repo_stub.repo_name)
result = model.get_repo_ui_settings() result = model.get_repo_ui_settings()
for setting in result: for setting in result:
@ -795,6 +830,8 @@ class TestGetRepoGeneralSettings(object):
for key in VcsSettingsModel.GENERAL_SETTINGS: for key in VcsSettingsModel.GENERAL_SETTINGS:
settings_util.create_repo_rhodecode_setting( settings_util.create_repo_rhodecode_setting(
repo_stub, key, 'abcde', type_='unicode') repo_stub, key, 'abcde', type_='unicode')
Session().commit()
model = VcsSettingsModel(repo=repo_stub.repo_name) model = VcsSettingsModel(repo=repo_stub.repo_name)
result = model.get_repo_ui_settings() result = model.get_repo_ui_settings()
for key in result: for key in result:
@ -820,6 +857,8 @@ class TestGetGlobalGeneralSettings(object):
for key in VcsSettingsModel.GENERAL_SETTINGS: for key in VcsSettingsModel.GENERAL_SETTINGS:
settings_util.create_repo_rhodecode_setting( settings_util.create_repo_rhodecode_setting(
repo_stub, key, 'abcde', type_='unicode') repo_stub, key, 'abcde', type_='unicode')
Session().commit()
model = VcsSettingsModel(repo=repo_stub.repo_name) model = VcsSettingsModel(repo=repo_stub.repo_name)
result = model.get_global_general_settings() result = model.get_global_general_settings()
expected_result = model.global_settings.get_all_settings() expected_result = model.global_settings.get_all_settings()
@ -838,6 +877,8 @@ class TestGetGlobalUiSettings(object):
for section, key in VcsSettingsModel.HOOKS_SETTINGS: for section, key in VcsSettingsModel.HOOKS_SETTINGS:
settings_util.create_repo_rhodecode_ui( settings_util.create_repo_rhodecode_ui(
repo_stub, section, 'repo', key=key, active=False) repo_stub, section, 'repo', key=key, active=False)
Session().commit()
model = VcsSettingsModel(repo=repo_stub.repo_name) model = VcsSettingsModel(repo=repo_stub.repo_name)
result = model.get_global_ui_settings() result = model.get_global_ui_settings()
expected_result = model.global_settings.get_ui() expected_result = model.global_settings.get_ui()
@ -868,6 +909,8 @@ class TestGetGeneralSettings(object):
for key in VcsSettingsModel.GENERAL_SETTINGS: for key in VcsSettingsModel.GENERAL_SETTINGS:
settings_util.create_repo_rhodecode_setting( settings_util.create_repo_rhodecode_setting(
repo_stub, key, 'abcde', type_='unicode') repo_stub, key, 'abcde', type_='unicode')
Session().commit()
result = model.get_general_settings() result = model.get_general_settings()
expected_result = model.get_global_general_settings() expected_result = model.get_global_general_settings()
assert sorted(result) == sorted(expected_result) assert sorted(result) == sorted(expected_result)
@ -879,6 +922,8 @@ class TestGetGeneralSettings(object):
for key in VcsSettingsModel.GENERAL_SETTINGS: for key in VcsSettingsModel.GENERAL_SETTINGS:
settings_util.create_repo_rhodecode_setting( settings_util.create_repo_rhodecode_setting(
repo_stub, key, 'abcde', type_='unicode') repo_stub, key, 'abcde', type_='unicode')
Session().commit()
result = model.get_general_settings() result = model.get_general_settings()
expected_result = model.get_repo_general_settings() expected_result = model.get_repo_general_settings()
assert sorted(result) == sorted(expected_result) assert sorted(result) == sorted(expected_result)
@ -898,6 +943,8 @@ class TestGetUiSettings(object):
for section, key in VcsSettingsModel.HOOKS_SETTINGS: for section, key in VcsSettingsModel.HOOKS_SETTINGS:
settings_util.create_repo_rhodecode_ui( settings_util.create_repo_rhodecode_ui(
repo_stub, section, 'repo', key=key, active=True) repo_stub, section, 'repo', key=key, active=True)
Session().commit()
result = model.get_ui_settings() result = model.get_ui_settings()
expected_result = model.get_global_ui_settings() expected_result = model.get_global_ui_settings()
assert sorted(result) == sorted(expected_result) assert sorted(result) == sorted(expected_result)
@ -909,6 +956,8 @@ class TestGetUiSettings(object):
for section, key in VcsSettingsModel.HOOKS_SETTINGS: for section, key in VcsSettingsModel.HOOKS_SETTINGS:
settings_util.create_repo_rhodecode_ui( settings_util.create_repo_rhodecode_ui(
repo_stub, section, 'repo', key=key, active=True) repo_stub, section, 'repo', key=key, active=True)
Session().commit()
result = model.get_ui_settings() result = model.get_ui_settings()
expected_result = model.get_repo_ui_settings() expected_result = model.get_repo_ui_settings()
assert sorted(result) == sorted(expected_result) assert sorted(result) == sorted(expected_result)
@ -916,9 +965,12 @@ class TestGetUiSettings(object):
def test_repo_settings_filtered_by_section_and_key(self, repo_stub): def test_repo_settings_filtered_by_section_and_key(self, repo_stub):
model = VcsSettingsModel(repo=repo_stub.repo_name) model = VcsSettingsModel(repo=repo_stub.repo_name)
model.inherit_global_settings = False model.inherit_global_settings = False
args = ('section', 'key') args = ('section', 'key')
with mock.patch.object(model, 'get_repo_ui_settings') as settings_mock: with mock.patch.object(model, 'get_repo_ui_settings') as settings_mock:
model.get_ui_settings(*args) model.get_ui_settings(*args)
Session().commit()
settings_mock.assert_called_once_with(*args) settings_mock.assert_called_once_with(*args)
def test_global_settings_filtered_by_section_and_key(self): def test_global_settings_filtered_by_section_and_key(self):
@ -942,6 +994,8 @@ class TestGetSvnPatterns(object):
args = ('section', ) args = ('section', )
with mock.patch.object(model, 'get_repo_ui_settings') as settings_mock: with mock.patch.object(model, 'get_repo_ui_settings') as settings_mock:
model.get_svn_patterns(*args) model.get_svn_patterns(*args)
Session().commit()
settings_mock.assert_called_once_with(*args) settings_mock.assert_called_once_with(*args)
def test_global_settings_filtered_by_section_and_key(self): def test_global_settings_filtered_by_section_and_key(self):
@ -990,6 +1044,8 @@ class TestCreateOrUpdateRepoSettings(object):
model = VcsSettingsModel() model = VcsSettingsModel()
with pytest.raises(Exception) as exc_info: with pytest.raises(Exception) as exc_info:
model.create_or_update_repo_settings(data=self.FORM_DATA) model.create_or_update_repo_settings(data=self.FORM_DATA)
Session().commit()
assert str(exc_info.value) == 'Repository is not specified' assert str(exc_info.value) == 'Repository is not specified'
def test_only_svn_settings_are_updated_when_type_is_svn(self, backend_svn): def test_only_svn_settings_are_updated_when_type_is_svn(self, backend_svn):
@ -998,6 +1054,8 @@ class TestCreateOrUpdateRepoSettings(object):
with self._patch_model(model) as mocks: with self._patch_model(model) as mocks:
model.create_or_update_repo_settings( model.create_or_update_repo_settings(
data=self.FORM_DATA, inherit_global_settings=False) data=self.FORM_DATA, inherit_global_settings=False)
Session().commit()
mocks['create_repo_svn_settings'].assert_called_once_with( mocks['create_repo_svn_settings'].assert_called_once_with(
self.FORM_DATA) self.FORM_DATA)
non_called_methods = ( non_called_methods = (
@ -1013,6 +1071,7 @@ class TestCreateOrUpdateRepoSettings(object):
with self._patch_model(model) as mocks: with self._patch_model(model) as mocks:
model.create_or_update_repo_settings( model.create_or_update_repo_settings(
data=self.FORM_DATA, inherit_global_settings=False) data=self.FORM_DATA, inherit_global_settings=False)
Session().commit()
assert mocks['create_repo_svn_settings'].call_count == 0 assert mocks['create_repo_svn_settings'].call_count == 0
called_methods = ( called_methods = (
@ -1060,6 +1119,8 @@ class TestCreateOrUpdateRepoSettings(object):
with invalidation_patcher as invalidation_mock: with invalidation_patcher as invalidation_mock:
model.create_or_update_repo_settings( model.create_or_update_repo_settings(
data=self.FORM_DATA, inherit_global_settings=True) data=self.FORM_DATA, inherit_global_settings=True)
Session().commit()
invalidation_mock.assert_called_once_with( invalidation_mock.assert_called_once_with(
repo_stub.repo_name, delete=True) repo_stub.repo_name, delete=True)
@ -1069,6 +1130,8 @@ class TestCreateOrUpdateRepoSettings(object):
with self._patch_model(model): with self._patch_model(model):
model.create_or_update_repo_settings( model.create_or_update_repo_settings(
data=self.FORM_DATA, inherit_global_settings=False) data=self.FORM_DATA, inherit_global_settings=False)
Session().commit()
assert model.inherit_global_settings is False assert model.inherit_global_settings is False
def _patch_model(self, model): def _patch_model(self, model):

View file

@ -79,21 +79,23 @@ class TestPermissions(object):
def cleanup(self): def cleanup(self):
if hasattr(self, 'test_repo'): if hasattr(self, 'test_repo'):
RepoModel().delete(repo=self.test_repo) RepoModel().delete(repo=self.test_repo)
Session().commit()
if hasattr(self, 'g1'): if hasattr(self, 'g1'):
RepoGroupModel().delete(self.g1.group_id) RepoGroupModel().delete(self.g1.group_id)
if hasattr(self, 'g2'): if hasattr(self, 'g2'):
RepoGroupModel().delete(self.g2.group_id) RepoGroupModel().delete(self.g2.group_id)
Session().commit()
UserModel().delete(self.u1) UserModel().delete(self.u1, handle_repos='delete', handle_repo_groups='delete')
UserModel().delete(self.u2) UserModel().delete(self.u2, handle_repos='delete', handle_repo_groups='delete')
UserModel().delete(self.u3) UserModel().delete(self.u3, handle_repos='delete', handle_repo_groups='delete')
UserModel().delete(self.a1) UserModel().delete(self.a1, handle_repos='delete', handle_repo_groups='delete')
Session().commit()
if hasattr(self, 'ug1'): if hasattr(self, 'ug1'):
UserGroupModel().delete(self.ug1, force=True) UserGroupModel().delete(self.ug1, force=True)
Session().commit()
Session().commit()
def test_default_perms_set(self, repo_name): def test_default_perms_set(self, repo_name):
assert repo_perms(self.u1)[repo_name] == 'repository.read' assert repo_perms(self.u1)[repo_name] == 'repository.read'
@ -183,6 +185,7 @@ class TestPermissions(object):
new_perm_gr = 'repository.write' new_perm_gr = 'repository.write'
RepoModel().grant_user_group_permission( RepoModel().grant_user_group_permission(
repo=repo_name, group_name=self.ug1, perm=new_perm_gr) repo=repo_name, group_name=self.ug1, perm=new_perm_gr)
Session().commit()
assert repo_perms(self.u1)[repo_name] == new_perm assert repo_perms(self.u1)[repo_name] == new_perm
assert group_perms(self.u1) == {} assert group_perms(self.u1) == {}
@ -197,6 +200,7 @@ class TestPermissions(object):
new_perm_gr = 'repository.write' new_perm_gr = 'repository.write'
RepoModel().grant_user_group_permission( RepoModel().grant_user_group_permission(
repo=repo_name, group_name=self.ug1, perm=new_perm_gr) repo=repo_name, group_name=self.ug1, perm=new_perm_gr)
Session().commit()
assert repo_perms(self.u3)[repo_name] == new_perm_gr assert repo_perms(self.u3)[repo_name] == new_perm_gr
assert group_perms(self.u3) == {} assert group_perms(self.u3) == {}
@ -220,6 +224,7 @@ class TestPermissions(object):
new_perm_l = 'repository.read' new_perm_l = 'repository.read'
RepoModel().grant_user_group_permission( RepoModel().grant_user_group_permission(
repo=repo_name, group_name=self.ug1, perm=new_perm_l) repo=repo_name, group_name=self.ug1, perm=new_perm_l)
Session().commit()
assert repo_perms(self.u1)[repo_name] == new_perm_h assert repo_perms(self.u1)[repo_name] == new_perm_h
assert group_perms(self.u1) == {} assert group_perms(self.u1) == {}
@ -281,6 +286,8 @@ class TestPermissions(object):
# set default permission to none # set default permission to none
RepoGroupModel().grant_user_permission( RepoGroupModel().grant_user_permission(
repo_group=self.g1, user=self.anon, perm='group.none') repo_group=self.g1, user=self.anon, perm='group.none')
Session().commit()
# make group # make group
self.ug1 = fixture.create_user_group('G1') self.ug1 = fixture.create_user_group('G1')
# add user to group # add user to group
@ -501,6 +508,7 @@ class TestPermissions(object):
UserGroupModel().add_user_to_group(self.ug1, self.u1) UserGroupModel().add_user_to_group(self.ug1, self.u1)
RepoGroupModel().grant_user_group_permission( RepoGroupModel().grant_user_group_permission(
repo_group=self.g1, group_name=self.ug1, perm='group.write') repo_group=self.g1, group_name=self.ug1, perm='group.write')
Session().commit()
# Verify that user does not get any special permission if he is not # Verify that user does not get any special permission if he is not
# owner # owner
@ -515,6 +523,7 @@ class TestPermissions(object):
self.g1 = fixture.create_repo_group('test1') self.g1 = fixture.create_repo_group('test1')
RepoGroupModel().grant_user_permission( RepoGroupModel().grant_user_permission(
repo_group=self.g1, user=self.u1, perm='group.write') repo_group=self.g1, user=self.u1, perm='group.write')
Session().commit()
# Verify that user does not get any special permission if he is not # Verify that user does not get any special permission if he is not
# owner # owner
@ -524,7 +533,7 @@ class TestPermissions(object):
self.g1.user = self.u1 self.g1.user = self.u1
assert group_perms(self.u1) == {u'test1': 'group.admin'} assert group_perms(self.u1) == {u'test1': 'group.admin'}
def _test_def_user_perm_equal( def assert_user_perm_equal(
self, user, change_factor=0, compare_keys=None): self, user, change_factor=0, compare_keys=None):
perms = UserToPerm.query().filter(UserToPerm.user == user).all() perms = UserToPerm.query().filter(UserToPerm.user == user).all()
assert len(perms) == \ assert len(perms) == \
@ -533,7 +542,7 @@ class TestPermissions(object):
assert set( assert set(
x.permissions.permission_name for x in perms) == compare_keys x.permissions.permission_name for x in perms) == compare_keys
def _test_def_user_group_perm_equal( def assert_def_user_group_perm_equal(
self, user_group, change_factor=0, compare_keys=None): self, user_group, change_factor=0, compare_keys=None):
perms = UserGroupToPerm.query().filter( perms = UserGroupToPerm.query().filter(
UserGroupToPerm.users_group == user_group).all() UserGroupToPerm.users_group == user_group).all()
@ -545,21 +554,21 @@ class TestPermissions(object):
def test_set_default_permissions(self): def test_set_default_permissions(self):
PermissionModel().create_default_user_permissions(user=self.u1) PermissionModel().create_default_user_permissions(user=self.u1)
self._test_def_user_perm_equal(user=self.u1) self.assert_user_perm_equal(user=self.u1)
def test_set_default_permissions_after_one_is_missing(self): def test_set_default_permissions_after_one_is_missing(self):
PermissionModel().create_default_user_permissions(user=self.u1) PermissionModel().create_default_user_permissions(user=self.u1)
self._test_def_user_perm_equal(user=self.u1) self.assert_user_perm_equal(user=self.u1)
# now we delete one, it should be re-created after another call # now we delete one, it should be re-created after another call
perms = UserToPerm.query().filter(UserToPerm.user == self.u1).all() perms = UserToPerm.query().filter(UserToPerm.user == self.u1).all()
Session().delete(perms[0]) Session().delete(perms[0])
Session().commit() Session().commit()
self._test_def_user_perm_equal(user=self.u1, change_factor=-1) self.assert_user_perm_equal(user=self.u1, change_factor=-1)
# create missing one ! # create missing one !
PermissionModel().create_default_user_permissions(user=self.u1) PermissionModel().create_default_user_permissions(user=self.u1)
self._test_def_user_perm_equal(user=self.u1) self.assert_user_perm_equal(user=self.u1)
@pytest.mark.parametrize("perm, modify_to", [ @pytest.mark.parametrize("perm, modify_to", [
('repository.read', 'repository.none'), ('repository.read', 'repository.none'),
@ -571,7 +580,7 @@ class TestPermissions(object):
]) ])
def test_set_default_permissions_after_modification(self, perm, modify_to): def test_set_default_permissions_after_modification(self, perm, modify_to):
PermissionModel().create_default_user_permissions(user=self.u1) PermissionModel().create_default_user_permissions(user=self.u1)
self._test_def_user_perm_equal(user=self.u1) self.assert_user_perm_equal(user=self.u1)
old = Permission.get_by_key(perm) old = Permission.get_by_key(perm)
new = Permission.get_by_key(modify_to) new = Permission.get_by_key(modify_to)
@ -587,28 +596,28 @@ class TestPermissions(object):
Session().commit() Session().commit()
PermissionModel().create_default_user_permissions(user=self.u1) PermissionModel().create_default_user_permissions(user=self.u1)
self._test_def_user_perm_equal(user=self.u1) self.assert_user_perm_equal(user=self.u1)
def test_clear_user_perms(self): def test_clear_user_perms(self):
PermissionModel().create_default_user_permissions(user=self.u1) PermissionModel().create_default_user_permissions(user=self.u1)
self._test_def_user_perm_equal(user=self.u1) self.assert_user_perm_equal(user=self.u1)
# now clear permissions # now clear permissions
cleared = PermissionModel()._clear_user_perms(self.u1.user_id) cleared = PermissionModel()._clear_user_perms(self.u1.user_id)
self._test_def_user_perm_equal(user=self.u1, self.assert_user_perm_equal(user=self.u1,
change_factor=len(cleared)*-1) change_factor=len(cleared)*-1)
def test_clear_user_group_perms(self): def test_clear_user_group_perms(self):
self.ug1 = fixture.create_user_group('G1') self.ug1 = fixture.create_user_group('G1')
PermissionModel().create_default_user_group_permissions( PermissionModel().create_default_user_group_permissions(
user_group=self.ug1) user_group=self.ug1)
self._test_def_user_group_perm_equal(user_group=self.ug1) self.assert_def_user_group_perm_equal(user_group=self.ug1)
# now clear permissions # now clear permissions
cleared = PermissionModel()._clear_user_group_perms( cleared = PermissionModel()._clear_user_group_perms(
self.ug1.users_group_id) self.ug1.users_group_id)
self._test_def_user_group_perm_equal(user_group=self.ug1, self.assert_def_user_group_perm_equal(user_group=self.ug1,
change_factor=len(cleared)*-1) change_factor=len(cleared)*-1)
@pytest.mark.parametrize("form_result", [ @pytest.mark.parametrize("form_result", [
{}, {},
@ -626,7 +635,7 @@ class TestPermissions(object):
Session().commit() Session().commit()
change_factor = -1 * (len(Permission.DEFAULT_USER_PERMISSIONS) change_factor = -1 * (len(Permission.DEFAULT_USER_PERMISSIONS)
- len(form_result.keys())) - len(form_result.keys()))
self._test_def_user_perm_equal( self.assert_user_perm_equal(
self.u1, change_factor=change_factor) self.u1, change_factor=change_factor)
@pytest.mark.parametrize("form_result", [ @pytest.mark.parametrize("form_result", [
@ -646,7 +655,7 @@ class TestPermissions(object):
Session().commit() Session().commit()
change_factor = -1 * (len(Permission.DEFAULT_USER_PERMISSIONS) change_factor = -1 * (len(Permission.DEFAULT_USER_PERMISSIONS)
- len(form_result.keys())) - len(form_result.keys()))
self._test_def_user_group_perm_equal( self.assert_def_user_group_perm_equal(
self.ug1, change_factor=change_factor) self.ug1, change_factor=change_factor)
@pytest.mark.parametrize("group_active, expected_perm", [ @pytest.mark.parametrize("group_active, expected_perm", [

View file

@ -124,6 +124,8 @@ class TestPullRequestModel(object):
PullRequestModel().update_reviewers( PullRequestModel().update_reviewers(
pull_request, [(pull_request.author, ['author'], False, [])], pull_request, [(pull_request.author, ['author'], False, [])],
pull_request.author) pull_request.author)
Session().commit()
prs = PullRequestModel().get_awaiting_my_review( prs = PullRequestModel().get_awaiting_my_review(
pull_request.target_repo, user_id=pull_request.author.user_id) pull_request.target_repo, user_id=pull_request.author.user_id)
assert isinstance(prs, list) assert isinstance(prs, list)
@ -133,6 +135,8 @@ class TestPullRequestModel(object):
PullRequestModel().update_reviewers( PullRequestModel().update_reviewers(
pull_request, [(pull_request.author, ['author'], False, [])], pull_request, [(pull_request.author, ['author'], False, [])],
pull_request.author) pull_request.author)
Session().commit()
pr_count = PullRequestModel().count_awaiting_my_review( pr_count = PullRequestModel().count_awaiting_my_review(
pull_request.target_repo, user_id=pull_request.author.user_id) pull_request.target_repo, user_id=pull_request.author.user_id)
assert pr_count == 1 assert pr_count == 1
@ -140,6 +144,7 @@ class TestPullRequestModel(object):
def test_delete_calls_cleanup_merge(self, pull_request): def test_delete_calls_cleanup_merge(self, pull_request):
repo_id = pull_request.target_repo.repo_id repo_id = pull_request.target_repo.repo_id
PullRequestModel().delete(pull_request, pull_request.author) PullRequestModel().delete(pull_request, pull_request.author)
Session().commit()
self.workspace_remove_mock.assert_called_once_with( self.workspace_remove_mock.assert_called_once_with(
repo_id, self.workspace_id) repo_id, self.workspace_id)
@ -147,6 +152,8 @@ class TestPullRequestModel(object):
def test_close_calls_cleanup_and_hook(self, pull_request): def test_close_calls_cleanup_and_hook(self, pull_request):
PullRequestModel().close_pull_request( PullRequestModel().close_pull_request(
pull_request, pull_request.author) pull_request, pull_request.author)
Session().commit()
repo_id = pull_request.target_repo.repo_id repo_id = pull_request.target_repo.repo_id
self.workspace_remove_mock.assert_called_once_with( self.workspace_remove_mock.assert_called_once_with(
@ -286,6 +293,7 @@ class TestPullRequestModel(object):
merge_extras['repository'] = pull_request.target_repo.repo_name merge_extras['repository'] = pull_request.target_repo.repo_name
PullRequestModel().merge_repo( PullRequestModel().merge_repo(
pull_request, pull_request.author, extras=merge_extras) pull_request, pull_request.author, extras=merge_extras)
Session().commit()
message = ( message = (
u'Merge pull request #{pr_id} from {source_repo} {source_ref_name}' u'Merge pull request #{pr_id} from {source_repo} {source_ref_name}'
@ -327,6 +335,7 @@ class TestPullRequestModel(object):
assert pull_request.pull_request_state == PullRequest.STATE_UPDATING assert pull_request.pull_request_state == PullRequest.STATE_UPDATING
PullRequestModel().merge_repo( PullRequestModel().merge_repo(
pull_request, pull_request.author, extras=merge_extras) pull_request, pull_request.author, extras=merge_extras)
Session().commit()
assert pull_request.pull_request_state == PullRequest.STATE_CREATED assert pull_request.pull_request_state == PullRequest.STATE_CREATED
@ -367,6 +376,7 @@ class TestPullRequestModel(object):
merge_extras['repository'] = pull_request.target_repo.repo_name merge_extras['repository'] = pull_request.target_repo.repo_name
PullRequestModel().merge_repo( PullRequestModel().merge_repo(
pull_request, pull_request.author, extras=merge_extras) pull_request, pull_request.author, extras=merge_extras)
Session().commit()
message = ( message = (
u'Merge pull request #{pr_id} from {source_repo} {source_ref_name}' u'Merge pull request #{pr_id} from {source_repo} {source_ref_name}'
@ -442,6 +452,7 @@ class TestIntegrationMerge(object):
with mock.patch.dict(rhodecode.CONFIG, extra_config, clear=False): with mock.patch.dict(rhodecode.CONFIG, extra_config, clear=False):
merge_state = PullRequestModel().merge_repo( merge_state = PullRequestModel().merge_repo(
pull_request, user_admin, extras=merge_extras) pull_request, user_admin, extras=merge_extras)
Session().commit()
assert merge_state.executed assert merge_state.executed
assert '_pre_push_hook' in capture_rcextensions assert '_pre_push_hook' in capture_rcextensions
@ -459,6 +470,7 @@ class TestIntegrationMerge(object):
pre_pull.side_effect = RepositoryError("Disallow push!") pre_pull.side_effect = RepositoryError("Disallow push!")
merge_status = PullRequestModel().merge_repo( merge_status = PullRequestModel().merge_repo(
pull_request, user_admin, extras=merge_extras) pull_request, user_admin, extras=merge_extras)
Session().commit()
assert not merge_status.executed assert not merge_status.executed
assert 'pre_push' not in capture_rcextensions assert 'pre_push' not in capture_rcextensions
@ -479,6 +491,8 @@ class TestIntegrationMerge(object):
Session().commit() Session().commit()
merge_status = PullRequestModel().merge_repo( merge_status = PullRequestModel().merge_repo(
pull_request, user_regular, extras=merge_extras) pull_request, user_regular, extras=merge_extras)
Session().commit()
assert not merge_status.executed assert not merge_status.executed
@ -889,6 +903,7 @@ def test_link_comments_to_version_only_updates_unlinked_comments(pr_util, config
version2 = pr_util.create_version_of_pull_request() version2 = pr_util.create_version_of_pull_request()
PullRequestModel()._link_comments_to_version(version2) PullRequestModel()._link_comments_to_version(version2)
Session().commit()
# Expect that only the new comment is linked to version2 # Expect that only the new comment is linked to version2
assert ( assert (

View file

@ -395,7 +395,7 @@ class TestVCSOperations(object):
user = user_util.create_user() user = user_util.create_user()
auth_token = AuthTokenModel().create( auth_token = AuthTokenModel().create(
user.user_id, 'test-token', -10, AuthTokenModel.cls.ROLE_VCS) user.user_id, u'test-token', -10, AuthTokenModel.cls.ROLE_VCS)
token = auth_token.api_key token = auth_token.api_key
clone_url = rc_web_server.repo_clone_url( clone_url = rc_web_server.repo_clone_url(
@ -412,7 +412,7 @@ class TestVCSOperations(object):
user = user_util.create_user() user = user_util.create_user()
auth_token = AuthTokenModel().create( auth_token = AuthTokenModel().create(
user.user_id, 'test-token', -1, AuthTokenModel.cls.ROLE_API) user.user_id, u'test-token', -1, AuthTokenModel.cls.ROLE_API)
token = auth_token.api_key token = auth_token.api_key
clone_url = rc_web_server.repo_clone_url( clone_url = rc_web_server.repo_clone_url(
@ -445,7 +445,7 @@ class TestVCSOperations(object):
'egg:rhodecode-enterprise-ce#rhodecode']) 'egg:rhodecode-enterprise-ce#rhodecode'])
user = user_util.create_user() user = user_util.create_user()
auth_token = AuthTokenModel().create( auth_token = AuthTokenModel().create(
user.user_id, 'test-token', -1, AuthTokenModel.cls.ROLE_VCS) user.user_id, u'test-token', -1, AuthTokenModel.cls.ROLE_VCS)
token = auth_token.api_key token = auth_token.api_key
# manually set scope # manually set scope
@ -466,7 +466,7 @@ class TestVCSOperations(object):
'egg:rhodecode-enterprise-ce#rhodecode']) 'egg:rhodecode-enterprise-ce#rhodecode'])
user = user_util.create_user() user = user_util.create_user()
auth_token = AuthTokenModel().create( auth_token = AuthTokenModel().create(
user.user_id, 'test-token', -1, AuthTokenModel.cls.ROLE_VCS) user.user_id, u'test-token', -1, AuthTokenModel.cls.ROLE_VCS)
token = auth_token.api_key token = auth_token.api_key
# manually set scope # manually set scope