blob: b06706d026667ff41815339181ee3ac895daa139 [file] [log] [blame]
Sabina Leaverc5fd2772022-01-29 17:00:23 -08001package db
2
3import (
Philipp Schrader83fc2722022-03-10 21:59:20 -08004 "fmt"
Philipp Schrader7365d322022-03-06 16:40:08 -08005 "log"
Philipp Schrader4953cc32022-02-25 18:09:02 -08006 "os"
Philipp Schrader7365d322022-03-06 16:40:08 -08007 "os/exec"
Sabina Leaverc5fd2772022-01-29 17:00:23 -08008 "reflect"
9 "testing"
Philipp Schrader7365d322022-03-06 16:40:08 -080010 "time"
Sabina Leaverc5fd2772022-01-29 17:00:23 -080011)
12
Philipp Schrader83fc2722022-03-10 21:59:20 -080013// Shortcut for error checking. If the specified error is non-nil, print the
14// error message and exit the test.
15func check(t *testing.T, err error, message string) {
16 if err != nil {
17 t.Fatal(message, ":", err)
18 }
19}
20
Philipp Schrader7365d322022-03-06 16:40:08 -080021type dbFixture struct {
22 db *Database
23 server *exec.Cmd
24}
25
26func (fixture dbFixture) TearDown() {
27 fixture.db.Delete()
28 fixture.db.Close()
29 log.Println("Shutting down testdb")
30 fixture.server.Process.Signal(os.Interrupt)
31 fixture.server.Process.Wait()
32 log.Println("Successfully shut down testdb")
33}
34
35func createDatabase(t *testing.T) dbFixture {
36 var fixture dbFixture
37
38 log.Println("Starting up postgres.")
39 fixture.server = exec.Command("testdb_server/testdb_server_/testdb_server")
40 fixture.server.Stdout = os.Stdout
41 fixture.server.Stderr = os.Stderr
42 err := fixture.server.Start()
43 check(t, err, "Failed to run postgres")
44
45 // Wait until the server is ready. We cannot rely on the TCP socket
46 // alone because postgres creates the socket before it's actually ready
47 // to service requests.
48 for {
49 fixture.db, err = NewDatabase("test", "password", 5432)
50 if err == nil {
51 break
52 }
53 time.Sleep(50 * time.Millisecond)
54 }
55 log.Println("Connected to postgres.")
56
57 return fixture
Philipp Schrader4953cc32022-02-25 18:09:02 -080058}
59
60func TestAddToMatchDB(t *testing.T) {
Philipp Schrader7365d322022-03-06 16:40:08 -080061 fixture := createDatabase(t)
62 defer fixture.TearDown()
Philipp Schrader4953cc32022-02-25 18:09:02 -080063
Philipp Schrader83fc2722022-03-10 21:59:20 -080064 correct := []Match{
65 Match{
66 MatchNumber: 7,
67 Round: 1,
68 CompLevel: "quals",
69 R1: 9999, R2: 1000, R3: 777, B1: 0000, B2: 4321, B3: 1234,
70 r1ID: 1, r2ID: 2, r3ID: 3, b1ID: 4, b2ID: 5, b3ID: 6,
71 },
Sabina Leaverc5fd2772022-01-29 17:00:23 -080072 }
Philipp Schrader83fc2722022-03-10 21:59:20 -080073
Philipp Schrader7365d322022-03-06 16:40:08 -080074 err := fixture.db.AddToMatch(correct[0])
Philipp Schrader83fc2722022-03-10 21:59:20 -080075 check(t, err, "Failed to add match data")
76
Philipp Schrader7365d322022-03-06 16:40:08 -080077 got, err := fixture.db.ReturnMatches()
Philipp Schrader83fc2722022-03-10 21:59:20 -080078 check(t, err, "Failed ReturnMatches()")
79
Sabina Leaverc5fd2772022-01-29 17:00:23 -080080 if !reflect.DeepEqual(correct, got) {
81 t.Fatalf("Got %#v,\nbut expected %#v.", got, correct)
82 }
Sabina Leaverc5fd2772022-01-29 17:00:23 -080083}
84
85func TestAddToStatsDB(t *testing.T) {
Philipp Schrader7365d322022-03-06 16:40:08 -080086 fixture := createDatabase(t)
87 defer fixture.TearDown()
Philipp Schrader4953cc32022-02-25 18:09:02 -080088
Sabina Leaverc5fd2772022-01-29 17:00:23 -080089 correct := []Stats{
Philipp Schrader83fc2722022-03-10 21:59:20 -080090 Stats{
91 TeamNumber: 1236, MatchNumber: 7,
92 ShotsMissed: 9, UpperGoalShots: 5, LowerGoalShots: 4,
93 ShotsMissedAuto: 3, UpperGoalAuto: 2, LowerGoalAuto: 1,
94 PlayedDefense: 2, Climbing: 3,
Philipp Schraderfae8a7e2022-03-13 22:51:54 -070095 CollectedBy: "josh",
Philipp Schrader83fc2722022-03-10 21:59:20 -080096 },
97 Stats{
98 TeamNumber: 1001, MatchNumber: 7,
99 ShotsMissed: 6, UpperGoalShots: 9, LowerGoalShots: 9,
100 ShotsMissedAuto: 0, UpperGoalAuto: 0, LowerGoalAuto: 0,
101 PlayedDefense: 0, Climbing: 0,
Philipp Schraderfae8a7e2022-03-13 22:51:54 -0700102 CollectedBy: "rupert",
Philipp Schrader83fc2722022-03-10 21:59:20 -0800103 },
104 Stats{
105 TeamNumber: 777, MatchNumber: 7,
106 ShotsMissed: 5, UpperGoalShots: 7, LowerGoalShots: 12,
107 ShotsMissedAuto: 0, UpperGoalAuto: 4, LowerGoalAuto: 0,
108 PlayedDefense: 0, Climbing: 0,
Philipp Schraderfae8a7e2022-03-13 22:51:54 -0700109 CollectedBy: "felix",
Philipp Schrader83fc2722022-03-10 21:59:20 -0800110 },
111 Stats{
112 TeamNumber: 1000, MatchNumber: 7,
113 ShotsMissed: 12, UpperGoalShots: 6, LowerGoalShots: 10,
114 ShotsMissedAuto: 0, UpperGoalAuto: 7, LowerGoalAuto: 0,
115 PlayedDefense: 0, Climbing: 0,
Philipp Schraderfae8a7e2022-03-13 22:51:54 -0700116 CollectedBy: "thea",
Philipp Schrader83fc2722022-03-10 21:59:20 -0800117 },
118 Stats{
119 TeamNumber: 4321, MatchNumber: 7,
120 ShotsMissed: 14, UpperGoalShots: 12, LowerGoalShots: 3,
121 ShotsMissedAuto: 0, UpperGoalAuto: 7, LowerGoalAuto: 0,
122 PlayedDefense: 0, Climbing: 0,
Philipp Schraderfae8a7e2022-03-13 22:51:54 -0700123 CollectedBy: "amy",
Philipp Schrader83fc2722022-03-10 21:59:20 -0800124 },
125 Stats{
126 TeamNumber: 1234, MatchNumber: 7,
127 ShotsMissed: 3, UpperGoalShots: 4, LowerGoalShots: 0,
128 ShotsMissedAuto: 0, UpperGoalAuto: 9, LowerGoalAuto: 0,
129 PlayedDefense: 0, Climbing: 0,
Philipp Schraderfae8a7e2022-03-13 22:51:54 -0700130 CollectedBy: "beth",
Philipp Schrader83fc2722022-03-10 21:59:20 -0800131 },
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800132 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800133
Philipp Schrader7365d322022-03-06 16:40:08 -0800134 err := fixture.db.AddToMatch(Match{
Philipp Schrader83fc2722022-03-10 21:59:20 -0800135 MatchNumber: 7, Round: 1, CompLevel: "quals",
136 R1: 1236, R2: 1001, R3: 777, B1: 1000, B2: 4321, B3: 1234,
Philipp Schrader7365d322022-03-06 16:40:08 -0800137 r1ID: 1, r2ID: 2, r3ID: 3, b1ID: 4, b2ID: 5, b3ID: 6,
138 })
Philipp Schrader83fc2722022-03-10 21:59:20 -0800139 check(t, err, "Failed to add match")
140
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800141 for i := 0; i < len(correct); i++ {
Philipp Schrader7365d322022-03-06 16:40:08 -0800142 err = fixture.db.AddToStats(correct[i])
Philipp Schrader83fc2722022-03-10 21:59:20 -0800143 check(t, err, "Failed to add stats to DB")
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800144 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800145
Philipp Schrader7365d322022-03-06 16:40:08 -0800146 got, err := fixture.db.ReturnStats()
Philipp Schrader83fc2722022-03-10 21:59:20 -0800147 check(t, err, "Failed ReturnStats()")
148
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800149 if !reflect.DeepEqual(correct, got) {
150 t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
151 }
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800152}
153
154func TestQueryMatchDB(t *testing.T) {
Philipp Schrader7365d322022-03-06 16:40:08 -0800155 fixture := createDatabase(t)
156 defer fixture.TearDown()
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800157
158 testDatabase := []Match{
Philipp Schrader1e6c0a92022-02-27 23:30:57 -0800159 Match{MatchNumber: 2, Round: 1, CompLevel: "quals", R1: 251, R2: 169, R3: 286, B1: 253, B2: 538, B3: 149},
160 Match{MatchNumber: 4, Round: 1, CompLevel: "quals", R1: 198, R2: 135, R3: 777, B1: 999, B2: 434, B3: 698},
161 Match{MatchNumber: 3, Round: 1, CompLevel: "quals", R1: 147, R2: 421, R3: 538, B1: 126, B2: 448, B3: 262},
162 Match{MatchNumber: 6, Round: 1, CompLevel: "quals", R1: 191, R2: 132, R3: 773, B1: 994, B2: 435, B3: 696},
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800163 }
164
165 for i := 0; i < len(testDatabase); i++ {
Philipp Schrader7365d322022-03-06 16:40:08 -0800166 err := fixture.db.AddToMatch(testDatabase[i])
Philipp Schrader83fc2722022-03-10 21:59:20 -0800167 check(t, err, fmt.Sprint("Failed to add match", i))
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800168 }
169
170 correct := []Match{
Philipp Schrader83fc2722022-03-10 21:59:20 -0800171 Match{
172 MatchNumber: 2, Round: 1, CompLevel: "quals",
173 R1: 251, R2: 169, R3: 286, B1: 253, B2: 538, B3: 149,
174 r1ID: 1, r2ID: 2, r3ID: 3, b1ID: 4, b2ID: 5, b3ID: 6,
175 },
176 Match{
177 MatchNumber: 3, Round: 1, CompLevel: "quals",
178 R1: 147, R2: 421, R3: 538, B1: 126, B2: 448, B3: 262,
179 r1ID: 13, r2ID: 14, r3ID: 15, b1ID: 16, b2ID: 17, b3ID: 18,
180 },
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800181 }
182
Philipp Schrader7365d322022-03-06 16:40:08 -0800183 got, err := fixture.db.QueryMatches(538)
Philipp Schrader83fc2722022-03-10 21:59:20 -0800184 check(t, err, "Failed to query matches for 538")
185
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800186 if !reflect.DeepEqual(correct, got) {
187 t.Fatalf("Got %#v,\nbut expected %#v.", got, correct)
188 }
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800189}
190
191func TestQueryStatsDB(t *testing.T) {
Philipp Schrader7365d322022-03-06 16:40:08 -0800192 fixture := createDatabase(t)
193 defer fixture.TearDown()
Philipp Schrader4953cc32022-02-25 18:09:02 -0800194
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800195 testDatabase := []Stats{
Philipp Schrader83fc2722022-03-10 21:59:20 -0800196 Stats{
197 TeamNumber: 1235, MatchNumber: 94,
198 ShotsMissed: 2, UpperGoalShots: 2, LowerGoalShots: 2,
199 ShotsMissedAuto: 2, UpperGoalAuto: 2, LowerGoalAuto: 2,
200 PlayedDefense: 2, Climbing: 2},
201 Stats{
202 TeamNumber: 1234, MatchNumber: 94,
203 ShotsMissed: 4, UpperGoalShots: 4, LowerGoalShots: 4,
204 ShotsMissedAuto: 4, UpperGoalAuto: 4, LowerGoalAuto: 4,
205 PlayedDefense: 7, Climbing: 2,
206 },
207 Stats{
208 TeamNumber: 1233, MatchNumber: 94,
209 ShotsMissed: 3, UpperGoalShots: 3, LowerGoalShots: 3,
210 ShotsMissedAuto: 3, UpperGoalAuto: 3, LowerGoalAuto: 3,
211 PlayedDefense: 3, Climbing: 3,
212 },
213 Stats{
214 TeamNumber: 1232, MatchNumber: 94,
215 ShotsMissed: 5, UpperGoalShots: 5, LowerGoalShots: 5,
216 ShotsMissedAuto: 5, UpperGoalAuto: 5, LowerGoalAuto: 5,
217 PlayedDefense: 7, Climbing: 1,
218 },
219 Stats{
220 TeamNumber: 1231, MatchNumber: 94,
221 ShotsMissed: 6, UpperGoalShots: 6, LowerGoalShots: 6,
222 ShotsMissedAuto: 6, UpperGoalAuto: 6, LowerGoalAuto: 6,
223 PlayedDefense: 7, Climbing: 1,
224 },
225 Stats{
226 TeamNumber: 1239, MatchNumber: 94,
227 ShotsMissed: 7, UpperGoalShots: 7, LowerGoalShots: 7,
228 ShotsMissedAuto: 7, UpperGoalAuto: 7, LowerGoalAuto: 3,
229 PlayedDefense: 7, Climbing: 1,
230 },
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800231 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800232
Philipp Schrader7365d322022-03-06 16:40:08 -0800233 err := fixture.db.AddToMatch(Match{
Philipp Schrader83fc2722022-03-10 21:59:20 -0800234 MatchNumber: 94, Round: 1, CompLevel: "quals",
235 R1: 1235, R2: 1234, R3: 1233, B1: 1232, B2: 1231, B3: 1239})
236 check(t, err, "Failed to add match")
237
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800238 for i := 0; i < len(testDatabase); i++ {
Philipp Schrader7365d322022-03-06 16:40:08 -0800239 err = fixture.db.AddToStats(testDatabase[i])
Philipp Schrader83fc2722022-03-10 21:59:20 -0800240 check(t, err, fmt.Sprint("Failed to add stats", i))
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800241 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800242
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800243 correct := []Stats{
Philipp Schrader83fc2722022-03-10 21:59:20 -0800244 Stats{
245 TeamNumber: 1235, MatchNumber: 94,
246 ShotsMissed: 2, UpperGoalShots: 2, LowerGoalShots: 2,
247 ShotsMissedAuto: 2, UpperGoalAuto: 2, LowerGoalAuto: 2,
248 PlayedDefense: 2, Climbing: 2,
249 },
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800250 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800251
Philipp Schrader7365d322022-03-06 16:40:08 -0800252 got, err := fixture.db.QueryStats(1235)
Philipp Schrader83fc2722022-03-10 21:59:20 -0800253 check(t, err, "Failed QueryStats()")
254
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800255 if !reflect.DeepEqual(correct, got) {
256 t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
257 }
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800258}
259
260func TestReturnMatchDB(t *testing.T) {
Philipp Schrader7365d322022-03-06 16:40:08 -0800261 fixture := createDatabase(t)
262 defer fixture.TearDown()
Philipp Schrader4953cc32022-02-25 18:09:02 -0800263
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800264 correct := []Match{
Philipp Schrader83fc2722022-03-10 21:59:20 -0800265 Match{
266 MatchNumber: 2, Round: 1, CompLevel: "quals",
267 R1: 251, R2: 169, R3: 286, B1: 253, B2: 538, B3: 149,
268 r1ID: 1, r2ID: 2, r3ID: 3, b1ID: 4, b2ID: 5, b3ID: 6,
269 },
270 Match{
271 MatchNumber: 3, Round: 1, CompLevel: "quals",
272 R1: 147, R2: 421, R3: 538, B1: 126, B2: 448, B3: 262,
273 r1ID: 7, r2ID: 8, r3ID: 9, b1ID: 10, b2ID: 11, b3ID: 12,
274 },
275 Match{
276 MatchNumber: 4, Round: 1, CompLevel: "quals",
277 R1: 251, R2: 169, R3: 286, B1: 653, B2: 538, B3: 149,
278 r1ID: 13, r2ID: 14, r3ID: 15, b1ID: 16, b2ID: 17, b3ID: 18,
279 },
280 Match{
281 MatchNumber: 5, Round: 1, CompLevel: "quals",
282 R1: 198, R2: 1421, R3: 538, B1: 26, B2: 448, B3: 262,
283 r1ID: 19, r2ID: 20, r3ID: 21, b1ID: 22, b2ID: 23, b3ID: 24,
284 },
285 Match{
286 MatchNumber: 6, Round: 1, CompLevel: "quals",
287 R1: 251, R2: 188, R3: 286, B1: 555, B2: 538, B3: 149,
288 r1ID: 25, r2ID: 26, r3ID: 27, b1ID: 28, b2ID: 29, b3ID: 30,
289 },
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800290 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800291
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800292 for i := 0; i < len(correct); i++ {
Philipp Schrader7365d322022-03-06 16:40:08 -0800293 err := fixture.db.AddToMatch(correct[i])
Philipp Schrader83fc2722022-03-10 21:59:20 -0800294 check(t, err, fmt.Sprint("Failed to add match", i))
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800295 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800296
Philipp Schrader7365d322022-03-06 16:40:08 -0800297 got, err := fixture.db.ReturnMatches()
Philipp Schrader83fc2722022-03-10 21:59:20 -0800298 check(t, err, "Failed ReturnMatches()")
299
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800300 if !reflect.DeepEqual(correct, got) {
301 t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
302 }
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800303}
304
305func TestReturnStatsDB(t *testing.T) {
Philipp Schrader7365d322022-03-06 16:40:08 -0800306 fixture := createDatabase(t)
307 defer fixture.TearDown()
Philipp Schrader4953cc32022-02-25 18:09:02 -0800308
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800309 correct := []Stats{
Philipp Schrader83fc2722022-03-10 21:59:20 -0800310 Stats{
311 TeamNumber: 1235, MatchNumber: 94,
312 ShotsMissed: 2, UpperGoalShots: 2, LowerGoalShots: 2,
313 ShotsMissedAuto: 2, UpperGoalAuto: 2, LowerGoalAuto: 2,
314 PlayedDefense: 2, Climbing: 2,
315 },
316 Stats{
317 TeamNumber: 1236, MatchNumber: 94,
318 ShotsMissed: 4, UpperGoalShots: 4, LowerGoalShots: 4,
319 ShotsMissedAuto: 4, UpperGoalAuto: 4, LowerGoalAuto: 4,
320 PlayedDefense: 7, Climbing: 2,
321 },
322 Stats{
323 TeamNumber: 1237, MatchNumber: 94,
324 ShotsMissed: 3, UpperGoalShots: 3, LowerGoalShots: 3,
325 ShotsMissedAuto: 3, UpperGoalAuto: 3, LowerGoalAuto: 3,
326 PlayedDefense: 3, Climbing: 3,
327 },
328 Stats{
329 TeamNumber: 1238, MatchNumber: 94,
330 ShotsMissed: 5, UpperGoalShots: 5, LowerGoalShots: 5,
331 ShotsMissedAuto: 5, UpperGoalAuto: 5, LowerGoalAuto: 5,
332 PlayedDefense: 7, Climbing: 1,
333 },
334 Stats{
335 TeamNumber: 1239, MatchNumber: 94,
336 ShotsMissed: 6, UpperGoalShots: 6, LowerGoalShots: 6,
337 ShotsMissedAuto: 6, UpperGoalAuto: 6, LowerGoalAuto: 6,
338 PlayedDefense: 7, Climbing: 1,
339 },
340 Stats{
341 TeamNumber: 1233, MatchNumber: 94,
342 ShotsMissed: 7, UpperGoalShots: 7, LowerGoalShots: 7,
343 ShotsMissedAuto: 7, UpperGoalAuto: 7, LowerGoalAuto: 3,
344 PlayedDefense: 7, Climbing: 1,
345 },
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800346 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800347
Philipp Schrader7365d322022-03-06 16:40:08 -0800348 err := fixture.db.AddToMatch(Match{
Philipp Schrader83fc2722022-03-10 21:59:20 -0800349 MatchNumber: 94, Round: 1, CompLevel: "quals",
350 R1: 1235, R2: 1236, R3: 1237, B1: 1238, B2: 1239, B3: 1233})
351 check(t, err, "Failed to add match")
352
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800353 for i := 0; i < len(correct); i++ {
Philipp Schrader7365d322022-03-06 16:40:08 -0800354 err = fixture.db.AddToStats(correct[i])
Philipp Schrader83fc2722022-03-10 21:59:20 -0800355 check(t, err, fmt.Sprint("Failed to add stats", i))
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800356 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800357
Philipp Schrader7365d322022-03-06 16:40:08 -0800358 got, err := fixture.db.ReturnStats()
Philipp Schrader83fc2722022-03-10 21:59:20 -0800359 check(t, err, "Failed ReturnStats()")
360
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800361 if !reflect.DeepEqual(correct, got) {
362 t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
363 }
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800364}
Alex Perry871eab92022-03-12 17:43:52 -0800365
366func TestNotes(t *testing.T) {
Philipp Schrader7365d322022-03-06 16:40:08 -0800367 fixture := createDatabase(t)
368 defer fixture.TearDown()
Alex Perry871eab92022-03-12 17:43:52 -0800369
370 expected := NotesData{
371 TeamNumber: 1234,
372 Notes: []string{"Note 1", "Note 3"},
373 }
374
Philipp Schrader7365d322022-03-06 16:40:08 -0800375 err := fixture.db.AddNotes(NotesData{1234, []string{"Note 1"}})
Alex Perry871eab92022-03-12 17:43:52 -0800376 check(t, err, "Failed to add Note")
Philipp Schrader7365d322022-03-06 16:40:08 -0800377 err = fixture.db.AddNotes(NotesData{1235, []string{"Note 2"}})
Alex Perry871eab92022-03-12 17:43:52 -0800378 check(t, err, "Failed to add Note")
Philipp Schrader7365d322022-03-06 16:40:08 -0800379 err = fixture.db.AddNotes(NotesData{1234, []string{"Note 3"}})
Alex Perry871eab92022-03-12 17:43:52 -0800380 check(t, err, "Failed to add Note")
381
Philipp Schrader7365d322022-03-06 16:40:08 -0800382 actual, err := fixture.db.QueryNotes(1234)
Alex Perry871eab92022-03-12 17:43:52 -0800383 check(t, err, "Failed to get Notes")
384
385 if !reflect.DeepEqual(expected, actual) {
386 t.Errorf("Got %#v,\nbut expected %#v.", actual, expected)
387 }
388}