toasty_driver_integration_suite/tests/
embed_enum_collection.rs1use crate::prelude::*;
8
9#[derive(Clone, Copy, Debug, PartialEq, toasty::Embed)]
10enum Color {
11 #[column(variant = 1)]
12 Red,
13 #[column(variant = 2)]
14 Green,
15 #[column(variant = 3)]
16 Blue,
17}
18
19#[derive(Debug, toasty::Model)]
20struct Palette {
21 #[key]
22 #[auto]
23 id: uuid::Uuid,
24 colors: Vec<Color>,
25}
26
27#[driver_test(requires(document_collections))]
30pub async fn vec_enum_create_get(t: &mut Test) -> Result<(), BoxError> {
31 let mut db = t.setup_db(models!(Palette)).await;
32
33 let colors = [Color::Red, Color::Blue];
34 let palette = toasty::create!(Palette { colors }).exec(&mut db).await?;
35
36 let reloaded = Palette::get_by_id(&mut db, &palette.id).await?;
37 assert_eq!(reloaded.colors, colors);
38
39 Ok(())
40}
41
42#[driver_test(requires(document_collections))]
46pub async fn vec_enum_contains_and_len(t: &mut Test) -> Result<(), BoxError> {
47 let mut db = t.setup_db(models!(Palette)).await;
48
49 toasty::create!(Palette::[
50 { colors: [Color::Red, Color::Green] },
51 { colors: [Color::Blue] },
52 { colors: [Color::Red, Color::Green, Color::Blue] },
53 ])
54 .exec(&mut db)
55 .await?;
56
57 let reds = Palette::filter(Palette::fields().colors().contains(Color::Red))
58 .exec(&mut db)
59 .await?;
60 assert_eq!(reds.len(), 2);
61
62 let singletons = Palette::filter(Palette::fields().colors().len().eq(1))
63 .exec(&mut db)
64 .await?;
65 assert_eq!(singletons.len(), 1);
66
67 let triples = Palette::filter(Palette::fields().colors().len().eq(3))
68 .exec(&mut db)
69 .await?;
70 assert_eq!(triples.len(), 1);
71
72 Ok(())
73}