use crate::database_drivers;
use anyhow::Result;
pub async fn create(
database_url: String,
db_token: Option<String>,
wait_timeout: Option<usize>,
migrations_table: String,
migrations_folder: String,
schema_file: String,
) -> Result<()> {
let mut database = database_drivers::new(
database_url,
db_token,
migrations_table,
migrations_folder,
schema_file,
wait_timeout,
false,
)
.await?;
database.create_database().await?;
Ok(())
}
pub async fn drop(
database_url: String,
db_token: Option<String>,
wait_timeout: Option<usize>,
migrations_table: String,
migrations_folder: String,
schema_file: String,
) -> Result<()> {
let mut database = database_drivers::new(
database_url,
db_token,
migrations_table,
migrations_folder,
schema_file,
wait_timeout,
false,
)
.await?;
database.drop_database().await?;
Ok(())
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_create_function_signature() {
let _create_fn: fn(String, Option<String>, Option<usize>, String, String, String) -> _ =
create;
let _database_url = "sqlite://test.db".to_string();
let _db_token: Option<String> = None;
let _wait_timeout: Option<usize> = Some(30);
let _migrations_table = "schema_migrations".to_string();
let _migrations_folder = "./migrations".to_string();
let _schema_file = "schema.sql".to_string();
assert!(true);
}
#[test]
fn test_drop_function_signature() {
let _drop_fn: fn(String, Option<String>, Option<usize>, String, String, String) -> _ = drop;
let _database_url = "postgres://localhost/test".to_string();
let _db_token: Option<String> = Some("token".to_string());
let _wait_timeout: Option<usize> = Some(60);
let _migrations_table = "migrations".to_string();
let _migrations_folder = "./migrations".to_string();
let _schema_file = "schema.sql".to_string();
assert!(true);
}
#[test]
fn test_create_parameter_types() {
let database_url: String = "mysql://localhost/test".into();
let db_token: Option<String> = None;
let wait_timeout: Option<usize> = Some(45);
let migrations_table: String = "custom_migrations".into();
let migrations_folder: String = "./custom_migrations".into();
let schema_file: String = "custom_schema.sql".into();
let _future = create(
database_url,
db_token,
wait_timeout,
migrations_table,
migrations_folder,
schema_file,
);
assert!(true);
}
#[test]
fn test_drop_parameter_types() {
let database_url: String = "mariadb://localhost/test".into();
let db_token: Option<String> = Some("auth_token".into());
let wait_timeout: Option<usize> = None;
let migrations_table: String = "schema_migrations".into();
let migrations_folder: String = "./migrations".into();
let schema_file: String = "schema.sql".into();
let _future = drop(
database_url,
db_token,
wait_timeout,
migrations_table,
migrations_folder,
schema_file,
);
assert!(true);
}
#[test]
fn test_optional_parameters() {
let database_url = "sqlite://memory".to_string();
let db_token = None; let wait_timeout = None; let migrations_table = "migrations".to_string();
let migrations_folder = "./migrations".to_string();
let schema_file = "schema.sql".to_string();
let _create_future = create(
database_url.clone(),
db_token.clone(),
wait_timeout,
migrations_table.clone(),
migrations_folder.clone(),
schema_file.clone(),
);
let _drop_future = drop(
database_url,
db_token,
wait_timeout,
migrations_table,
migrations_folder,
schema_file,
);
assert!(true);
}
#[test]
fn test_parameter_order_consistency() {
let params = (
"sqlite://test.db".to_string(), None::<String>, Some(30_usize), "migrations".to_string(), "./migrations".to_string(), "schema.sql".to_string(), );
let _create_future = create(
params.0.clone(),
params.1.clone(),
params.2,
params.3.clone(),
params.4.clone(),
params.5.clone(),
);
let _drop_future = drop(params.0, params.1, params.2, params.3, params.4, params.5);
assert!(true);
}
#[test]
fn test_database_url_variations() {
let db_urls = vec![
"sqlite://test.db",
"postgres://user:pass@localhost:5432/db",
"mysql://root:password@localhost:3306/app",
"mariadb://user@localhost/database",
"http://localhost:8080", ];
for url in db_urls {
let _create_future = create(
url.to_string(),
None,
None,
"migrations".to_string(),
"./migrations".to_string(),
"schema.sql".to_string(),
);
let _drop_future = drop(
url.to_string(),
None,
None,
"migrations".to_string(),
"./migrations".to_string(),
"schema.sql".to_string(),
);
}
assert!(true);
}
}