34 lines
1.2 KiB
Rust
34 lines
1.2 KiB
Rust
use db::{Db, fields, seed, vocab};
|
|
use sqlx::PgPool;
|
|
|
|
// Note: `server::seed` opens its own DB connection by URL, but `#[sqlx::test]`
|
|
// provisions a temporary database whose URL is not directly exposed. This test
|
|
// exercises the building block the command composes — `db::seed::seed_spectrum_cataloguing`
|
|
// — against the test pool, run twice to prove the idempotency the command relies on.
|
|
#[sqlx::test(migrations = "../db/migrations")]
|
|
async fn seed_is_idempotent_via_building_block(pool: PgPool) {
|
|
let db = Db::from_pool(pool);
|
|
|
|
for _ in 0..2 {
|
|
let mut tx = db.pool().begin().await.unwrap();
|
|
seed::seed_spectrum_cataloguing(&mut tx).await.unwrap();
|
|
tx.commit().await.unwrap();
|
|
}
|
|
|
|
// A representative seeded vocabulary and field definition are present after two runs.
|
|
assert!(
|
|
vocab::vocabulary_by_key(db.pool(), "material")
|
|
.await
|
|
.unwrap()
|
|
.is_some(),
|
|
"vocabulary 'material' should be seeded"
|
|
);
|
|
assert!(
|
|
fields::field_definition_by_key(db.pool(), "title")
|
|
.await
|
|
.unwrap()
|
|
.is_some(),
|
|
"field definition 'title' should be seeded"
|
|
);
|
|
}
|