use crate::db::Database;
use tokio;
#[tokio::test]
async fn test_connect_in_memory() {
let db = Database::connect_in_memory().await.unwrap();
assert!(db.is_connected());
}
#[tokio::test]
async fn test_migrations() {
let db = Database::connect_in_memory().await.unwrap();
db.run_migrations().await.unwrap();
}
#[tokio::test]
async fn test_migrations_idempotent() {
let db = Database::connect_in_memory().await.unwrap();
db.run_migrations().await.unwrap();
db.run_migrations().await.unwrap();
let version: i64 = db
.pool
.get()
.await
.unwrap()
.interact(|conn| conn.pragma_query_value(None, "user_version", |r| r.get(0)))
.await
.unwrap()
.unwrap();
assert_eq!(version, Database::MIGRATION_COUNT as i64);
}
#[tokio::test]
async fn test_sqlx_upgrade_stamps_user_version() {
let db = Database::connect_in_memory().await.unwrap();
db.run_migrations().await.unwrap();
db.pool
.get()
.await
.unwrap()
.interact(|conn| {
conn.execute_batch(
"CREATE TABLE IF NOT EXISTS _sqlx_migrations (
version INTEGER PRIMARY KEY,
description TEXT NOT NULL,
installed_on TEXT NOT NULL DEFAULT (datetime('now'))
);
PRAGMA user_version = 0;",
)
})
.await
.unwrap()
.unwrap();
db.run_migrations().await.unwrap();
let version: i64 = db
.pool
.get()
.await
.unwrap()
.interact(|conn| conn.pragma_query_value(None, "user_version", |r| r.get(0)))
.await
.unwrap()
.unwrap();
assert_eq!(version, Database::MIGRATION_COUNT as i64);
}
#[tokio::test]
async fn test_fresh_db_runs_all_migrations() {
let db = Database::connect_in_memory().await.unwrap();
let before: i64 = db
.pool
.get()
.await
.unwrap()
.interact(|conn| conn.pragma_query_value(None, "user_version", |r| r.get(0)))
.await
.unwrap()
.unwrap();
assert_eq!(before, 0);
db.run_migrations().await.unwrap();
let after: i64 = db
.pool
.get()
.await
.unwrap()
.interact(|conn| conn.pragma_query_value(None, "user_version", |r| r.get(0)))
.await
.unwrap()
.unwrap();
assert_eq!(after, Database::MIGRATION_COUNT as i64);
}