def test_reset_layer():
    d = ConfigTree(layers=['a', 'b', 'c'])
    d.set_with_metadata('test_key', 'test_value', 'a')
    d.set_with_metadata('test_key', 'test_value2', 'b')

    assert d.test_key == 'test_value2'
    d.reset_layer('b')
    assert d.test_key == 'test_value'
    d.set_with_metadata('test_key', 'test_value3', 'b')
def test_reset_layer_with_preserved_keys():
    d = ConfigTree(layers=['a', 'b', 'c'])
    d.set_with_metadata('test_key', 'test_value', 'a')
    d.set_with_metadata('test_key2', 'test_value2', 'a')
    d.set_with_metadata('test_key3', 'test_value3', 'a')
    d.set_with_metadata('test_key4', 'test_value4', 'a')
    d.set_with_metadata('test_key', 'test_value5', 'b')
    d.set_with_metadata('test_key2', 'test_value6', 'b')
    d.set_with_metadata('test_key3', 'test_value7', 'b')
    d.set_with_metadata('test_key4', 'test_value8', 'b')

    d.reset_layer('b', preserve_keys=['test_key2', 'test_key3'])
    assert d.test_key == 'test_value'
    assert d.test_key2 == 'test_value6'
    assert d.test_key3 == 'test_value7'
    assert d.test_key4 == 'test_value4'
def test_reset_layer_with_preserved_keys_at_depth():
    d = ConfigTree(layers=['a', 'b', 'c'])
    d.read_dict(
        {
            'test_key': {
                'test_key2': 'test_value',
                'test_key3': {
                    'test_key4': 'test_value2'
                }
            },
            'test_key5': {
                'test_key6': 'test_value3',
                'test_key7': 'test_value4'
            }
        },
        layer='a')
    d.read_dict(
        {
            'test_key': {
                'test_key2': 'test_value5',
                'test_key3': {
                    'test_key4': 'test_value6'
                }
            },
            'test_key5': {
                'test_key6': 'test_value7',
                'test_key7': 'test_value8'
            }
        },
        layer='b')

    d.reset_layer(
        'b',
        preserve_keys=['test_key.test_key3', 'test_key.test_key5.test_key6'])
    d.test_key.test_key2 == 'test_value'
    d.test_key.test_key3.test_key4 == 'test_value6'
    d.test_key5.test_key6 == 'test_value7'
    d.test_key5.test_key7 == 'test_value4'