98 lines
3.1 KiB
Python
98 lines
3.1 KiB
Python
from app_skellington.cfg import Config
|
|
from app_skellington import _util
|
|
|
|
import pytest
|
|
|
|
@pytest.fixture
|
|
def sample_configspec_filepath():
|
|
return _util.get_asset(__name__, 'sample_config.spec')
|
|
|
|
@pytest.fixture
|
|
def sample_configini_filepath():
|
|
return _util.get_asset(__name__, 'sample_config.ini')
|
|
|
|
@pytest.fixture
|
|
def sample_full_configspec_filepath():
|
|
return _util.get_asset(__name__, 'sample_config_full.spec')
|
|
|
|
@pytest.fixture
|
|
def sample_full_configini_filepath():
|
|
return _util.get_asset(__name__, 'sample_config_full.ini')
|
|
|
|
@pytest.fixture
|
|
def sample_invalid_configspec_filepath():
|
|
return _util.get_asset(__name__, 'sample_config_invalid.spec')
|
|
|
|
class TestConfig_e2e:
|
|
def test_allows_reading_ini_and_no_spec(
|
|
self, sample_configini_filepath
|
|
):
|
|
cfg = Config(
|
|
configini_filepath=sample_configini_filepath
|
|
)
|
|
assert cfg['root_option'] == 'root_option_val', 'expecting default from config.spec (didnt get)'
|
|
assert cfg['app']['sub_option'] == 'sub_option_val', 'expecting default for sub option'
|
|
|
|
def test_allows_reading_spec_and_no_ini(
|
|
self, sample_configspec_filepath
|
|
):
|
|
cfg = Config(
|
|
configspec_filepath=sample_configspec_filepath
|
|
)
|
|
assert cfg['root_option'] == 'def_string', 'expecting default from config.spec (didnt get)'
|
|
|
|
# NOTE(MG) Changed the functionality to not do it this way.
|
|
# def test_constructor_fails_with_invalid_spec(
|
|
# self, sample_invalid_configspec_filepath
|
|
# ):
|
|
# with pytest.raises(Exception):
|
|
# cfg = Config(
|
|
# configspec_filepath=sample_invalid_configspec_filepath
|
|
# )
|
|
|
|
def test_allows_options_beyond_spec(
|
|
self, sample_configspec_filepath
|
|
):
|
|
cfg = Config(
|
|
configspec_filepath=sample_configspec_filepath
|
|
)
|
|
cfg['foo'] = 'test my value'
|
|
assert cfg['foo'] == 'test my value'
|
|
|
|
cfg['app']['bar'] = 'another value'
|
|
assert cfg['app']['bar'] == 'another value'
|
|
|
|
# def test_can_read_config_file_mutiple_times(self):
|
|
# pass
|
|
|
|
def test_can_override_config_file_manually(
|
|
self, sample_configini_filepath
|
|
):
|
|
cfg = Config(
|
|
configini_filepath=sample_configini_filepath
|
|
)
|
|
cfg['root_option'] = 'newval'
|
|
assert cfg['root_option'] == 'newval'
|
|
|
|
cfg['app']['sub_option'] = 'another_new_val'
|
|
assert cfg['app']['sub_option'] == 'another_new_val', 'expecting default for sub option'
|
|
|
|
def test_can_set_option_without_config(self):
|
|
cfg = Config()
|
|
cfg['foo'] = 'test my value'
|
|
assert cfg['foo'] == 'test my value'
|
|
|
|
cfg['app'] = {}
|
|
cfg['app']['bar'] = 'another value'
|
|
assert cfg['app']['bar'] == 'another value'
|
|
|
|
def test_uses_spec_as_defaults(
|
|
self, sample_configspec_filepath
|
|
):
|
|
cfg = Config(
|
|
configspec_filepath=sample_configspec_filepath
|
|
)
|
|
assert cfg['root_option'] == 'def_string', 'expecting default from config.spec (didnt get)'
|
|
assert cfg['app']['sub_option'] == 'def_sub', 'expecting default for sub option'
|
|
|