toasty_driver_integration_suite/tests/
relation_belongs_to_embed_key.rs1use crate::prelude::*;
2
3#[driver_test(requires(sql))]
8pub async fn belongs_to_with_embed_pk(t: &mut Test) -> Result<()> {
9 #[derive(Clone, Debug, PartialEq, Eq, toasty::Embed)]
10 pub struct MeetingId(String);
11
12 #[derive(Clone, Debug, PartialEq, Eq, toasty::Embed)]
13 pub struct AgendaItemId(String);
14
15 #[derive(Debug, toasty::Model)]
16 pub struct Meeting {
17 #[key]
18 pub id: MeetingId,
19
20 #[has_many]
21 pub agenda_items: toasty::HasMany<AgendaItem>,
22 }
23
24 #[derive(Debug, toasty::Model)]
25 pub struct AgendaItem {
26 #[key]
27 pub id: AgendaItemId,
28
29 #[index]
30 pub meeting_id: MeetingId,
31
32 #[belongs_to(key = meeting_id, references = id)]
33 pub meeting: toasty::BelongsTo<Meeting>,
34 }
35
36 let mut db = t
37 .setup_db(models!(Meeting, AgendaItem, MeetingId, AgendaItemId))
38 .await;
39
40 let meeting = toasty::create!(Meeting {
41 id: MeetingId("m1".into()),
42 })
43 .exec(&mut db)
44 .await?;
45
46 let item = toasty::create!(AgendaItem {
47 id: AgendaItemId("a1".into()),
48 meeting: &meeting,
49 })
50 .exec(&mut db)
51 .await?;
52
53 assert_eq!(item.meeting_id.0, "m1");
54
55 let loaded = item.meeting().exec(&mut db).await?;
57 assert_eq!(loaded.id.0, "m1");
58
59 Ok(())
60}