toasty_driver_integration_suite/tests/
one_model_model_level_key.rs

1use crate::prelude::*;
2
3/// Test that `#[key(field)]` on the model is equivalent to `#[key]` on the field
4#[driver_test]
5pub async fn model_level_single_key(test: &mut Test) -> Result<()> {
6    #[derive(Debug, toasty::Model)]
7    #[key(name)]
8    struct Widget {
9        name: String,
10
11        value: i64,
12    }
13
14    let mut db = test.setup_db(models!(Widget)).await;
15
16    let widget = Widget::create()
17        .name("sprocket")
18        .value(42)
19        .exec(&mut db)
20        .await?;
21
22    assert_eq!(widget.name, "sprocket");
23    assert_eq!(widget.value, 42);
24
25    // Find by key
26    let found = Widget::filter_by_name("sprocket").get(&mut db).await?;
27    assert_eq!(found.value, 42);
28
29    Ok(())
30}
31
32/// Test that `#[key(a, b)]` on the model is equivalent to `#[key]` on both fields
33#[driver_test]
34pub async fn model_level_composite_key(test: &mut Test) -> Result<()> {
35    #[derive(Debug, toasty::Model)]
36    #[key(one, two)]
37    struct Pair {
38        one: String,
39
40        two: String,
41    }
42
43    let mut db = test.setup_db(models!(Pair)).await;
44
45    Pair::create()
46        .one("hello")
47        .two("world")
48        .exec(&mut db)
49        .await?;
50
51    Pair::create()
52        .one("left")
53        .two("right")
54        .exec(&mut db)
55        .await?;
56
57    let found = Pair::filter_by_one_and_two("hello", "world")
58        .get(&mut db)
59        .await?;
60
61    assert_eq!(found.one, "hello");
62    assert_eq!(found.two, "world");
63
64    Ok(())
65}