toasty_driver_integration_suite/tests/
batch_query_dynamic.rs1use crate::prelude::*;
2
3#[driver_test(id(ID), requires(sql))]
4pub async fn batch_vec_of_queries(t: &mut Test) -> Result<()> {
5 #[derive(Debug, toasty::Model)]
6 struct User {
7 #[key]
8 #[auto]
9 id: ID,
10 #[index]
11 name: String,
12 }
13
14 let mut db = t.setup_db(models!(User)).await;
15
16 User::create().name("Alice").exec(&mut db).await?;
17 User::create().name("Bob").exec(&mut db).await?;
18 User::create().name("Carol").exec(&mut db).await?;
19
20 let results: Vec<Vec<User>> = toasty::batch(vec![
21 User::filter_by_name("Alice"),
22 User::filter_by_name("Bob"),
23 User::filter_by_name("Carol"),
24 ])
25 .exec(&mut db)
26 .await?;
27
28 assert_struct!(results, [[_ { name: "Alice" }], [_ { name: "Bob" }], [_ { name: "Carol" }]]);
29
30 Ok(())
31}
32
33#[driver_test(id(ID), requires(sql))]
34pub async fn batch_array_of_queries(t: &mut Test) -> Result<()> {
35 #[derive(Debug, toasty::Model)]
36 struct User {
37 #[key]
38 #[auto]
39 id: ID,
40 #[index]
41 name: String,
42 }
43
44 let mut db = t.setup_db(models!(User)).await;
45
46 User::create().name("Alice").exec(&mut db).await?;
47 User::create().name("Bob").exec(&mut db).await?;
48
49 let results: Vec<Vec<User>> =
50 toasty::batch([User::filter_by_name("Alice"), User::filter_by_name("Bob")])
51 .exec(&mut db)
52 .await?;
53
54 assert_struct!(results, [[_ { name: "Alice" }], [_ { name: "Bob" }]]);
55
56 Ok(())
57}
58
59#[driver_test(id(ID), requires(sql))]
60pub async fn batch_vec_some_empty(t: &mut Test) -> Result<()> {
61 #[derive(Debug, toasty::Model)]
62 struct User {
63 #[key]
64 #[auto]
65 id: ID,
66 #[index]
67 name: String,
68 }
69
70 let mut db = t.setup_db(models!(User)).await;
71
72 User::create().name("Alice").exec(&mut db).await?;
73
74 let results: Vec<Vec<User>> = toasty::batch(vec![
75 User::filter_by_name("Alice"),
76 User::filter_by_name("nobody"),
77 ])
78 .exec(&mut db)
79 .await?;
80
81 assert_struct!(results, [[_ { name: "Alice" }], []]);
82
83 Ok(())
84}
85
86#[driver_test(id(ID), requires(sql))]
87pub async fn batch_nested_tuple_with_vec(t: &mut Test) -> Result<()> {
88 #[derive(Debug, toasty::Model)]
89 struct User {
90 #[key]
91 #[auto]
92 id: ID,
93 #[index]
94 name: String,
95 }
96
97 #[derive(Debug, toasty::Model)]
98 struct Post {
99 #[key]
100 #[auto]
101 id: ID,
102 #[index]
103 title: String,
104 }
105
106 let mut db = t.setup_db(models!(User, Post)).await;
107
108 User::create().name("Alice").exec(&mut db).await?;
109 User::create().name("Bob").exec(&mut db).await?;
110 Post::create().title("Hello").exec(&mut db).await?;
111 Post::create().title("World").exec(&mut db).await?;
112
113 let (users, posts): (Vec<Vec<User>>, Vec<Vec<Post>>) = toasty::batch((
115 vec![User::filter_by_name("Alice"), User::filter_by_name("Bob")],
116 vec![
117 Post::filter_by_title("Hello"),
118 Post::filter_by_title("World"),
119 ],
120 ))
121 .exec(&mut db)
122 .await?;
123
124 assert_struct!(users, [[_ { name: "Alice" }], [_ { name: "Bob" }]]);
125 assert_struct!(posts, [[_ { title: "Hello" }], [_ { title: "World" }]]);
126
127 Ok(())
128}
129
130#[driver_test(id(ID), requires(sql))]
131pub async fn batch_vec_all_empty(t: &mut Test) -> Result<()> {
132 #[derive(Debug, toasty::Model)]
133 struct User {
134 #[key]
135 #[auto]
136 id: ID,
137 #[index]
138 name: String,
139 }
140
141 let mut db = t.setup_db(models!(User)).await;
142
143 let results: Vec<Vec<User>> = toasty::batch(vec![
144 User::filter_by_name("nobody"),
145 User::filter_by_name("ghost"),
146 ])
147 .exec(&mut db)
148 .await?;
149
150 assert_struct!(results, [[], []]);
151
152 Ok(())
153}