From 32f82a0c9b8722048a0439f250b20728526b3fb2 Mon Sep 17 00:00:00 2001 From: Billy Chan Date: Mon, 18 Oct 2021 17:39:30 +0800 Subject: [PATCH] Test self referencing relation --- tests/common/features/mod.rs | 2 + tests/common/features/schema.rs | 27 ++++++++- tests/common/features/self_join.rs | 77 ++++++++++++++++++++++++++ tests/self_join_tests.rs | 89 ++++++++++++++++++++++++++++++ 4 files changed, 194 insertions(+), 1 deletion(-) create mode 100644 tests/common/features/self_join.rs create mode 100644 tests/self_join_tests.rs diff --git a/tests/common/features/mod.rs b/tests/common/features/mod.rs index ff716f01..1e709edf 100644 --- a/tests/common/features/mod.rs +++ b/tests/common/features/mod.rs @@ -2,8 +2,10 @@ pub mod applog; pub mod metadata; pub mod repository; pub mod schema; +pub mod self_join; pub use applog::Entity as Applog; pub use metadata::Entity as Metadata; pub use repository::Entity as Repository; pub use schema::*; +pub use self_join::Entity as SelfJoin; diff --git a/tests/common/features/schema.rs b/tests/common/features/schema.rs index 44b011c5..7e6f6424 100644 --- a/tests/common/features/schema.rs +++ b/tests/common/features/schema.rs @@ -3,12 +3,13 @@ pub use super::super::bakery_chain::*; use super::*; use crate::common::setup::create_table; use sea_orm::{error::*, sea_query, DatabaseConnection, DbConn, ExecResult}; -use sea_query::ColumnDef; +use sea_query::{ColumnDef, ForeignKeyCreateStatement}; pub async fn create_tables(db: &DatabaseConnection) -> Result<(), DbErr> { create_log_table(db).await?; create_metadata_table(db).await?; create_repository_table(db).await?; + create_self_join_table(db).await?; Ok(()) } @@ -75,3 +76,27 @@ pub async fn create_repository_table(db: &DbConn) -> Result { create_table(db, &stmt, Repository).await } + +pub async fn create_self_join_table(db: &DbConn) -> Result { + let stmt = sea_query::Table::create() + .table(self_join::Entity) + .col( + ColumnDef::new(self_join::Column::Uuid) + .uuid() + .not_null() + .primary_key(), + ) + .col(ColumnDef::new(self_join::Column::UuidRef).uuid()) + .col(ColumnDef::new(self_join::Column::Time).time()) + .foreign_key( + ForeignKeyCreateStatement::new() + .name("fk-self_join-self_join") + .from_tbl(SelfJoin) + .from_col(self_join::Column::UuidRef) + .to_tbl(SelfJoin) + .to_col(self_join::Column::Uuid), + ) + .to_owned(); + + create_table(db, &stmt, SelfJoin).await +} diff --git a/tests/common/features/self_join.rs b/tests/common/features/self_join.rs new file mode 100644 index 00000000..de491a09 --- /dev/null +++ b/tests/common/features/self_join.rs @@ -0,0 +1,77 @@ +use sea_orm::entity::prelude::*; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel)] +#[sea_orm(table_name = "self_join")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub uuid: Uuid, + pub uuid_ref: Option, + pub time: Option