2022-01-06 11:09:45 +00:00
|
|
|
use super::create_database_client;
|
|
|
|
use super::migrate::apply_migrations;
|
2023-04-24 15:35:32 +00:00
|
|
|
use tokio_postgres::config::Config;
|
|
|
|
use tokio_postgres::Client;
|
2022-01-06 11:09:45 +00:00
|
|
|
|
2022-03-05 12:48:30 +00:00
|
|
|
const DEFAULT_CONNECTION_URL: &str = "postgres://mitra:mitra@127.0.0.1:55432/mitra-test";
|
2022-01-06 11:09:45 +00:00
|
|
|
|
|
|
|
pub async fn create_test_database() -> Client {
|
2023-04-24 15:35:32 +00:00
|
|
|
let connection_url =
|
|
|
|
std::env::var("TEST_DATABASE_URL").unwrap_or(DEFAULT_CONNECTION_URL.to_string());
|
|
|
|
let mut db_config: Config = connection_url
|
|
|
|
.parse()
|
2022-01-06 11:09:45 +00:00
|
|
|
.expect("invalid database connection URL");
|
2023-04-24 15:35:32 +00:00
|
|
|
let db_name = db_config
|
|
|
|
.get_dbname()
|
2022-01-06 11:09:45 +00:00
|
|
|
.expect("database name not specified")
|
|
|
|
.to_string();
|
|
|
|
|
|
|
|
// Create connection without database name
|
|
|
|
db_config.dbname("");
|
|
|
|
let db_client = create_database_client(&db_config).await;
|
2023-04-24 15:35:32 +00:00
|
|
|
let drop_db_statement = format!("DROP DATABASE IF EXISTS {db_name:?}", db_name = db_name,);
|
2022-12-03 21:11:28 +00:00
|
|
|
db_client.execute(&drop_db_statement, &[]).await.unwrap();
|
2022-01-06 11:09:45 +00:00
|
|
|
let create_db_statement = format!(
|
|
|
|
"CREATE DATABASE {db_name:?} WITH OWNER={owner:?};",
|
2023-04-24 15:35:32 +00:00
|
|
|
db_name = db_name,
|
|
|
|
owner = db_config.get_user().unwrap(),
|
2022-01-06 11:09:45 +00:00
|
|
|
);
|
2022-12-03 21:11:28 +00:00
|
|
|
db_client.execute(&create_db_statement, &[]).await.unwrap();
|
2022-01-06 11:09:45 +00:00
|
|
|
|
|
|
|
// Create new connection to database
|
|
|
|
db_config.dbname(&db_name);
|
|
|
|
let mut db_client = create_database_client(&db_config).await;
|
|
|
|
apply_migrations(&mut db_client).await;
|
|
|
|
db_client
|
|
|
|
}
|