toasty_driver_integration_suite/tests/
relation_belongs_to_configured.rs1use crate::prelude::*;
2
3#[driver_test(id(ID))]
4pub async fn different_field_name(test: &mut Test) -> Result<()> {
5 #[derive(Debug, toasty::Model)]
6 struct User {
7 #[key]
8 #[auto]
9 id: ID,
10
11 #[has_many(pair = owner)]
12 todos: toasty::HasMany<Todo>,
13 }
14
15 #[derive(Debug, toasty::Model)]
16 struct Todo {
17 #[key]
18 #[auto]
19 id: ID,
20
21 #[belongs_to(key = owner_id, references = id)]
22 owner: toasty::BelongsTo<User>,
23
24 #[index]
25 owner_id: ID,
26
27 title: String,
28 }
29
30 let mut db = test.setup_db(models!(User, Todo)).await;
31
32 let user = User::create().exec(&mut db).await?;
34
35 let todo = user
37 .todos()
38 .create()
39 .title("hello world")
40 .exec(&mut db)
41 .await?;
42
43 assert_eq!(todo.title, "hello world");
44
45 let user_reloaded = todo.owner().exec(&mut db).await?;
47
48 assert_eq!(user.id, user_reloaded.id);
49 Ok(())
50}
51
52#[driver_test(id(ID))]
57pub async fn has_one_different_field_name(test: &mut Test) -> Result<()> {
58 #[derive(Debug, toasty::Model)]
59 struct Parent {
60 #[key]
61 #[auto]
62 id: ID,
63
64 #[has_one(pair = owner)]
65 other: toasty::HasOne<Child>,
66 }
67
68 #[derive(Debug, toasty::Model)]
69 struct Child {
70 #[key]
71 #[auto]
72 id: ID,
73
74 #[belongs_to(key = owner_id, references = id)]
75 owner: toasty::BelongsTo<Parent>,
76
77 #[unique]
78 owner_id: ID,
79 }
80
81 let mut db = test.setup_db(models!(Parent, Child)).await;
82
83 let parent = Parent::create()
84 .other(Child::create())
85 .exec(&mut db)
86 .await?;
87
88 let child = parent.other().exec(&mut db).await?;
89 assert_eq!(child.owner_id, parent.id);
90
91 let parent_reloaded = child.owner().exec(&mut db).await?;
92 assert_eq!(parent.id, parent_reloaded.id);
93
94 Ok(())
95}