use std::sync::Arc;
use mempill_postgres::PostgresPersistenceStore;
use testcontainers_modules::postgres::Postgres;
use testcontainers_modules::testcontainers::runners::SyncRunner;
use testcontainers_modules::testcontainers::ImageExt;
#[allow(dead_code)] pub fn with_pg<F>(tag: &str, body: F)
where
F: FnOnce(Arc<PostgresPersistenceStore>),
{
let node = Postgres::default()
.with_tag(tag)
.start()
.unwrap_or_else(|e| panic!("testcontainers: failed to start postgres:{tag} — {e}"));
let host = node
.get_host()
.unwrap_or_else(|e| panic!("testcontainers: get_host for postgres:{tag} — {e}"));
let port = node
.get_host_port_ipv4(5432)
.unwrap_or_else(|e| panic!("testcontainers: get_host_port_ipv4 for postgres:{tag} — {e}"));
let conn_str = format!("postgresql://postgres:postgres@{host}:{port}/postgres");
let store = Arc::new(PostgresPersistenceStore::new(&conn_str).unwrap_or_else(|e| {
panic!(
"PostgresPersistenceStore::new failed for postgres:{tag} — \
migration or pool error: {e}"
)
}));
body(store);
}
#[allow(dead_code)]
pub fn with_pg_and_conn<F>(tag: &str, body: F)
where
F: FnOnce(Arc<PostgresPersistenceStore>, String),
{
let node = Postgres::default()
.with_tag(tag)
.start()
.unwrap_or_else(|e| panic!("testcontainers: failed to start postgres:{tag} — {e}"));
let host = node
.get_host()
.unwrap_or_else(|e| panic!("testcontainers: get_host for postgres:{tag} — {e}"));
let port = node
.get_host_port_ipv4(5432)
.unwrap_or_else(|e| panic!("testcontainers: get_host_port_ipv4 for postgres:{tag} — {e}"));
let conn_str = format!("postgresql://postgres:postgres@{host}:{port}/postgres");
let store = Arc::new(PostgresPersistenceStore::new(&conn_str).unwrap_or_else(|e| {
panic!(
"PostgresPersistenceStore::new failed for postgres:{tag} — \
migration or pool error: {e}"
)
}));
body(store, conn_str);
}