# Copyright (C) 2016-2023 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 . # # 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 pytest from rhodecode.tests import no_newline_id_generator from rhodecode.config.middleware import sanitize_settings_and_apply_defaults from rhodecode.config.settings_maker import SettingsMaker class TestHelperFunctions(object): @pytest.mark.parametrize('raw, expected', [ ('true', True), (u'true', True), ('yes', True), (u'yes', True), ('on', True), (u'on', True), ('false', False), (u'false', False), ('no', False), (u'no', False), ('off', False), (u'off', False), ('invalid-bool-value', False), ('invalid-∫øø@-√å@¨€', False), (u'invalid-∫øø@-√å@¨€', False), ]) def test_bool_func_helper(self, raw, expected): val = SettingsMaker._bool_func(raw) assert val == expected @pytest.mark.parametrize('raw, expected', [ ('', ''), ('test-string', 'test-string'), ('CaSe-TeSt', 'case-test'), ('test-string-烩€', 'test-string-烩€'), (u'test-string-烩€', u'test-string-烩€'), ]) def test_string_func_helper(self, raw, expected): val = SettingsMaker._string_func(raw) assert val == expected @pytest.mark.parametrize('raw, expected', [ ('', []), ('test', ['test']), ('CaSe-TeSt', ['CaSe-TeSt']), ('test-string-烩€', ['test-string-烩€']), (u'test-string-烩€', [u'test-string-烩€']), ('hg,git,svn', ['hg', 'git', 'svn']), ('hg, git, svn', ['hg', 'git', 'svn']), (', hg , git , svn , ', ['', 'hg', 'git', 'svn', '']), ('cheese,free node,other', ['cheese', 'free node', 'other']), ], ids=no_newline_id_generator) def test_list_setting_helper(self, raw, expected): val = SettingsMaker._list_func(raw) assert val == expected @pytest.mark.parametrize('raw, expected', [ ('hg git svn', ['hg', 'git', 'svn']), ], ids=no_newline_id_generator) def test_list_setting_spaces_helper(self, raw, expected): val = SettingsMaker._list_func(raw, sep=' ') assert val == expected @pytest.mark.parametrize('raw, expected', [ ('hg\ngit\nsvn', ['hg', 'git', 'svn']), (' hg\n git\n svn ', ['hg', 'git', 'svn']), ], ids=no_newline_id_generator) def test_list_setting_newlines_helper(self, raw, expected): val = SettingsMaker._list_func(raw, sep='\n') assert val == expected @pytest.mark.parametrize('raw, expected', [ ('0', 0), ('-0', 0), ('12345', 12345), ('-12345', -12345), (u'-12345', -12345), ]) def test_int_setting_helper(self, raw, expected): val = SettingsMaker._int_func(raw) assert val == expected @pytest.mark.parametrize('raw', [ ('0xff'), (''), ('invalid-int'), ('invalid-⁄~†'), (u'invalid-⁄~†'), ]) def test_int_setting_helper_invalid_input(self, raw): with pytest.raises(Exception): SettingsMaker._int_func(raw) class TestSanitizeVcsSettings(object): _bool_funcs = [ ('vcs.hooks.direct_calls', False), ('vcs.server.enable', True), ('vcs.start_server', False), ('startup.import_repos', False), ] _string_funcs = [ ('vcs.svn.compatible_version', ''), ('vcs.hooks.protocol', 'http'), ('vcs.hooks.host', '*'), ('vcs.scm_app_implementation', 'http'), ('vcs.server', ''), ('vcs.server.protocol', 'http'), ] _list_settings = [ ('vcs.backends', 'hg git'), ] # @pytest.mark.parametrize('key, default', _list_settings) # def test_list_setting_spacesep_list(self, key, default): # test_list = ['test', 'list', 'values', 'for', key] # input_value = ' '.join(test_list) # settings = {key: input_value} # sanitize_settings_and_apply_defaults({'__file__': ''}, settings) # assert settings[key] == test_list # # @pytest.mark.parametrize('key, default', _list_settings) # def test_list_setting_newlinesep_list(self, key, default): # test_list = ['test', 'list', 'values', 'for', key] # input_value = '\n'.join(test_list) # settings = {key: input_value} # sanitize_settings_and_apply_defaults({'__file__': ''}, settings) # assert settings[key] == test_list @pytest.mark.parametrize('key, default', _list_settings) def test_list_setting_commasep_list(self, key, default): test_list = ['test', 'list', 'values', 'for', key] input_value = ','.join(test_list) settings = {key: input_value} sanitize_settings_and_apply_defaults({'__file__': ''}, settings) assert settings[key] == test_list @pytest.mark.parametrize('key, default', _list_settings) def test_list_setting_comma_and_space_sep_list(self, key, default): test_list = ['test', 'list', 'values', 'for', key] input_value = ', '.join(test_list) settings = {key: input_value} sanitize_settings_and_apply_defaults({'__file__': ''}, settings) assert settings[key] == test_list @pytest.mark.parametrize('key, default', _string_funcs) def test_string_func_string(self, key, default): test_value = 'test-string-for-{}'.format(key) settings = {key: test_value} sanitize_settings_and_apply_defaults({'__file__': ''}, settings) assert settings[key] == test_value @pytest.mark.parametrize('key, default', _string_funcs) def test_string_func_default(self, key, default): settings = {} sanitize_settings_and_apply_defaults({'__file__': ''}, settings) assert settings[key] == default # @pytest.mark.parametrize('key, default', _string_funcs) # def test_string_func_lowercase(self, key, default): # test_value = 'Test-String-For-{}'.format(key) # settings = {key: test_value} # sanitize_settings_and_apply_defaults({'__file__': ''}, settings) # assert settings[key] == test_value.lower() @pytest.mark.parametrize('key, default', _bool_funcs) def test_bool_func_true(self, key, default): settings = {key: 'true'} sanitize_settings_and_apply_defaults({'__file__': ''}, settings) assert settings[key] is True @pytest.mark.parametrize('key, default', _bool_funcs) def test_bool_func_false(self, key, default): settings = {key: 'false'} sanitize_settings_and_apply_defaults({'__file__': ''}, settings) assert settings[key] is False @pytest.mark.parametrize('key, default', _bool_funcs) def test_bool_func_invalid_string(self, key, default): settings = {key: 'no-bool-val-string'} sanitize_settings_and_apply_defaults({'__file__': ''}, settings) assert settings[key] is False @pytest.mark.parametrize('key, default', _bool_funcs) def test_bool_func_default(self, key, default): settings = {} sanitize_settings_and_apply_defaults({'__file__': ''}, settings) assert settings[key] is default