54 lines
2.1 KiB
Rust
54 lines
2.1 KiB
Rust
use storage::{DatabaseConfig, DatabaseConnection};
|
|
|
|
/// Run against a fresh disposable database, never a production or shared schema.
|
|
#[tokio::test]
|
|
#[ignore = "requires ASTER_TEST_POSTGRES_URL pointing to a fresh disposable PostgreSQL database"]
|
|
async fn postgres_connects_without_schema_and_executes_caller_owned_sql() {
|
|
let url = std::env::var("ASTER_TEST_POSTGRES_URL")
|
|
.expect("set ASTER_TEST_POSTGRES_URL to a fresh disposable PostgreSQL database");
|
|
let config = DatabaseConfig::Postgres(url);
|
|
let database = DatabaseConnection::connect(&config).await.unwrap();
|
|
assert_eq!(database.backend_name(), "postgresql");
|
|
assert!(database.sqlite_pool().is_none());
|
|
database.ping().await.unwrap();
|
|
let pool = database.postgres_pool().unwrap();
|
|
let tables: i64 = sqlx::query_scalar(
|
|
"SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'public'",
|
|
)
|
|
.fetch_one(pool)
|
|
.await
|
|
.unwrap();
|
|
assert_eq!(tables, 0, "connecting must not create application tables");
|
|
let mut transaction = pool.begin().await.unwrap();
|
|
sqlx::query(
|
|
"CREATE TEMP TABLE class_rows (id INTEGER PRIMARY KEY, value TEXT NOT NULL) ON COMMIT DROP",
|
|
)
|
|
.execute(&mut *transaction)
|
|
.await
|
|
.unwrap();
|
|
sqlx::query("INSERT INTO class_rows (id, value) VALUES ($1, $2)")
|
|
.bind(1_i64)
|
|
.bind("你好 ' ; $1")
|
|
.execute(&mut *transaction)
|
|
.await
|
|
.unwrap();
|
|
let value: String = sqlx::query_scalar("SELECT value FROM class_rows WHERE id = $1")
|
|
.bind(1_i64)
|
|
.fetch_one(&mut *transaction)
|
|
.await
|
|
.unwrap();
|
|
assert_eq!(value, "你好 ' ; $1");
|
|
transaction.commit().await.unwrap();
|
|
database.close().await;
|
|
let reopened = DatabaseConnection::connect(&config).await.unwrap();
|
|
reopened.ping().await.unwrap();
|
|
let tables: i64 = sqlx::query_scalar(
|
|
"SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'public'",
|
|
)
|
|
.fetch_one(reopened.postgres_pool().unwrap())
|
|
.await
|
|
.unwrap();
|
|
assert_eq!(tables, 0);
|
|
reopened.close().await;
|
|
}
|