diff --git a/tests/common/bakery_chain/Readme.md b/tests/common/bakery_chain/Readme.md new file mode 100644 index 00000000..1b5bf076 --- /dev/null +++ b/tests/common/bakery_chain/Readme.md @@ -0,0 +1,3 @@ +# Schema for SeaORM test suite + +ERD generated by DataGrip. \ No newline at end of file diff --git a/tests/common/bakery_chain/bakery_chain_erd.drawio b/tests/common/bakery_chain/bakery_chain_erd.drawio deleted file mode 100644 index 1f2b430f..00000000 --- a/tests/common/bakery_chain/bakery_chain_erd.drawio +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file diff --git a/tests/common/bakery_chain/bakery_chain_erd.jpg b/tests/common/bakery_chain/bakery_chain_erd.jpg deleted file mode 100644 index 6decffa5..00000000 Binary files a/tests/common/bakery_chain/bakery_chain_erd.jpg and /dev/null differ diff --git a/tests/common/bakery_chain/bakery_chain_erd.png b/tests/common/bakery_chain/bakery_chain_erd.png new file mode 100644 index 00000000..b0b9ac86 Binary files /dev/null and b/tests/common/bakery_chain/bakery_chain_erd.png differ diff --git a/tests/common/bakery_chain/bakery_chain_erd.svg b/tests/common/bakery_chain/bakery_chain_erd.svg new file mode 100644 index 00000000..28cf1777 --- /dev/null +++ b/tests/common/bakery_chain/bakery_chain_erd.svg @@ -0,0 +1,1047 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + integer + + + + + + + + + + id + + + + + + + + + + + + varchar + + + + + + + + + + name + + + + + + text + + + + + + + + + + notes + + + + + + + + + + + + + + customer + + + + + + + + + + + + integer + + + + + + + + + + id + + + + + + + + + + + + numeric(19,4) + + + + + + + + + + total + + + + + + integer + + + + + + + + + + bakery_id + + + + + + integer + + + + + + + + + + customer_id + + + + + + timestamp + + + + + + + + + + placed_at + + + + + + + + + + + + + + order + + + + + + + + + + + + integer + + + + + + + + + + id + + + + + + + + + + + + varchar + + + + + + + + + + name + + + + + + json + + + + + + + + + + contact_details + + + + + + integer + + + + + + + + + + bakery_id + + + + + + + + + + + + + + baker + + + + + + + + + + + + integer + + + + + + + + + + id + + + + + + + + + + + + varchar + + + + + + + + + + name + + + + + + numeric(19,4) + + + + + + + + + + price + + + + + + integer + + + + + + + + + + bakery_id + + + + + + boolean + + + + + + + + + + gluten_free + + + + + + uuid + + + + + + + + + + serial + + + + + + + + + + + + + + cake + + + + + + + + + + + + integer + + + + + + + + + + id + + + + + + + + + + + + varchar + + + + + + + + + + name + + + + + + double precision + + + + + + + + + + profit_margin + + + + + + + + + + + + + + bakery + + + + + + + + + + + + integer + + + + + + + + + + id + + + + + + + + + + + + numeric(19,4) + + + + + + + + + + price + + + + + + integer + + + + + + + + + + quantity + + + + + + integer + + + + + + + + + + order_id + + + + + + integer + + + + + + + + + + cake_id + + + + + + + + + + + + + + lineitem + + + + + + + + + + + + integer + + + + + + + + + + cake_id + + + + + + integer + + + + + + + + + + baker_id + + + + + + + + + + + + + + cakes_bakers + + + + + + + bakery_id:id + + + bakery_id:id + + + bakery_id:id + + + customer_id:id + + + cake_id:id + + + baker_id:id + + + order_id:id + + + cake_id:id + + + diff --git a/tests/common/setup/schema.rs b/tests/common/setup/schema.rs index 5550994d..5542c618 100644 --- a/tests/common/setup/schema.rs +++ b/tests/common/setup/schema.rs @@ -19,8 +19,8 @@ pub async fn create_bakery_table(db: &DbConn) -> Result { .auto_increment() .primary_key(), ) - .col(ColumnDef::new(bakery::Column::Name).string()) - .col(ColumnDef::new(bakery::Column::ProfitMargin).double()) + .col(ColumnDef::new(bakery::Column::Name).string().not_null()) + .col(ColumnDef::new(bakery::Column::ProfitMargin).double().not_null()) .to_owned(); create_table(db, &stmt).await @@ -33,12 +33,11 @@ pub async fn create_baker_table(db: &DbConn) -> Result { .col( ColumnDef::new(baker::Column::Id) .integer() - .not_null() .auto_increment() .primary_key(), ) - .col(ColumnDef::new(baker::Column::Name).string()) - .col(ColumnDef::new(baker::Column::ContactDetails).json()) + .col(ColumnDef::new(baker::Column::Name).string().not_null()) + .col(ColumnDef::new(baker::Column::ContactDetails).json().not_null()) .col(ColumnDef::new(baker::Column::BakeryId).integer()) .foreign_key( ForeignKey::create() @@ -64,7 +63,7 @@ pub async fn create_customer_table(db: &DbConn) -> Result { .auto_increment() .primary_key(), ) - .col(ColumnDef::new(customer::Column::Name).string()) + .col(ColumnDef::new(customer::Column::Name).string().not_null()) .col(ColumnDef::new(customer::Column::Notes).text()) .to_owned(); @@ -82,7 +81,7 @@ pub async fn create_order_table(db: &DbConn) -> Result { .auto_increment() .primary_key(), ) - .col(ColumnDef::new(order::Column::Total).decimal_len(19, 4)) + .col(ColumnDef::new(order::Column::Total).decimal_len(19, 4).not_null()) .col(ColumnDef::new(order::Column::BakeryId).integer().not_null()) .col( ColumnDef::new(order::Column::CustomerId) @@ -126,8 +125,8 @@ pub async fn create_lineitem_table(db: &DbConn) -> Result { .auto_increment() .primary_key(), ) - .col(ColumnDef::new(lineitem::Column::Price).decimal_len(19, 4)) - .col(ColumnDef::new(lineitem::Column::Quantity).integer()) + .col(ColumnDef::new(lineitem::Column::Price).decimal_len(19, 4).not_null()) + .col(ColumnDef::new(lineitem::Column::Quantity).integer().not_null()) .col( ColumnDef::new(lineitem::Column::OrderId) .integer() @@ -178,6 +177,22 @@ pub async fn create_cakes_bakers_table(db: &DbConn) -> Result .col(cakes_bakers::Column::CakeId) .col(cakes_bakers::Column::BakerId), ) + .foreign_key( + ForeignKey::create() + .name("FK_cakes_bakers_cake") + .from(cakes_bakers::Entity, cakes_bakers::Column::CakeId) + .to(cake::Entity, cake::Column::Id) + .on_delete(ForeignKeyAction::Cascade) + .on_update(ForeignKeyAction::Cascade), + ) + .foreign_key( + ForeignKey::create() + .name("FK_cakes_bakers_baker") + .from(cakes_bakers::Entity, cakes_bakers::Column::BakerId) + .to(baker::Entity, baker::Column::Id) + .on_delete(ForeignKeyAction::Cascade) + .on_update(ForeignKeyAction::Cascade), + ) .to_owned(); create_table(db, &stmt).await @@ -194,9 +209,9 @@ pub async fn create_cake_table(db: &DbConn) -> Result { .auto_increment() .primary_key(), ) - .col(ColumnDef::new(cake::Column::Name).string()) - .col(ColumnDef::new(cake::Column::Price).decimal_len(19, 4)) - .col(ColumnDef::new(cake::Column::BakeryId).integer().not_null()) + .col(ColumnDef::new(cake::Column::Name).string().not_null()) + .col(ColumnDef::new(cake::Column::Price).decimal_len(19, 4).not_null()) + .col(ColumnDef::new(cake::Column::BakeryId).integer()) .foreign_key( ForeignKey::create() .name("FK_cake_bakery") @@ -205,8 +220,8 @@ pub async fn create_cake_table(db: &DbConn) -> Result { .on_delete(ForeignKeyAction::Cascade) .on_update(ForeignKeyAction::Cascade), ) - .col(ColumnDef::new(cake::Column::GlutenFree).boolean()) - .col(ColumnDef::new(cake::Column::Serial).uuid()) + .col(ColumnDef::new(cake::Column::GlutenFree).boolean().not_null()) + .col(ColumnDef::new(cake::Column::Serial).uuid().not_null()) .to_owned(); create_table(db, &stmt).await diff --git a/tests/crud_tests.rs b/tests/crud_tests.rs index 12d9a5b8..94412a4d 100644 --- a/tests/crud_tests.rs +++ b/tests/crud_tests.rs @@ -6,8 +6,8 @@ pub use common::{bakery_chain::*, setup::*, TestContext}; mod crud; // Run the test locally: -// DATABASE_URL="mysql://root:root@localhost" cargo test --features sqlx-mysql,runtime-async-std --test bakery_chain_tests -// DATABASE_URL="postgres://root:root@localhost" cargo test --features sqlx-postgres,runtime-async-std --test bakery_chain_tests +// DATABASE_URL="mysql://root:root@localhost" cargo test --features sqlx-mysql,runtime-async-std --test crud_tests +// DATABASE_URL="postgres://root:root@localhost" cargo test --features sqlx-postgres,runtime-async-std --test crud_tests #[cfg_attr(feature = "runtime-async-std", async_std::test)] #[cfg_attr(feature = "runtime-actix", actix_rt::test)] #[cfg_attr(feature = "runtime-tokio", tokio::test)]