dialtone_test_util 0.1.0

Dialtone Testing Utilities
Documentation
use sqlx::migrate::Migrator;
use sqlx::{PgPool, Pool};
use std::future::Future;
use std::path::Path;
use testcontainers::images::postgres::Postgres;
use testcontainers::{clients, Docker};

pub async fn test_pg<'a, F, Fut>(test: F)
where
    F: FnOnce(Pool<sqlx::Postgres>) -> Fut,
    Fut: Future<Output = ()>,
{
    let docker = clients::Cli::default();

    let container = docker.run(Postgres::default().with_version(13));
    let host_port = container.get_host_port(5432).unwrap();

    let url = format!("postgres://postgres@localhost:{}/", host_port);
    println!("url is {}", url);
    let pool = PgPool::connect(&url).await.unwrap();
    // sqlx::migrate!("../dialtone_sqlx/migrations")
    Migrator::new(Path::new("../dialtone_sqlx/migrations"))
        .await.unwrap()
        .run(&pool)
        .await
        .unwrap();
    test(pool).await;
}