tests: add some tests on BooleanOption

This commit is contained in:
Benjamin Renard 2023-01-09 13:33:14 +01:00
parent 6a7368deb5
commit 508a28e5c8

View file

@ -3,8 +3,13 @@
""" Tests on config lib """ """ Tests on config lib """
import logging import logging
import os
import configparser
import pytest
from mylib.config import Config, ConfigSection from mylib.config import Config, ConfigSection
from mylib.config import BooleanOption
from mylib.config import StringOption from mylib.config import StringOption
runned = {} runned = {}
@ -225,3 +230,117 @@ def test_logging_splited_stdout_stderr(capsys):
assert info_msg not in captured.err assert info_msg not in captured.err
assert err_msg in captured.err assert err_msg in captured.err
assert err_msg not in captured.out assert err_msg not in captured.out
#
# Test option types
#
@pytest.fixture()
def config_with_file(tmpdir):
config = Config('Test app')
config_dir = tmpdir.mkdir('config')
config_file = config_dir.join('config.ini')
config.save(os.path.join(config_file.dirname, config_file.basename))
return config
def generate_mock_input(expected_prompt, input_value):
def mock_input(self, prompt): # pylint: disable=unused-argument
assert prompt == expected_prompt
return input_value
return mock_input
# Boolean option
def test_boolean_option_from_config(config_with_file):
section = config_with_file.add_section('test')
default = True
option = section.add_option(
BooleanOption, 'test_bool', default=default)
config_with_file.save()
option.set(not default)
assert option._from_config is not default
option.set(default)
assert not option._isset_in_config_file
with pytest.raises(configparser.NoOptionError):
assert option._from_config is default
def test_boolean_option_ask_value(mocker):
config = Config('Test app')
section = config.add_section('test')
name = 'test_bool'
option = section.add_option(
BooleanOption, name, default=True)
mocker.patch(
'mylib.config.BooleanOption._get_user_input',
generate_mock_input(f'{name}: [Y/n] ', 'y')
)
assert option.ask_value(set_it=False) is True
mocker.patch(
'mylib.config.BooleanOption._get_user_input',
generate_mock_input(f'{name}: [Y/n] ', 'Y')
)
assert option.ask_value(set_it=False) is True
mocker.patch(
'mylib.config.BooleanOption._get_user_input',
generate_mock_input(f'{name}: [Y/n] ', '')
)
assert option.ask_value(set_it=False) is True
mocker.patch(
'mylib.config.BooleanOption._get_user_input',
generate_mock_input(f'{name}: [Y/n] ', 'n')
)
assert option.ask_value(set_it=False) is False
mocker.patch(
'mylib.config.BooleanOption._get_user_input',
generate_mock_input(f'{name}: [Y/n] ', 'N')
)
assert option.ask_value(set_it=False) is False
def test_boolean_option_to_config():
config = Config('Test app')
section = config.add_section('test')
default = True
option = section.add_option(BooleanOption, 'test_bool', default=default)
assert option.to_config(True) == 'true'
assert option.to_config(False) == 'false'
def test_boolean_option_export_to_config(config_with_file):
section = config_with_file.add_section('test')
name = 'test_bool'
comment = 'Test boolean'
default = True
option = section.add_option(
BooleanOption, name, default=default, comment=comment)
assert option.export_to_config() == f"""# {comment}
# Default: {str(default).lower()}
# {name} =
"""
option.set(not default)
assert option.export_to_config() == f"""# {comment}
# Default: {str(default).lower()}
{name} = {str(not default).lower()}
"""
option.set(default)
assert option.export_to_config() == f"""# {comment}
# Default: {str(default).lower()}
# {name} =
"""