()
| 142 | |
| 143 | #[sea_orm_macros::test] |
| 144 | async fn loader_load_many_to_many() -> Result<(), DbErr> { |
| 145 | let ctx = TestContext::new("loader_test_load_many_to_many").await; |
| 146 | create_tables(&ctx.db).await?; |
| 147 | |
| 148 | let bakery_1 = insert_bakery(&ctx.db, "SeaSide Bakery").await?; |
| 149 | |
| 150 | let baker_1 = insert_baker(&ctx.db, "Jane", bakery_1.id).await?; |
| 151 | let baker_2 = insert_baker(&ctx.db, "Peter", bakery_1.id).await?; |
| 152 | let baker_3 = insert_baker(&ctx.db, "Fred", bakery_1.id).await?; // does not make cake |
| 153 | |
| 154 | let cake_1 = insert_cake(&ctx.db, "Cheesecake", None).await?; |
| 155 | let cake_2 = insert_cake(&ctx.db, "Coffee", None).await?; |
| 156 | let cake_3 = insert_cake(&ctx.db, "Chiffon", None).await?; |
| 157 | let cake_4 = insert_cake(&ctx.db, "Apple Pie", None).await?; // no one makes apple pie |
| 158 | |
| 159 | insert_cake_baker(&ctx.db, baker_1.id, cake_1.id).await?; |
| 160 | insert_cake_baker(&ctx.db, baker_1.id, cake_2.id).await?; |
| 161 | insert_cake_baker(&ctx.db, baker_2.id, cake_2.id).await?; |
| 162 | insert_cake_baker(&ctx.db, baker_2.id, cake_3.id).await?; |
| 163 | |
| 164 | let bakers = baker::Entity::find().all(&ctx.db).await?; |
| 165 | let cakes = bakers |
| 166 | .load_many_to_many(cake::Entity, cakes_bakers::Entity, &ctx.db) |
| 167 | .await?; |
| 168 | |
| 169 | assert_eq!(bakers, [baker_1.clone(), baker_2.clone(), baker_3.clone()]); |
| 170 | assert_eq!( |
| 171 | cakes, |
| 172 | [ |
| 173 | vec![cake_1.clone(), cake_2.clone()], |
| 174 | vec![cake_2.clone(), cake_3.clone()], |
| 175 | vec![] |
| 176 | ] |
| 177 | ); |
| 178 | |
| 179 | // same, but apply restrictions on cakes |
| 180 | |
| 181 | let cakes = bakers |
| 182 | .load_many_to_many( |
| 183 | cake::Entity::find().filter(cake::Column::Name.like("Ch%")), |
| 184 | cakes_bakers::Entity, |
| 185 | &ctx.db, |
| 186 | ) |
| 187 | .await?; |
| 188 | assert_eq!(cakes, [vec![cake_1.clone()], vec![cake_3.clone()], vec![]]); |
| 189 | |
| 190 | // now, start again from cakes |
| 191 | |
| 192 | let cakes = cake::Entity::find().all(&ctx.db).await?; |
| 193 | let bakers = cakes |
| 194 | .load_many_to_many(baker::Entity, cakes_bakers::Entity, &ctx.db) |
| 195 | .await?; |
| 196 | |
| 197 | assert_eq!(cakes, [cake_1, cake_2, cake_3, cake_4]); |
| 198 | assert_eq!( |
| 199 | bakers, |
| 200 | [ |
| 201 | vec![baker_1.clone()], |
nothing calls this directly
no test coverage detected