sea-orm/tests/sql_err_tests.rs
Ivan Yiu d50312c081
Test cases improvement (#1811)
* adds find_with_linked test

* WIP(related test)

* mock related test done

* complete relation test

* loader update

* find_with/also_related missing test case for empty from other side

* comments fixup

* revert loader test

* related select test done

* find with/also linked test cases

* removed due to it being functionally same as the new one

* fmt, remove excess import

* improved model generation

* issue related test case #1790

* added loader test cases and slight improvement to find_related/linked

* miscellaneous changes

* added empty insert, merge load_one test case

* completed loader many to many test case, fmt

* removed empty_insert test case for now

* commented insert_test

* added Cargo.toml for issue 1790's folder

* buffed salvo version for ci(0.49 yanked)

* revert version for salvo example
2023-08-18 20:02:17 +08:00

71 lines
2.0 KiB
Rust

pub mod common;
pub use common::{bakery_chain::*, setup::*, TestContext};
use rust_decimal_macros::dec;
pub use sea_orm::{
entity::*, error::DbErr, error::SqlErr, tests_cfg, DatabaseConnection, DbBackend, EntityName,
ExecResult,
};
use uuid::Uuid;
#[sea_orm_macros::test]
#[cfg(any(
feature = "sqlx-mysql",
feature = "sqlx-sqlite",
feature = "sqlx-postgres"
))]
async fn main() {
let ctx = TestContext::new("bakery_chain_sql_err_tests").await;
create_tables(&ctx.db).await.unwrap();
test_error(&ctx.db).await;
ctx.delete().await;
}
pub async fn test_error(db: &DatabaseConnection) {
let mud_cake = cake::ActiveModel {
name: Set("Moldy Cake".to_owned()),
price: Set(dec!(10.25)),
gluten_free: Set(false),
serial: Set(Uuid::new_v4()),
bakery_id: Set(None),
..Default::default()
};
let cake = mud_cake.save(db).await.expect("could not insert cake");
// if compiling without sqlx, this assignment will complain,
// but the whole test is useless in that case anyway.
#[allow(unused_variables)]
let error: DbErr = cake
.into_active_model()
.insert(db)
.await
.expect_err("inserting should fail due to duplicate primary key");
assert!(matches!(
error.sql_err(),
Some(SqlErr::UniqueConstraintViolation(_))
));
let fk_cake = cake::ActiveModel {
name: Set("fk error Cake".to_owned()),
price: Set(dec!(10.25)),
gluten_free: Set(false),
serial: Set(Uuid::new_v4()),
bakery_id: Set(Some(1000)),
..Default::default()
};
let fk_error = fk_cake
.insert(db)
.await
.expect_err("create foreign key should fail with non-primary key");
assert!(matches!(
fk_error.sql_err(),
Some(SqlErr::ForeignKeyConstraintViolation(_))
));
let invalid_error = DbErr::Custom("random error".to_string());
assert_eq!(invalid_error.sql_err(), None)
}