##// END OF EJS Templates
dependencies: Adding Bower out of nixpkgs...
dependencies: Adding Bower out of nixpkgs Usually bower would be installed globally, so it seems to be appropriate to use the one out of the nixpkgs so that we don't have to pin a specific version ourselves.

File last commit:

r572:a3054906 default
r709:a198b78f default
Show More
test_mod_dav_svn_config.py
146 lines | 5.4 KiB | text/x-python | PythonLexer
/ rhodecode / svn_support / tests / test_mod_dav_svn_config.py
Martin Bornhold
svn: Add test to check the config file generation.
r564 # -*- coding: utf-8 -*-
# Copyright (C) 2016-2016 RhodeCode GmbH
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License, version 3
# (only), as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# This program is dual-licensed. If you wish to learn more about the
# RhodeCode Enterprise Edition, including its added features, Support services,
# and proprietary license terms, please see https://rhodecode.com/licenses/
import mock
import re
import shutil
import tempfile
from pyramid import testing
Martin Bornhold
svn: Adapt tests to recent changes in implementation.
r572 from rhodecode.svn_support import config_keys, utils
Martin Bornhold
svn: Add test to check the config file generation.
r564
class TestModDavSvnConfig(object):
@classmethod
def setup_class(cls):
# Make mako renderer available in tests.
config = testing.setUp()
config.include('pyramid_mako')
# Temporary directory holding the generated config files.
cls.tempdir = tempfile.mkdtemp(suffix='pytest-mod-dav-svn')
Martin Bornhold
svn: Adapt tests to recent changes in implementation.
r572 cls.location_root = '/location/root'
cls.parent_path_root = '/parent/path/root'
Martin Bornhold
svn: Add test to check the config file generation.
r564
@classmethod
def teardown_class(cls):
testing.tearDown()
shutil.rmtree(cls.tempdir, ignore_errors=True)
@classmethod
def get_settings(cls):
config_file_path = tempfile.mkstemp(
suffix='mod-dav-svn.conf', dir=cls.tempdir)[1]
return {
Martin Bornhold
svn: Rename keys.py to config_keys.py
r567 config_keys.config_file_path: config_file_path,
Martin Bornhold
svn: Adapt tests to recent changes in implementation.
r572 config_keys.location_root: cls.location_root,
config_keys.parent_path_root: cls.parent_path_root,
Martin Bornhold
svn: Rename keys.py to config_keys.py
r567 config_keys.list_parent_path: True,
Martin Bornhold
svn: Add test to check the config file generation.
r564 }
@classmethod
def get_repo_groups(cls, count=1):
repo_groups = []
for num in range(0, count):
Martin Bornhold
svn: Adapt tests to recent changes in implementation.
r572 full_path = '/path/to/RepoGroup{}'.format(num)
Martin Bornhold
svn: Add test to check the config file generation.
r564 repo_group_mock = mock.MagicMock()
Martin Bornhold
svn: Adapt tests to recent changes in implementation.
r572 repo_group_mock.full_path = full_path
repo_group_mock.full_path_splitted = full_path.split('/')
Martin Bornhold
svn: Add test to check the config file generation.
r564 repo_groups.append(repo_group_mock)
return repo_groups
Martin Bornhold
svn: Adapt tests to recent changes in implementation.
r572 def assert_root_location_directive(self, config):
pattern = '<Location {location}>'.format(location=self.location_root)
assert len(re.findall(pattern, config)) == 1
def assert_group_location_directive(self, config, group_path):
pattern = '<Location {location}{group_path}>'.format(
location=self.location_root, group_path=group_path)
assert len(re.findall(pattern, config)) == 1
Martin Bornhold
svn: Add test to check the config file generation.
r564 @mock.patch('rhodecode.svn_support.utils.RepoGroup')
def test_generate_mod_dav_svn_config(self, RepoGroupMock):
num_groups = 3
RepoGroupMock.get_all_repo_groups.return_value = self.get_repo_groups(
count=num_groups)
# Execute the method under test.
settings = self.get_settings()
Martin Bornhold
svn: Adapt tests to recent changes in implementation.
r572 utils.generate_mod_dav_svn_config(settings)
Martin Bornhold
svn: Add test to check the config file generation.
r564
# Read generated file.
Martin Bornhold
svn: Rename keys.py to config_keys.py
r567 with open(settings[config_keys.config_file_path], 'r') as file_:
Martin Bornhold
svn: Add test to check the config file generation.
r564 content = file_.read()
Martin Bornhold
svn: Adapt tests to recent changes in implementation.
r572 # Assert that one location directive exists for each repository group.
for group in self.get_repo_groups(count=num_groups):
self.assert_group_location_directive(content, group.full_path)
Martin Bornhold
svn: Add test to check the config file generation.
r564
Martin Bornhold
svn: Adapt tests to recent changes in implementation.
r572 # Assert that the root location directive exists.
self.assert_root_location_directive(content)
Martin Bornhold
svn: Add test to check the config file generation.
r564
@mock.patch('rhodecode.svn_support.utils.RepoGroup')
def test_list_parent_path_on(self, RepoGroupMock):
RepoGroupMock.get_all_repo_groups.return_value = self.get_repo_groups()
# Execute the method under test.
settings = self.get_settings()
Martin Bornhold
svn: Rename keys.py to config_keys.py
r567 settings[config_keys.list_parent_path] = True
Martin Bornhold
svn: Adapt tests to recent changes in implementation.
r572 utils.generate_mod_dav_svn_config(settings)
Martin Bornhold
svn: Add test to check the config file generation.
r564
# Read generated file.
Martin Bornhold
svn: Rename keys.py to config_keys.py
r567 with open(settings[config_keys.config_file_path], 'r') as file_:
Martin Bornhold
svn: Add test to check the config file generation.
r564 content = file_.read()
# Make assertions.
assert not re.search('SVNListParentPath\s+Off', content)
assert re.search('SVNListParentPath\s+On', content)
@mock.patch('rhodecode.svn_support.utils.RepoGroup')
def test_list_parent_path_off(self, RepoGroupMock):
RepoGroupMock.get_all_repo_groups.return_value = self.get_repo_groups()
# Execute the method under test.
settings = self.get_settings()
Martin Bornhold
svn: Rename keys.py to config_keys.py
r567 settings[config_keys.list_parent_path] = False
Martin Bornhold
svn: Adapt tests to recent changes in implementation.
r572 utils.generate_mod_dav_svn_config(settings)
Martin Bornhold
svn: Add test to check the config file generation.
r564
# Read generated file.
Martin Bornhold
svn: Rename keys.py to config_keys.py
r567 with open(settings[config_keys.config_file_path], 'r') as file_:
Martin Bornhold
svn: Add test to check the config file generation.
r564 content = file_.read()
# Make assertions.
assert re.search('SVNListParentPath\s+Off', content)
assert not re.search('SVNListParentPath\s+On', content)
Martin Bornhold
svn: Adapt tests to recent changes in implementation.
r572
@mock.patch('rhodecode.svn_support.utils.log')
def test_write_does_not_raise_on_error(self, LogMock):
"""
Writing the configuration to file should never raise exceptions.
If e.g. path points to a place without write permissions.
"""
utils._write_mod_dav_svn_config(
'content', '/dev/null/not/existing/path')
# Assert that we log the exception.
assert LogMock.exception.called