graphile_worker_database 0.1.5

Database driver abstraction for graphile_worker
Documentation
use super::*;

#[tokio::test]
async fn database_wrapper_delegates_to_inner_driver() {
    let database = Database::new(MockDriver {
        rows: vec![row_mapping::cells([("value", DbCell::I32(1))])],
    });
    let cloned = Database::from(&database);

    assert!(format!("{database:?}").contains("Database"));
    assert!(cloned.downcast_ref::<MockDriver>().is_some());

    assert_eq!(
        database
            .fetch_one("select value", DbParams::new())
            .await
            .unwrap()
            .try_get::<i32>("value")
            .unwrap(),
        1
    );
    assert_eq!(
        database
            .fetch_optional("select value", DbParams::new())
            .await
            .unwrap()
            .expect("one row")
            .try_get::<i32>("value")
            .unwrap(),
        1
    );
    assert!(database.listen("events").await.unwrap().is_none());
    assert_eq!(
        database.execute("select 1", DbParams::new()).await.unwrap(),
        7
    );

    let tx = database.begin().await.unwrap();
    assert_eq!(
        tx.fetch_one("select value", DbParams::new())
            .await
            .unwrap()
            .try_get::<i32>("value")
            .unwrap(),
        99
    );
    assert_eq!(tx.execute("select 1", DbParams::new()).await.unwrap(), 3);
    tx.commit().await.unwrap();

    let empty_database = Database::new(MockDriver { rows: vec![] });
    assert!(empty_database
        .fetch_optional("select value", DbParams::new())
        .await
        .unwrap()
        .is_none());
    assert!(empty_database
        .fetch_one("select value", DbParams::new())
        .await
        .unwrap_err()
        .to_string()
        .contains("exactly one row"));
}