use codlet_sqlx::{SqliteStore, run_migrations};
async fn fresh_store() -> SqliteStore {
let pool = sqlx::sqlite::SqlitePoolOptions::new()
.max_connections(1)
.connect("sqlite::memory:")
.await
.unwrap();
run_migrations(&pool).await.unwrap();
SqliteStore::new(pool)
}
#[tokio::test]
async fn sqlite_code_store_conformance() {
codlet_conformance::run_code_store_conformance(fresh_store).await;
}
#[tokio::test]
async fn sqlite_session_store_conformance() {
codlet_conformance::run_session_store_conformance(fresh_store).await;
}
#[tokio::test]
async fn sqlite_form_token_store_conformance() {
codlet_conformance::run_form_token_store_conformance(fresh_store).await;
}
#[tokio::test]
async fn migrations_are_idempotent() {
let pool = sqlx::SqlitePool::connect("sqlite::memory:").await.unwrap();
run_migrations(&pool).await.unwrap();
run_migrations(&pool).await.unwrap();
}
#[tokio::test]
async fn schema_includes_key_version_columns() {
let pool = sqlx::sqlite::SqlitePoolOptions::new()
.max_connections(1)
.connect("sqlite::memory:")
.await
.unwrap();
run_migrations(&pool).await.unwrap();
for table in ["codlet_codes", "codlet_sessions", "codlet_form_tokens"] {
let result: Result<Vec<(String,)>, _> =
sqlx::query_as(&format!("SELECT key_version FROM {table} LIMIT 0"))
.fetch_all(&pool)
.await;
assert!(
result.is_ok(),
"table {table} must have a key_version column"
);
}
}