use std::path::Path; use sqlx::migrate::MigrateError; use sqlx_migrate_validate::{Validate, ValidateError, Validator}; async fn prepare() -> sqlx_core::sqlite::SqliteConnection { let pool = sqlx::SqlitePool::connect("sqlite::memory:").await.unwrap(); let mut conn = pool.acquire().await.unwrap(); sqlx::migrate!("./tests/migrations-1") .run(&mut conn) .await .unwrap(); conn.detach() } #[tokio::test] async fn validate_returns_ok_with_same_migrations() { let mut conn = prepare().await; sqlx::migrate!("./tests/migrations-1") .validate(&mut conn) .await .unwrap(); } #[tokio::test] async fn validate_returns_err_with_more_migrations_in_source() { let mut conn = prepare().await; match Validator::new(Path::new("./tests/migrations-2")) .await .unwrap() .validate(&mut conn) .await { Err(ValidateError::VersionNotApplied(20230312141719)) => (), o => panic!("Expected VersionNotApplied error, got: {:?}", o), }; } #[tokio::test] async fn validate_returns_err_with_less_migrations_in_source() { let mut conn = prepare().await; match Validator::new(Path::new("./tests/migrations-3")) .await .unwrap() .validate(&mut conn) .await { Err(ValidateError::MigrateError(MigrateError::VersionMissing(20230312133715))) => (), o => panic!("Expected VersionMissing error, got: {:?}", o), }; } #[tokio::test] async fn validate_returns_err_with_migration_content_mismatch() { let mut conn = prepare().await; match Validator::new(Path::new("./tests/migrations-4")) .await .unwrap() .validate(&mut conn) .await { Err(ValidateError::MigrateError(MigrateError::VersionMismatch(20230312133715))) => (), o => panic!("Expected VersionMismatch error, got: {:?}", o), }; }