v / vlib / orm / orm_create_and_drop_test.v
140 lines · 112 sloc · 2.08 KB · 99be39cbd15d4bbb5ab14d2f870199908c00bc8d
Raw
1// vtest retry: 3
2import db.sqlite
3
4struct Parent {
5 id int @[primary; sql: serial]
6 children []Child @[fkey: 'parent_id']
7 notes []Note @[fkey: 'owner_id']
8}
9
10struct Child {
11mut:
12 id int @[primary; sql: serial]
13 parent_id int
14}
15
16struct Note {
17mut:
18 id int @[primary; sql: serial]
19 owner_id int
20}
21
22struct Entity {
23 name string @[primary]
24 description string
25}
26
27fn test_create_without_id_field() {
28 db := sqlite.connect(':memory:')!
29
30 sql db {
31 create table Entity
32 }!
33
34 first := Entity{
35 name: 'First'
36 description: 'Such wow! No `id` field'
37 }
38 second := Entity{
39 name: 'Second'
40 description: 'Such wow! No `id` field again'
41 }
42
43 sql db {
44 insert first into Entity
45 insert second into Entity
46 }!
47
48 entities := sql db {
49 select from Entity
50 }!
51
52 assert entities.len == 2
53
54 first_entity := sql db {
55 select from Entity where name == 'First'
56 }!
57
58 assert first_entity.first().name == 'First'
59
60 second_entity := sql db {
61 select from Entity where name == 'Second'
62 }!
63
64 assert second_entity.first().name == 'Second'
65}
66
67fn test_create_only_one_table() {
68 mut db := sqlite.connect(':memory:')!
69
70 sql db {
71 create table Parent
72 }!
73
74 mut is_child_created := true
75 mut is_note_created := true
76
77 _ := sql db {
78 select count from Child
79 } or {
80 is_child_created = false
81 0
82 }
83
84 _ := sql db {
85 select count from Note
86 } or {
87 is_note_created = false
88 0
89 }
90
91 assert is_child_created == false
92 assert is_note_created == false
93}
94
95fn test_drop_only_one_table() {
96 mut db := sqlite.connect(':memory:')!
97
98 sql db {
99 create table Parent
100 }!
101 sql db {
102 create table Child
103 }!
104 sql db {
105 create table Note
106 }!
107
108 mut is_parent_dropped := false
109 mut is_child_dropped := false
110 mut is_note_dropped := false
111
112 sql db {
113 drop table Parent
114 }!
115
116 _ := sql db {
117 select count from Parent
118 } or {
119 is_parent_dropped = true
120 0
121 }
122
123 _ := sql db {
124 select count from Child
125 } or {
126 is_child_dropped = true
127 0
128 }
129
130 _ := sql db {
131 select count from Note
132 } or {
133 is_note_dropped = true
134 0
135 }
136
137 assert is_parent_dropped
138 assert is_child_dropped == false
139 assert is_note_dropped == false
140}
141