def test_expanduser_config_cake_processing(sample_configs): # We don't want to write in the test-running-user's home directory # so we just check that the expansion has happened. home_dir = path.expanduser('~') with pytest.raises(ConfigFileNotFoundError) as e: load_cake(sample_configs, 'Expanduser Nonexistant File') assert home_dir in str(e.value)
def test_custom_config_parser(sample_configs): '''Test that we can pass in our own config parser''' arbitrary_cake_name = 'L1' # Make sure we are able to load this cake normally first (test self-check) load_cake(sample_configs, arbitrary_cake_name) # We are not testing ConfigParser itself, just that load_cake will use # the object we give it, so we give it something simple that we know # will break; we don't care exactly how it breaks, just that it does. with pytest.raises(Exception): load_cake(sample_configs, arbitrary_cake_name, into_config=object())
def test_env_var_can_define_new_section(sample_configs, monkeypatch): new_section = str(uuid4()) new_key = str(uuid4()) # First test that the section does not exist: with pytest.raises(NoSectionError): config = load_cake(sample_configs, 'L1') config.get(new_section, new_key) new_value = 'from environment creation' env_var_name = 'CONFIG+{}+{}'.format(new_section, new_key) monkeypatch.setenv(env_var_name, new_value) # Now check that it was created: config = load_cake(sample_configs, 'L1') assert config.get(new_section, new_key) == new_value
def test_config_ordering(sample_configs, config_name): '''Test that config_cake loaded the config files in the expected order''' config = load_cake(sample_configs, config_name) key1 = 'layer2' if 'L2' in config_name else 'basic' target = 'key1 from {} configuration'.format(key1) assert target == config.get('Foundation', 'key1') new_key = 'layer2' if 'L2' in config_name else 'layer1' target = 'new key from {} configuration'.format(new_key) assert target == config.get('New Stuff', 'new key')
def test_irrelevant_master_config_sections_are_not_in_config(sample_configs, cake_name): config = load_cake(sample_configs, cake_name) for cake_name in VALID_CAKE_NAMES: assert not config.has_section(cake_name)
def test_load_cake_includes_master_cake_keys_from_cake_section(sample_configs, config_name): config = load_cake(sample_configs, config_name) assert config_name in config.defaults()['name']
def test_munchifier(sample_configs): '''Test conversion from config parser to munch.''' # Munch has it's own tests, we're just spot checking our conversion function. config_by_dots = munchify_config(load_cake(sample_configs, 'L1')) assert config_by_dots.Foundation.key1 == 'key1 from basic configuration' assert config_by_dots.DEFAULT.key == 'with default section value'
def test_broken_config(sample_configs): '''Make sure we get the expected error when a cake references a non-existant file.''' with pytest.raises(ConfigFileNotFoundError): load_cake(sample_configs, 'Nonexistant File')
def test_env_var_override_section_can_be_defined_in_a_layer(sample_configs, monkeypatch): master = path.join(path.dirname(sample_configs), 'master_without_env_override_section.config') new_value = 'key1 from environment override' monkeypatch.setenv('FROM_LAYER~section_1~key1', new_value) config = load_cake(master, 'L3') assert config.get('section_1', 'key1') == new_value
def test_env_var_can_override_config_value(sample_configs, monkeypatch): new_value = 'key1 from environment override' monkeypatch.setenv('CONFIG+Foundation+key1', new_value) config = load_cake(sample_configs, 'L1') assert config.get('Foundation', 'key1') == new_value
def test_load_config_relative_filenames(sample_configs, config_name): # This is so simple because sample_configs is already creating the configs # in a temporary directory, not the current working directory. config = load_cake(sample_configs, config_name) assert config is not None assert config.sections(), 'Config data should have been loaded'
def test_fail_to_load_non_existant_config(sample_configs): with pytest.raises(NoSectionError): load_cake(sample_configs, str(uuid4()))