diff --git a/tests/bakery_chain/cake.rs b/tests/bakery_chain/cake.rs index 81286852..1e134de5 100644 --- a/tests/bakery_chain/cake.rs +++ b/tests/bakery_chain/cake.rs @@ -1,3 +1,4 @@ +use rust_decimal::prelude::*; use sea_orm::entity::prelude::*; #[derive(Copy, Clone, Default, Debug, DeriveEntity)] @@ -13,7 +14,7 @@ impl EntityName for Entity { pub struct Model { pub id: i32, pub name: String, - pub price: f64, + pub price: Decimal, pub bakery_id: Option, pub gluten_free: bool, } @@ -51,7 +52,7 @@ impl ColumnTrait for Column { match self { Self::Id => ColumnType::Integer.def(), Self::Name => ColumnType::String(None).def(), - Self::Price => ColumnType::Money(Some((19, 4))).def(), + Self::Price => ColumnType::Decimal(Some((19, 4))).def(), Self::BakeryId => ColumnType::Integer.def(), Self::GlutenFree => ColumnType::Boolean.def(), } diff --git a/tests/bakery_chain_tests.rs b/tests/bakery_chain_tests.rs index d5338ba1..c58be9eb 100644 --- a/tests/bakery_chain_tests.rs +++ b/tests/bakery_chain_tests.rs @@ -28,7 +28,7 @@ async fn create_entities(db: &DbConn) { crud::test_create_bakery(db).await; crud::test_create_baker(db).await; crud::test_create_customer(db).await; - crud::test_create_cake(db).await; + crud::create_cake::test_create_cake(db).await; crud::create_lineitem::test_create_lineitem(db).await; crud::create_order::test_create_order(db).await; } diff --git a/tests/crud/create_cake.rs b/tests/crud/create_cake.rs new file mode 100644 index 00000000..675b9c14 --- /dev/null +++ b/tests/crud/create_cake.rs @@ -0,0 +1,90 @@ +pub use super::*; +use rust_decimal_macros::dec; + +pub async fn test_create_cake(db: &DbConn) { + let seaside_bakery = bakery::ActiveModel { + name: Set("SeaSide Bakery".to_owned()), + profit_margin: Set(10.4), + ..Default::default() + }; + let bakery_insert_res: InsertResult = Bakery::insert(seaside_bakery) + .exec(db) + .await + .expect("could not insert bakery"); + + let baker_bob = baker::ActiveModel { + name: Set("Baker Bob".to_owned()), + bakery_id: Set(Some(bakery_insert_res.last_insert_id as i32)), + ..Default::default() + }; + let baker_insert_res: InsertResult = Baker::insert(baker_bob) + .exec(db) + .await + .expect("could not insert baker"); + + let mud_cake = cake::ActiveModel { + name: Set("Mud Cake".to_owned()), + price: Set(dec!(10.25)), + gluten_free: Set(false), + bakery_id: Set(Some(bakery_insert_res.last_insert_id as i32)), + ..Default::default() + }; + + let cake_insert_res: InsertResult = Cake::insert(mud_cake) + .exec(db) + .await + .expect("could not insert cake"); + + let cake: Option = Cake::find_by_id(cake_insert_res.last_insert_id) + .one(db) + .await + .expect("could not find cake"); + + let cake_baker = cakes_bakers::ActiveModel { + cake_id: Set(cake_insert_res.last_insert_id as i32), + baker_id: Set(baker_insert_res.last_insert_id as i32), + ..Default::default() + }; + let _cake_baker_res: InsertResult = CakesBakers::insert(cake_baker) + .exec(db) + .await + .expect("could not insert cake_baker"); + + assert!(cake.is_some()); + let cake_model = cake.unwrap(); + assert_eq!(cake_model.name, "Mud Cake"); + assert_eq!(cake_model.price, dec!(10.25)); + assert_eq!(cake_model.gluten_free, false); + assert_eq!( + cake_model + .find_related(Bakery) + .one(db) + .await + .expect("Bakery not found") + .unwrap() + .name, + "SeaSide Bakery" + ); + + let related_bakers: Vec = cake_model + .find_related(Baker) + .all(db) + .await + .expect("could not find related bakers"); + assert_eq!(related_bakers.len(), 1); + assert_eq!(related_bakers[0].name, "Baker Bob"); + + let baker: Option = Baker::find_by_id(baker_insert_res.last_insert_id) + .one(db) + .await + .expect("could not find baker"); + + let related_cakes: Vec = baker + .unwrap() + .find_related(Cake) + .all(db) + .await + .expect("could not find related cakes"); + assert_eq!(related_cakes.len(), 1); + assert_eq!(related_cakes[0].name, "Mud Cake") +} diff --git a/tests/crud/create_lineitem.rs b/tests/crud/create_lineitem.rs index 5af8d0d0..ac7af1ca 100644 --- a/tests/crud/create_lineitem.rs +++ b/tests/crud/create_lineitem.rs @@ -27,7 +27,7 @@ pub async fn test_create_lineitem(db: &DbConn) { // Cake let mud_cake = cake::ActiveModel { name: Set("Mud Cake".to_owned()), - price: Set(10.25), + price: Set(dec!(10.25)), gluten_free: Set(false), bakery_id: Set(Some(bakery_insert_res.last_insert_id as i32)), ..Default::default() diff --git a/tests/crud/create_order.rs b/tests/crud/create_order.rs index 028ef7bd..d3769203 100644 --- a/tests/crud/create_order.rs +++ b/tests/crud/create_order.rs @@ -27,7 +27,7 @@ pub async fn test_create_order(db: &DbConn) { // Cake let mud_cake = cake::ActiveModel { name: Set("Mud Cake".to_owned()), - price: Set(10.25), + price: Set(dec!(10.25)), gluten_free: Set(false), bakery_id: Set(Some(bakery_insert_res.last_insert_id as i32)), ..Default::default() diff --git a/tests/crud/mod.rs b/tests/crud/mod.rs index 495da8ca..9fbf27e6 100644 --- a/tests/crud/mod.rs +++ b/tests/crud/mod.rs @@ -2,6 +2,7 @@ use sea_orm::{entity::*, DbConn, InsertResult}; pub use super::bakery_chain::*; +pub mod create_cake; pub mod create_lineitem; pub mod create_order; @@ -103,91 +104,3 @@ pub async fn test_create_customer(db: &DbConn) { assert_eq!(customer_model.name, "Kate"); assert_eq!(customer_model.notes, "Loves cheese cake"); } - -pub async fn test_create_cake(db: &DbConn) { - let seaside_bakery = bakery::ActiveModel { - name: Set("SeaSide Bakery".to_owned()), - profit_margin: Set(10.4), - ..Default::default() - }; - let bakery_insert_res: InsertResult = Bakery::insert(seaside_bakery) - .exec(db) - .await - .expect("could not insert bakery"); - - let baker_bob = baker::ActiveModel { - name: Set("Baker Bob".to_owned()), - bakery_id: Set(Some(bakery_insert_res.last_insert_id as i32)), - ..Default::default() - }; - let baker_insert_res: InsertResult = Baker::insert(baker_bob) - .exec(db) - .await - .expect("could not insert baker"); - - let mud_cake = cake::ActiveModel { - name: Set("Mud Cake".to_owned()), - price: Set(10.25), - gluten_free: Set(false), - bakery_id: Set(Some(bakery_insert_res.last_insert_id as i32)), - ..Default::default() - }; - - let cake_insert_res: InsertResult = Cake::insert(mud_cake) - .exec(db) - .await - .expect("could not insert cake"); - - let cake: Option = Cake::find_by_id(cake_insert_res.last_insert_id) - .one(db) - .await - .expect("could not find cake"); - - let cake_baker = cakes_bakers::ActiveModel { - cake_id: Set(cake_insert_res.last_insert_id as i32), - baker_id: Set(baker_insert_res.last_insert_id as i32), - ..Default::default() - }; - let _cake_baker_res: InsertResult = CakesBakers::insert(cake_baker) - .exec(db) - .await - .expect("could not insert cake_baker"); - - assert!(cake.is_some()); - let cake_model = cake.unwrap(); - assert_eq!(cake_model.name, "Mud Cake"); - assert_eq!(cake_model.price, 10.25); - assert_eq!(cake_model.gluten_free, false); - assert_eq!( - cake_model - .find_related(Bakery) - .one(db) - .await - .expect("Bakery not found") - .unwrap() - .name, - "SeaSide Bakery" - ); - - let related_bakers: Vec = cake_model - .find_related(Baker) - .all(db) - .await - .expect("could not find related bakers"); - assert_eq!(related_bakers.len(), 1); - assert_eq!(related_bakers[0].name, "Baker Bob"); - - let baker: Option = Baker::find_by_id(baker_insert_res.last_insert_id) - .one(db) - .await - .expect("could not find baker"); - - let related_cakes: Vec = baker - .unwrap() - .find_related(Cake) - .all(db) - .await - .expect("could not find related cakes"); - assert_eq!(related_cakes.len(), 1); - assert_eq!(related_cakes[0].name, "Mud Cake") -}