From 33a87d79b1a789e8b47ed21bf22384289af7a487 Mon Sep 17 00:00:00 2001 From: Chris Tsang Date: Sun, 6 Feb 2022 14:36:22 +0800 Subject: [PATCH] Insert Default - Inserting `ActiveModel` with all attributes `NotSet` (#432) * feat: apply alias on `ColumnRef::SchemaTableColumn` * build: update sea-query dependency * feat: insert default * Use sea-query 0.21 Co-authored-by: Billy Chan --- tests/common/features/insert_default.rs | 13 +++++++++ tests/common/features/mod.rs | 2 ++ tests/common/features/schema.rs | 16 ++++++++++ tests/insert_default_tests.rs | 39 +++++++++++++++++++++++++ 4 files changed, 70 insertions(+) create mode 100644 tests/common/features/insert_default.rs create mode 100644 tests/insert_default_tests.rs diff --git a/tests/common/features/insert_default.rs b/tests/common/features/insert_default.rs new file mode 100644 index 000000000..166856f64 --- /dev/null +++ b/tests/common/features/insert_default.rs @@ -0,0 +1,13 @@ +use sea_orm::entity::prelude::*; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel)] +#[sea_orm(table_name = "insert_default")] +pub struct Model { + #[sea_orm(primary_key)] + pub id: i32, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation {} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/tests/common/features/mod.rs b/tests/common/features/mod.rs index 18c0ae78a..d316357e2 100644 --- a/tests/common/features/mod.rs +++ b/tests/common/features/mod.rs @@ -2,6 +2,7 @@ pub mod active_enum; pub mod active_enum_child; pub mod applog; pub mod byte_primary_key; +pub mod insert_default; pub mod metadata; pub mod repository; pub mod satellite; @@ -13,6 +14,7 @@ pub use active_enum::Entity as ActiveEnum; pub use active_enum_child::Entity as ActiveEnumChild; pub use applog::Entity as Applog; pub use byte_primary_key::Entity as BytePrimaryKey; +pub use insert_default::Entity as InsertDefault; pub use metadata::Entity as Metadata; pub use repository::Entity as Repository; pub use satellite::Entity as Satellite; diff --git a/tests/common/features/schema.rs b/tests/common/features/schema.rs index c15192535..149ec9616 100644 --- a/tests/common/features/schema.rs +++ b/tests/common/features/schema.rs @@ -37,6 +37,7 @@ pub async fn create_tables(db: &DatabaseConnection) -> Result<(), DbErr> { create_active_enum_table(db).await?; create_active_enum_child_table(db).await?; + create_insert_default_table(db).await?; Ok(()) } @@ -234,3 +235,18 @@ pub async fn create_satellites_table(db: &DbConn) -> Result { create_table(db, &stmt, Satellite).await } + +pub async fn create_insert_default_table(db: &DbConn) -> Result { + let create_table_stmt = sea_query::Table::create() + .table(insert_default::Entity.table_ref()) + .col( + ColumnDef::new(insert_default::Column::Id) + .integer() + .not_null() + .auto_increment() + .primary_key(), + ) + .to_owned(); + + create_table(db, &create_table_stmt, InsertDefault).await +} \ No newline at end of file diff --git a/tests/insert_default_tests.rs b/tests/insert_default_tests.rs new file mode 100644 index 000000000..648a11464 --- /dev/null +++ b/tests/insert_default_tests.rs @@ -0,0 +1,39 @@ +pub mod common; + +pub use common::{features::*, setup::*, TestContext}; +use pretty_assertions::assert_eq; +use sea_orm::entity::prelude::*; + +#[sea_orm_macros::test] +#[cfg(any( + feature = "sqlx-mysql", + feature = "sqlx-sqlite", + feature = "sqlx-postgres" +))] +async fn main() -> Result<(), DbErr> { + let ctx = TestContext::new("insert_default_tests").await; + create_tables(&ctx.db).await?; + create_insert_default(&ctx.db).await?; + ctx.delete().await; + + Ok(()) +} + +pub async fn create_insert_default(db: &DatabaseConnection) -> Result<(), DbErr> { + use insert_default::*; + + let active_model = ActiveModel { + ..Default::default() + }; + + active_model.clone().insert(db).await?; + active_model.clone().insert(db).await?; + active_model.insert(db).await?; + + assert_eq!( + Entity::find().all(db).await?, + vec![Model { id: 1 }, Model { id: 2 }, Model { id: 3 }] + ); + + Ok(()) +}