def test_get_config():
    class SubConfig(Config):
        pass

    config = Config({'a': {'b': {'c': 1}}})

    sub_config_a = config.get_config('a')
    assert isinstance(sub_config_a, Config)
    assert not isinstance(sub_config_a, SubConfig)

    sub_config_b = config.get_config('a', config_class=SubConfig)
    assert isinstance(sub_config_b, Config)
    assert isinstance(sub_config_b, SubConfig)

    sub_config_c = sub_config_b.get_config('b')
    assert isinstance(sub_config_c, Config)
    assert not isinstance(sub_config_c, SubConfig)
def test_sub_config_does_not_mutate_parent_config():
    config = Config({'a': {'b': {'c': 1}}})

    assert 'a.b.d' not in config

    sub_config = config.get_config('a.b')
    sub_config['d'] = 2

    assert 'a.b.d' not in config