48 lines
1.2 KiB
Rust
48 lines
1.2 KiB
Rust
use sqlx::PgPool;
|
|
|
|
#[tokio::test]
|
|
async fn db_smoke_tenants_users_roundtrip() -> Result<(), Box<dyn std::error::Error>> {
|
|
let database_url = match std::env::var("DATABASE_URL") {
|
|
Ok(v) if !v.trim().is_empty() => v,
|
|
_ => return Ok(()),
|
|
};
|
|
|
|
let pool = PgPool::connect(&database_url).await?;
|
|
let mut tx = pool.begin().await?;
|
|
|
|
let tenant_id: uuid::Uuid = sqlx::query_scalar(
|
|
r#"
|
|
INSERT INTO tenants (name, status, config)
|
|
VALUES ($1, 'active', '{}'::jsonb)
|
|
RETURNING id
|
|
"#,
|
|
)
|
|
.bind(format!("smoke-{}", uuid::Uuid::new_v4()))
|
|
.fetch_one(&mut *tx)
|
|
.await?;
|
|
|
|
let user_id: uuid::Uuid = sqlx::query_scalar(
|
|
r#"
|
|
INSERT INTO users (tenant_id, email, password_hash)
|
|
VALUES ($1, $2, $3)
|
|
RETURNING id
|
|
"#,
|
|
)
|
|
.bind(tenant_id)
|
|
.bind(format!("smoke-{}@example.com", uuid::Uuid::new_v4()))
|
|
.bind("hash")
|
|
.fetch_one(&mut *tx)
|
|
.await?;
|
|
|
|
let found: i64 = sqlx::query_scalar("SELECT COUNT(1) FROM users WHERE tenant_id = $1 AND id = $2")
|
|
.bind(tenant_id)
|
|
.bind(user_id)
|
|
.fetch_one(&mut *tx)
|
|
.await?;
|
|
|
|
assert_eq!(found, 1);
|
|
tx.rollback().await?;
|
|
Ok(())
|
|
}
|
|
|