sea-orm/tests/bakery_chain.rs

75 lines
1.9 KiB
Rust

use sea_orm::{sea_query, DbConn, ExecErr, ExecResult};
use sea_query::{ColumnDef, ForeignKey, ForeignKeyAction, Iden, SqliteQueryBuilder};
mod setup;
#[derive(Iden)]
enum Bakery {
Table,
Id,
Name,
ProfitMargin,
}
#[derive(Iden)]
enum Baker {
Table,
Id,
Name,
BakeryId,
}
#[async_std::test]
// cargo test --test bakery -- --nocapture
async fn main() {
let db: DbConn = setup::setup().await;
setup_schema(&db).await;
}
async fn setup_schema(db: &DbConn) {
assert!(create_bakery(db).await.is_ok());
assert!(create_baker(db).await.is_ok());
}
async fn create_bakery(db: &DbConn) -> Result<ExecResult, ExecErr> {
let stmt = sea_query::Table::create()
.table(Bakery::Table)
.if_not_exists()
.col(
ColumnDef::new(Bakery::Id)
.integer()
.not_null()
.auto_increment()
.primary_key(),
)
.col(ColumnDef::new(Bakery::Name).string())
.col(ColumnDef::new(Bakery::ProfitMargin).float())
.build(SqliteQueryBuilder);
db.execute(stmt.into()).await
}
async fn create_baker(db: &DbConn) -> Result<ExecResult, ExecErr> {
let stmt = sea_query::Table::create()
.table(Baker::Table)
.if_not_exists()
.col(
ColumnDef::new(Baker::Id)
.integer()
.not_null()
.auto_increment()
.primary_key(),
)
.col(ColumnDef::new(Baker::Name).string())
// .foreign_key(
// ForeignKey::create()
// .name("FK_baker_bakery")
// .from(Baker::Table, Baker::BakeryId)
// .to(Bakery::Table, Bakery::Id)
// .on_delete(ForeignKeyAction::Cascade)
// .on_update(ForeignKeyAction::Cascade),
// )
.build(SqliteQueryBuilder);
db.execute(stmt.clone().into()).await
}