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; }