#![cfg(feature = "rusqlite")]
use assert_cmd::cargo::cargo_bin_cmd;
use std::fs;
use tempfile::tempdir;
#[test]
fn migrate_uses_custom_migrations_table_name() {
let dir = tempdir().unwrap();
let root = dir.path();
let db_path = root.join("dev.db");
let migrations_dir = root.join("migrations");
fs::write(
root.join("drizzle.config.toml"),
format!(
r#"
dialect = "sqlite"
schema = '{schema_path}'
out = '{out_dir}'
[migrations]
table = "custom_migrations"
[dbCredentials]
url = '{db_url}'
"#,
schema_path = root.join("schema.rs").to_string_lossy(),
out_dir = migrations_dir.to_string_lossy(),
db_url = db_path.to_string_lossy()
),
)
.unwrap();
fs::write(root.join("schema.rs"), "// test schema\n").unwrap();
cargo_bin_cmd!("drizzle")
.current_dir(root)
.args(["generate", "--custom", "--name", "init"])
.assert()
.success();
let tag = fs::read_dir(&migrations_dir)
.unwrap()
.filter_map(|e| e.ok())
.find_map(|e| {
let name = e.file_name().to_string_lossy().to_string();
if e.file_type().ok()?.is_dir() && name != "meta" {
Some(name)
} else {
None
}
})
.expect("expected a generated migration directory");
fs::write(
migrations_dir.join(&tag).join("migration.sql"),
"CREATE TABLE test_table (id INTEGER PRIMARY KEY);\n",
)
.unwrap();
cargo_bin_cmd!("drizzle")
.current_dir(root)
.args(["migrate"])
.assert()
.success();
let conn = rusqlite::Connection::open(&db_path).unwrap();
let exists: i64 = conn
.query_row(
"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='custom_migrations';",
[],
|r| r.get(0),
)
.unwrap();
assert_eq!(exists, 1, "custom migrations table should exist");
}