toasty_driver_integration_suite/tests/
batch_query_dynamic.rs1use crate::prelude::*;
2
3#[driver_test(id(ID), requires(sql), scenario(crate::scenarios::two_models))]
4pub async fn batch_vec_of_queries(t: &mut Test) -> Result<()> {
5 let mut db = setup(t).await;
6
7 User::create().name("Alice").exec(&mut db).await?;
8 User::create().name("Bob").exec(&mut db).await?;
9 User::create().name("Carol").exec(&mut db).await?;
10
11 let results: Vec<Vec<User>> = toasty::batch(vec![
12 User::filter_by_name("Alice"),
13 User::filter_by_name("Bob"),
14 User::filter_by_name("Carol"),
15 ])
16 .exec(&mut db)
17 .await?;
18
19 assert_struct!(results, [[{ name: "Alice" }], [{ name: "Bob" }], [{ name: "Carol" }]]);
20
21 Ok(())
22}
23
24#[driver_test(id(ID), requires(sql), scenario(crate::scenarios::two_models))]
25pub async fn batch_array_of_queries(t: &mut Test) -> Result<()> {
26 let mut db = setup(t).await;
27
28 User::create().name("Alice").exec(&mut db).await?;
29 User::create().name("Bob").exec(&mut db).await?;
30
31 let results: Vec<Vec<User>> =
32 toasty::batch([User::filter_by_name("Alice"), User::filter_by_name("Bob")])
33 .exec(&mut db)
34 .await?;
35
36 assert_struct!(results, [[{ name: "Alice" }], [{ name: "Bob" }]]);
37
38 Ok(())
39}
40
41#[driver_test(id(ID), requires(sql), scenario(crate::scenarios::two_models))]
42pub async fn batch_vec_some_empty(t: &mut Test) -> Result<()> {
43 let mut db = setup(t).await;
44
45 User::create().name("Alice").exec(&mut db).await?;
46
47 let results: Vec<Vec<User>> = toasty::batch(vec![
48 User::filter_by_name("Alice"),
49 User::filter_by_name("nobody"),
50 ])
51 .exec(&mut db)
52 .await?;
53
54 assert_struct!(results, [[{ name: "Alice" }], []]);
55
56 Ok(())
57}
58
59#[driver_test(id(ID), requires(sql), scenario(crate::scenarios::two_models))]
60pub async fn batch_nested_tuple_with_vec(t: &mut Test) -> Result<()> {
61 let mut db = setup(t).await;
62
63 User::create().name("Alice").exec(&mut db).await?;
64 User::create().name("Bob").exec(&mut db).await?;
65 Post::create().title("Hello").exec(&mut db).await?;
66 Post::create().title("World").exec(&mut db).await?;
67
68 let (users, posts): (Vec<Vec<User>>, Vec<Vec<Post>>) = toasty::batch((
70 vec![User::filter_by_name("Alice"), User::filter_by_name("Bob")],
71 vec![
72 Post::filter_by_title("Hello"),
73 Post::filter_by_title("World"),
74 ],
75 ))
76 .exec(&mut db)
77 .await?;
78
79 assert_struct!(users, [[{ name: "Alice" }], [{ name: "Bob" }]]);
80 assert_struct!(posts, [[{ title: "Hello" }], [{ title: "World" }]]);
81
82 Ok(())
83}
84
85#[driver_test(id(ID), requires(sql), scenario(crate::scenarios::two_models))]
86pub async fn batch_vec_all_empty(t: &mut Test) -> Result<()> {
87 let mut db = setup(t).await;
88
89 let results: Vec<Vec<User>> = toasty::batch(vec![
90 User::filter_by_name("nobody"),
91 User::filter_by_name("ghost"),
92 ])
93 .exec(&mut db)
94 .await?;
95
96 assert_struct!(results, [[], []]);
97
98 Ok(())
99}