#![allow(
clippy::unwrap_used,
clippy::expect_used,
clippy::panic,
clippy::print_stdout
)]
mod support;
use turnframe_store::conformance;
use turnframe_store::stores::Stores;
const SCHEMA: &str = "tf_test_conformance";
const CHECKS_AT_LEAST: usize = 19;
#[tokio::test(flavor = "multi_thread", worker_threads = 4)]
async fn the_whole_store_conformance_suite_passes_against_postgres() {
let Some(url) = support::database_url() else {
support::skipped("the_whole_store_conformance_suite_passes_against_postgres");
return;
};
let store = support::sole_owner_of(&url, SCHEMA).await;
let factory = {
let store = store.clone();
move || -> Stores {
tokio::task::block_in_place(|| {
tokio::runtime::Handle::current().block_on(support::truncate_all(&store));
});
store.stores().expect("every role is supplied")
}
};
let report = conformance::run_all(&factory).await;
println!("{report}");
assert!(report.passed(), "{report}");
assert!(
report.outcomes.len() >= CHECKS_AT_LEAST,
"the suite ran {} checks, expected at least {CHECKS_AT_LEAST}",
report.outcomes.len()
);
}
#[tokio::test]
async fn migrations_are_idempotent() {
let Some(url) = support::database_url() else {
support::skipped("migrations_are_idempotent");
return;
};
let store = support::second_pool(&url, SCHEMA).await;
store.migrate().await.expect("re-applying migrations");
store.migrate().await.expect("re-applying migrations twice");
}