Skip to content

Commit f581a45

Browse files
committed
More complex test cases
1 parent ca0d5b8 commit f581a45

File tree

4 files changed

+219
-86
lines changed

4 files changed

+219
-86
lines changed

Diff for: tests/common/bakery_chain/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ pub mod customer;
66
pub mod lineitem;
77
pub mod order;
88
pub mod schema;
9+
pub mod seed_data;
910

1011
pub use baker::Entity as Baker;
1112
pub use bakery::Entity as Bakery;

Diff for: tests/common/bakery_chain/seed_data.rs

+100
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
use super::*;
2+
use crate::common::TestContext;
3+
use sea_orm::{prelude::*, NotSet, Set};
4+
5+
pub async fn init_1(ctx: &TestContext, link: bool) {
6+
bakery::Entity::insert(bakery::ActiveModel {
7+
id: Set(42),
8+
name: Set("cool little bakery".to_string()),
9+
profit_margin: Set(4.1),
10+
})
11+
.exec(&ctx.db)
12+
.await
13+
.expect("insert succeeds");
14+
15+
cake::Entity::insert(cake::ActiveModel {
16+
id: Set(13),
17+
name: Set("Cheesecake".to_owned()),
18+
price: Set(2.into()),
19+
bakery_id: Set(if link { Some(42) } else { None }),
20+
gluten_free: Set(false),
21+
..Default::default()
22+
})
23+
.exec(&ctx.db)
24+
.await
25+
.expect("insert succeeds");
26+
27+
cake::Entity::insert(cake::ActiveModel {
28+
id: Set(15),
29+
name: Set("Chocolate".to_owned()),
30+
price: Set(3.into()),
31+
bakery_id: Set(if link { Some(42) } else { None }),
32+
gluten_free: Set(false),
33+
..Default::default()
34+
})
35+
.exec(&ctx.db)
36+
.await
37+
.expect("insert succeeds");
38+
39+
baker::Entity::insert(baker::ActiveModel {
40+
id: Set(22),
41+
name: Set("Master Baker".to_owned()),
42+
contact_details: Set(Json::Null),
43+
bakery_id: Set(if link { Some(42) } else { None }),
44+
})
45+
.exec(&ctx.db)
46+
.await
47+
.expect("insert succeeds");
48+
49+
if link {
50+
cakes_bakers::Entity::insert(cakes_bakers::ActiveModel {
51+
cake_id: Set(13),
52+
baker_id: Set(22),
53+
})
54+
.exec(&ctx.db)
55+
.await
56+
.expect("insert succeeds");
57+
58+
customer::Entity::insert(customer::ActiveModel {
59+
id: Set(11),
60+
name: Set("Bob".to_owned()),
61+
notes: Set(Some("Sweet tooth".to_owned())),
62+
})
63+
.exec(&ctx.db)
64+
.await
65+
.expect("insert succeeds");
66+
67+
order::Entity::insert(order::ActiveModel {
68+
id: Set(101),
69+
total: Set(10.into()),
70+
bakery_id: Set(42),
71+
customer_id: Set(11),
72+
placed_at: Set(DateTime::UNIX_EPOCH),
73+
})
74+
.exec(&ctx.db)
75+
.await
76+
.expect("insert succeeds");
77+
78+
lineitem::Entity::insert(lineitem::ActiveModel {
79+
id: NotSet,
80+
price: Set(2.into()),
81+
quantity: Set(2),
82+
order_id: Set(101),
83+
cake_id: Set(13),
84+
})
85+
.exec(&ctx.db)
86+
.await
87+
.expect("insert succeeds");
88+
89+
lineitem::Entity::insert(lineitem::ActiveModel {
90+
id: NotSet,
91+
price: Set(3.into()),
92+
quantity: Set(2),
93+
order_id: Set(101),
94+
cake_id: Set(15),
95+
})
96+
.exec(&ctx.db)
97+
.await
98+
.expect("insert succeeds");
99+
}
100+
}

Diff for: tests/from_query_result_tests.rs

+17-53
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
#![allow(unused_imports, dead_code)]
22

3-
use sea_orm::{prelude::*, query::QuerySelect, FromQueryResult, JoinType, Set};
3+
use sea_orm::{
4+
prelude::*,
5+
query::{QueryOrder, QuerySelect},
6+
FromQueryResult, JoinType, Set,
7+
};
48

59
use crate::common::TestContext;
610
use common::bakery_chain::*;
@@ -45,55 +49,12 @@ struct BakeryFlat {
4549
profit: f64,
4650
}
4751

48-
async fn fill_data(ctx: &TestContext, link: bool) {
49-
bakery::Entity::insert(bakery::ActiveModel {
50-
id: Set(42),
51-
name: Set("cool little bakery".to_string()),
52-
profit_margin: Set(4.1),
53-
})
54-
.exec(&ctx.db)
55-
.await
56-
.expect("insert succeeds");
57-
58-
cake::Entity::insert(cake::ActiveModel {
59-
id: Set(13),
60-
name: Set("Test Cake".to_owned()),
61-
price: Set(2.into()),
62-
bakery_id: Set(if link { Some(42) } else { None }),
63-
gluten_free: Set(true),
64-
serial: Set(Uuid::new_v4()),
65-
})
66-
.exec(&ctx.db)
67-
.await
68-
.expect("insert succeeds");
69-
70-
baker::Entity::insert(baker::ActiveModel {
71-
id: Set(22),
72-
name: Set("Master Baker".to_owned()),
73-
contact_details: Set(json!(null)),
74-
bakery_id: Set(if link { Some(42) } else { None }),
75-
})
76-
.exec(&ctx.db)
77-
.await
78-
.expect("insert succeeds");
79-
80-
if link {
81-
cakes_bakers::Entity::insert(cakes_bakers::ActiveModel {
82-
cake_id: Set(13),
83-
baker_id: Set(22),
84-
})
85-
.exec(&ctx.db)
86-
.await
87-
.expect("insert succeeds");
88-
}
89-
}
90-
9152
#[sea_orm_macros::test]
9253
async fn from_query_result_left_join_does_not_exist() {
9354
let ctx = TestContext::new("from_query_result_left_join_does_not_exist").await;
9455
create_tables(&ctx.db).await.unwrap();
9556

96-
fill_data(&ctx, false).await;
57+
seed_data::init_1(&ctx, false).await;
9758

9859
let cake: Cake = cake::Entity::find()
9960
.select_only()
@@ -102,14 +63,15 @@ async fn from_query_result_left_join_does_not_exist() {
10263
.column_as(bakery::Column::Id, "bakery_id")
10364
.column_as(bakery::Column::Name, "bakery_name")
10465
.left_join(bakery::Entity)
66+
.order_by_asc(cake::Column::Id)
10567
.into_model()
10668
.one(&ctx.db)
10769
.await
10870
.expect("succeeds to get the result")
10971
.expect("exactly one model in DB");
11072

11173
assert_eq!(cake.id, 13);
112-
assert_eq!(cake.name, "Test Cake");
74+
assert_eq!(cake.name, "Cheesecake");
11375
assert!(cake.bakery.is_none());
11476

11577
ctx.delete().await;
@@ -120,7 +82,7 @@ async fn from_query_result_left_join_exists() {
12082
let ctx = TestContext::new("from_query_result_left_join_exists").await;
12183
create_tables(&ctx.db).await.unwrap();
12284

123-
fill_data(&ctx, true).await;
85+
seed_data::init_1(&ctx, true).await;
12486

12587
let cake: Cake = cake::Entity::find()
12688
.select_only()
@@ -129,14 +91,15 @@ async fn from_query_result_left_join_exists() {
12991
.column_as(bakery::Column::Id, "bakery_id")
13092
.column_as(bakery::Column::Name, "bakery_name")
13193
.left_join(bakery::Entity)
94+
.order_by_asc(cake::Column::Id)
13295
.into_model()
13396
.one(&ctx.db)
13497
.await
13598
.expect("succeeds to get the result")
13699
.expect("exactly one model in DB");
137100

138101
assert_eq!(cake.id, 13);
139-
assert_eq!(cake.name, "Test Cake");
102+
assert_eq!(cake.name, "Cheesecake");
140103
let bakery = cake.bakery.unwrap();
141104
assert_eq!(bakery.id, 42);
142105
assert_eq!(bakery.title, "cool little bakery");
@@ -149,7 +112,7 @@ async fn from_query_result_flat() {
149112
let ctx = TestContext::new("from_query_result_flat").await;
150113
create_tables(&ctx.db).await.unwrap();
151114

152-
fill_data(&ctx, true).await;
115+
seed_data::init_1(&ctx, true).await;
153116

154117
let bakery: BakeryFlat = bakery::Entity::find()
155118
.into_model()
@@ -170,7 +133,7 @@ async fn from_query_result_nested() {
170133
let ctx = TestContext::new("from_query_result_nested").await;
171134
create_tables(&ctx.db).await.unwrap();
172135

173-
fill_data(&ctx, true).await;
136+
seed_data::init_1(&ctx, true).await;
174137

175138
let bakery: BakeryDetails = bakery::Entity::find()
176139
.select_only()
@@ -204,20 +167,21 @@ async fn from_query_result_plain_model() {
204167
let ctx = TestContext::new("from_query_result_plain_model").await;
205168
create_tables(&ctx.db).await.unwrap();
206169

207-
fill_data(&ctx, true).await;
170+
seed_data::init_1(&ctx, true).await;
208171

209172
let cake: CakePlain = cake::Entity::find()
210173
.column(cakes_bakers::Column::CakeId)
211174
.column(cakes_bakers::Column::BakerId)
212175
.join(JoinType::LeftJoin, cakes_bakers::Relation::Cake.def().rev())
176+
.order_by_asc(cake::Column::Id)
213177
.into_model()
214178
.one(&ctx.db)
215179
.await
216180
.expect("succeeds to get the result")
217181
.expect("exactly one model in DB");
218182

219183
assert_eq!(cake.id, 13);
220-
assert_eq!(cake.name, "Test Cake");
184+
assert_eq!(cake.name, "Cheesecake");
221185
assert_eq!(cake.price, Decimal::from(2));
222186
let baker = cake.baker.unwrap();
223187
assert_eq!(baker.cake_id, 13);
@@ -245,7 +209,7 @@ async fn from_query_result_optional_field_but_type_error() {
245209
let ctx = TestContext::new("from_query_result_nested_error").await;
246210
create_tables(&ctx.db).await.unwrap();
247211

248-
fill_data(&ctx, false).await;
212+
seed_data::init_1(&ctx, false).await;
249213

250214
let _: DbErr = cake::Entity::find()
251215
.select_only()

0 commit comments

Comments
 (0)