def test_nested_update():
    node = ConfigNode({"key1": 1})

    with pytest.raises(AttributeError):
        node.key2

    with pytest.raises(RuntimeError):
        node.update("key2.key3", "asd", upsert=False)
def test_access_options_in_new_nodes(config_dict):
    config = ConfigNode(config_dict, strict_access=False)
    assert config.key1 == 1
    assert config.key10 is None

    config.update("key10.key11", "testme", upsert=True)
    assert config.key10.key11 == "testme"
    assert config.key10.key12 is None
def test_nested_upsert():
    node = ConfigNode({"key1": 1})

    with pytest.raises(AttributeError):
        node.key2

    node.update("key2.key3", "asd", upsert=True)
    assert node.key2.key3 == "asd"
def test_upsert():
    node = ConfigNode({"key1": 1})

    with pytest.raises(AttributeError):
        node.key2

    with pytest.raises(RuntimeError):
        node.update("key2", "asd", upsert=False)

    node.update("key2", "asd", upsert=True)
    assert node.key2 == "asd"
def test_update(config_dict):
    node = ConfigNode(config_dict)

    assert node.key1 == 1
    node.update("key1", 2)
    assert node.key1 == 2

    node.update("key1", {"newkey": 1})
    assert isinstance(node.key1, ConfigNode)
    assert node.key1.newkey == 1

    assert isinstance(node.key2.key4, ConfigNode)
    node.update("key2.key4", 1337)
    assert node.key2.key4 == 1337