datasources 0.1.5

Async datasource interfaces, middleware, registry, and test doubles
Documentation
use crate::{default, register, reset, IsolationLevel, MockDriver};

fn clear_env() {
    reset();
    for key in [
        "INSTALLED_PROVIDERS",
        "DATASOURCE_URL",
        "PROVIDER",
    ] {
        std::env::remove_var(key);
    }
    register("sqlite", MockDriver::arc());
    std::env::set_var("PROVIDER", "sqlite");
}

#[tokio::test]
async fn commit_or_abort() {
    let _guard = super::env_lock();
    clear_env();
    let ds = default().expect("default");
    let connection = ds.create_connection().await.expect("connection");
    connection.open().await.expect("open");
    let txn = connection.start_transaction(None).await.expect("txn");
    let saved = true;
    if saved {
        txn.commit().await.expect("commit");
    } else {
        txn.abort().await.expect("abort");
    }
    assert_eq!(txn.isolation(), IsolationLevel::ReadCommitted);
}