blob: 13a43f8a5cd70f2c55cf826c049bb8277f72051a [file] [log] [blame]
Sabina Leaverc5fd2772022-01-29 17:00:23 -08001package db
2
3import (
Philipp Schrader83fc2722022-03-10 21:59:20 -08004 "fmt"
Philipp Schrader4953cc32022-02-25 18:09:02 -08005 "os"
6 "path/filepath"
Sabina Leaverc5fd2772022-01-29 17:00:23 -08007 "reflect"
8 "testing"
9)
10
Philipp Schrader83fc2722022-03-10 21:59:20 -080011// Shortcut for error checking. If the specified error is non-nil, print the
12// error message and exit the test.
13func check(t *testing.T, err error, message string) {
14 if err != nil {
15 t.Fatal(message, ":", err)
16 }
17}
18
Philipp Schrader4953cc32022-02-25 18:09:02 -080019// Creates a database in TEST_TMPDIR so that we don't accidentally write it
20// into the runfiles directory.
21func createDatabase(t *testing.T) *Database {
22 // Get the path to our temporary writable directory.
23 testTmpdir := os.Getenv("TEST_TMPDIR")
24 db, err := NewDatabase(filepath.Join(testTmpdir, "scouting.db"))
Philipp Schrader83fc2722022-03-10 21:59:20 -080025 check(t, err, "Failed to create new database")
Philipp Schrader4953cc32022-02-25 18:09:02 -080026 return db
27}
28
29func TestAddToMatchDB(t *testing.T) {
30 db := createDatabase(t)
31 defer db.Delete()
32
Philipp Schrader83fc2722022-03-10 21:59:20 -080033 correct := []Match{
34 Match{
35 MatchNumber: 7,
36 Round: 1,
37 CompLevel: "quals",
38 R1: 9999, R2: 1000, R3: 777, B1: 0000, B2: 4321, B3: 1234,
39 r1ID: 1, r2ID: 2, r3ID: 3, b1ID: 4, b2ID: 5, b3ID: 6,
40 },
Sabina Leaverc5fd2772022-01-29 17:00:23 -080041 }
Philipp Schrader83fc2722022-03-10 21:59:20 -080042
43 err := db.AddToMatch(correct[0])
44 check(t, err, "Failed to add match data")
45
46 got, err := db.ReturnMatches()
47 check(t, err, "Failed ReturnMatches()")
48
Sabina Leaverc5fd2772022-01-29 17:00:23 -080049 if !reflect.DeepEqual(correct, got) {
50 t.Fatalf("Got %#v,\nbut expected %#v.", got, correct)
51 }
Sabina Leaverc5fd2772022-01-29 17:00:23 -080052}
53
54func TestAddToStatsDB(t *testing.T) {
Philipp Schrader4953cc32022-02-25 18:09:02 -080055 db := createDatabase(t)
56 defer db.Delete()
57
Sabina Leaverc5fd2772022-01-29 17:00:23 -080058 correct := []Stats{
Philipp Schrader83fc2722022-03-10 21:59:20 -080059 Stats{
60 TeamNumber: 1236, MatchNumber: 7,
61 ShotsMissed: 9, UpperGoalShots: 5, LowerGoalShots: 4,
62 ShotsMissedAuto: 3, UpperGoalAuto: 2, LowerGoalAuto: 1,
63 PlayedDefense: 2, Climbing: 3,
64 },
65 Stats{
66 TeamNumber: 1001, MatchNumber: 7,
67 ShotsMissed: 6, UpperGoalShots: 9, LowerGoalShots: 9,
68 ShotsMissedAuto: 0, UpperGoalAuto: 0, LowerGoalAuto: 0,
69 PlayedDefense: 0, Climbing: 0,
70 },
71 Stats{
72 TeamNumber: 777, MatchNumber: 7,
73 ShotsMissed: 5, UpperGoalShots: 7, LowerGoalShots: 12,
74 ShotsMissedAuto: 0, UpperGoalAuto: 4, LowerGoalAuto: 0,
75 PlayedDefense: 0, Climbing: 0,
76 },
77 Stats{
78 TeamNumber: 1000, MatchNumber: 7,
79 ShotsMissed: 12, UpperGoalShots: 6, LowerGoalShots: 10,
80 ShotsMissedAuto: 0, UpperGoalAuto: 7, LowerGoalAuto: 0,
81 PlayedDefense: 0, Climbing: 0,
82 },
83 Stats{
84 TeamNumber: 4321, MatchNumber: 7,
85 ShotsMissed: 14, UpperGoalShots: 12, LowerGoalShots: 3,
86 ShotsMissedAuto: 0, UpperGoalAuto: 7, LowerGoalAuto: 0,
87 PlayedDefense: 0, Climbing: 0,
88 },
89 Stats{
90 TeamNumber: 1234, MatchNumber: 7,
91 ShotsMissed: 3, UpperGoalShots: 4, LowerGoalShots: 0,
92 ShotsMissedAuto: 0, UpperGoalAuto: 9, LowerGoalAuto: 0,
93 PlayedDefense: 0, Climbing: 0,
94 },
Sabina Leaverc5fd2772022-01-29 17:00:23 -080095 }
Philipp Schrader83fc2722022-03-10 21:59:20 -080096
97 err := db.AddToMatch(Match{
98 MatchNumber: 7, Round: 1, CompLevel: "quals",
99 R1: 1236, R2: 1001, R3: 777, B1: 1000, B2: 4321, B3: 1234,
100 r1ID: 1, r2ID: 2, r3ID: 3, b1ID: 4, b2ID: 5, b3ID: 6})
101 check(t, err, "Failed to add match")
102
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800103 for i := 0; i < len(correct); i++ {
Philipp Schrader83fc2722022-03-10 21:59:20 -0800104 err = db.AddToStats(correct[i])
105 check(t, err, "Failed to add stats to DB")
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800106 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800107
108 got, err := db.ReturnStats()
109 check(t, err, "Failed ReturnStats()")
110
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800111 if !reflect.DeepEqual(correct, got) {
112 t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
113 }
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800114}
115
116func TestQueryMatchDB(t *testing.T) {
Philipp Schrader4953cc32022-02-25 18:09:02 -0800117 db := createDatabase(t)
118 defer db.Delete()
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800119
120 testDatabase := []Match{
Philipp Schrader1e6c0a92022-02-27 23:30:57 -0800121 Match{MatchNumber: 2, Round: 1, CompLevel: "quals", R1: 251, R2: 169, R3: 286, B1: 253, B2: 538, B3: 149},
122 Match{MatchNumber: 4, Round: 1, CompLevel: "quals", R1: 198, R2: 135, R3: 777, B1: 999, B2: 434, B3: 698},
123 Match{MatchNumber: 3, Round: 1, CompLevel: "quals", R1: 147, R2: 421, R3: 538, B1: 126, B2: 448, B3: 262},
124 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 -0800125 }
126
127 for i := 0; i < len(testDatabase); i++ {
Philipp Schrader83fc2722022-03-10 21:59:20 -0800128 err := db.AddToMatch(testDatabase[i])
129 check(t, err, fmt.Sprint("Failed to add match", i))
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800130 }
131
132 correct := []Match{
Philipp Schrader83fc2722022-03-10 21:59:20 -0800133 Match{
134 MatchNumber: 2, Round: 1, CompLevel: "quals",
135 R1: 251, R2: 169, R3: 286, B1: 253, B2: 538, B3: 149,
136 r1ID: 1, r2ID: 2, r3ID: 3, b1ID: 4, b2ID: 5, b3ID: 6,
137 },
138 Match{
139 MatchNumber: 3, Round: 1, CompLevel: "quals",
140 R1: 147, R2: 421, R3: 538, B1: 126, B2: 448, B3: 262,
141 r1ID: 13, r2ID: 14, r3ID: 15, b1ID: 16, b2ID: 17, b3ID: 18,
142 },
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800143 }
144
Philipp Schrader83fc2722022-03-10 21:59:20 -0800145 got, err := db.QueryMatches(538)
146 check(t, err, "Failed to query matches for 538")
147
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800148 if !reflect.DeepEqual(correct, got) {
149 t.Fatalf("Got %#v,\nbut expected %#v.", got, correct)
150 }
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800151}
152
153func TestQueryStatsDB(t *testing.T) {
Philipp Schrader4953cc32022-02-25 18:09:02 -0800154 db := createDatabase(t)
155 defer db.Delete()
156
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800157 testDatabase := []Stats{
Philipp Schrader83fc2722022-03-10 21:59:20 -0800158 Stats{
159 TeamNumber: 1235, MatchNumber: 94,
160 ShotsMissed: 2, UpperGoalShots: 2, LowerGoalShots: 2,
161 ShotsMissedAuto: 2, UpperGoalAuto: 2, LowerGoalAuto: 2,
162 PlayedDefense: 2, Climbing: 2},
163 Stats{
164 TeamNumber: 1234, MatchNumber: 94,
165 ShotsMissed: 4, UpperGoalShots: 4, LowerGoalShots: 4,
166 ShotsMissedAuto: 4, UpperGoalAuto: 4, LowerGoalAuto: 4,
167 PlayedDefense: 7, Climbing: 2,
168 },
169 Stats{
170 TeamNumber: 1233, MatchNumber: 94,
171 ShotsMissed: 3, UpperGoalShots: 3, LowerGoalShots: 3,
172 ShotsMissedAuto: 3, UpperGoalAuto: 3, LowerGoalAuto: 3,
173 PlayedDefense: 3, Climbing: 3,
174 },
175 Stats{
176 TeamNumber: 1232, MatchNumber: 94,
177 ShotsMissed: 5, UpperGoalShots: 5, LowerGoalShots: 5,
178 ShotsMissedAuto: 5, UpperGoalAuto: 5, LowerGoalAuto: 5,
179 PlayedDefense: 7, Climbing: 1,
180 },
181 Stats{
182 TeamNumber: 1231, MatchNumber: 94,
183 ShotsMissed: 6, UpperGoalShots: 6, LowerGoalShots: 6,
184 ShotsMissedAuto: 6, UpperGoalAuto: 6, LowerGoalAuto: 6,
185 PlayedDefense: 7, Climbing: 1,
186 },
187 Stats{
188 TeamNumber: 1239, MatchNumber: 94,
189 ShotsMissed: 7, UpperGoalShots: 7, LowerGoalShots: 7,
190 ShotsMissedAuto: 7, UpperGoalAuto: 7, LowerGoalAuto: 3,
191 PlayedDefense: 7, Climbing: 1,
192 },
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800193 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800194
195 err := db.AddToMatch(Match{
196 MatchNumber: 94, Round: 1, CompLevel: "quals",
197 R1: 1235, R2: 1234, R3: 1233, B1: 1232, B2: 1231, B3: 1239})
198 check(t, err, "Failed to add match")
199
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800200 for i := 0; i < len(testDatabase); i++ {
Philipp Schrader83fc2722022-03-10 21:59:20 -0800201 err = db.AddToStats(testDatabase[i])
202 check(t, err, fmt.Sprint("Failed to add stats", i))
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800203 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800204
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800205 correct := []Stats{
Philipp Schrader83fc2722022-03-10 21:59:20 -0800206 Stats{
207 TeamNumber: 1235, MatchNumber: 94,
208 ShotsMissed: 2, UpperGoalShots: 2, LowerGoalShots: 2,
209 ShotsMissedAuto: 2, UpperGoalAuto: 2, LowerGoalAuto: 2,
210 PlayedDefense: 2, Climbing: 2,
211 },
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800212 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800213
214 got, err := db.QueryStats(1235)
215 check(t, err, "Failed QueryStats()")
216
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800217 if !reflect.DeepEqual(correct, got) {
218 t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
219 }
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800220}
221
222func TestReturnMatchDB(t *testing.T) {
Philipp Schrader4953cc32022-02-25 18:09:02 -0800223 db := createDatabase(t)
224 defer db.Delete()
225
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800226 correct := []Match{
Philipp Schrader83fc2722022-03-10 21:59:20 -0800227 Match{
228 MatchNumber: 2, Round: 1, CompLevel: "quals",
229 R1: 251, R2: 169, R3: 286, B1: 253, B2: 538, B3: 149,
230 r1ID: 1, r2ID: 2, r3ID: 3, b1ID: 4, b2ID: 5, b3ID: 6,
231 },
232 Match{
233 MatchNumber: 3, Round: 1, CompLevel: "quals",
234 R1: 147, R2: 421, R3: 538, B1: 126, B2: 448, B3: 262,
235 r1ID: 7, r2ID: 8, r3ID: 9, b1ID: 10, b2ID: 11, b3ID: 12,
236 },
237 Match{
238 MatchNumber: 4, Round: 1, CompLevel: "quals",
239 R1: 251, R2: 169, R3: 286, B1: 653, B2: 538, B3: 149,
240 r1ID: 13, r2ID: 14, r3ID: 15, b1ID: 16, b2ID: 17, b3ID: 18,
241 },
242 Match{
243 MatchNumber: 5, Round: 1, CompLevel: "quals",
244 R1: 198, R2: 1421, R3: 538, B1: 26, B2: 448, B3: 262,
245 r1ID: 19, r2ID: 20, r3ID: 21, b1ID: 22, b2ID: 23, b3ID: 24,
246 },
247 Match{
248 MatchNumber: 6, Round: 1, CompLevel: "quals",
249 R1: 251, R2: 188, R3: 286, B1: 555, B2: 538, B3: 149,
250 r1ID: 25, r2ID: 26, r3ID: 27, b1ID: 28, b2ID: 29, b3ID: 30,
251 },
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800252 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800253
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800254 for i := 0; i < len(correct); i++ {
Philipp Schrader83fc2722022-03-10 21:59:20 -0800255 err := db.AddToMatch(correct[i])
256 check(t, err, fmt.Sprint("Failed to add match", i))
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800257 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800258
259 got, err := db.ReturnMatches()
260 check(t, err, "Failed ReturnMatches()")
261
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800262 if !reflect.DeepEqual(correct, got) {
263 t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
264 }
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800265}
266
267func TestReturnStatsDB(t *testing.T) {
Philipp Schrader4953cc32022-02-25 18:09:02 -0800268 db := createDatabase(t)
269 defer db.Delete()
270
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800271 correct := []Stats{
Philipp Schrader83fc2722022-03-10 21:59:20 -0800272 Stats{
273 TeamNumber: 1235, MatchNumber: 94,
274 ShotsMissed: 2, UpperGoalShots: 2, LowerGoalShots: 2,
275 ShotsMissedAuto: 2, UpperGoalAuto: 2, LowerGoalAuto: 2,
276 PlayedDefense: 2, Climbing: 2,
277 },
278 Stats{
279 TeamNumber: 1236, MatchNumber: 94,
280 ShotsMissed: 4, UpperGoalShots: 4, LowerGoalShots: 4,
281 ShotsMissedAuto: 4, UpperGoalAuto: 4, LowerGoalAuto: 4,
282 PlayedDefense: 7, Climbing: 2,
283 },
284 Stats{
285 TeamNumber: 1237, MatchNumber: 94,
286 ShotsMissed: 3, UpperGoalShots: 3, LowerGoalShots: 3,
287 ShotsMissedAuto: 3, UpperGoalAuto: 3, LowerGoalAuto: 3,
288 PlayedDefense: 3, Climbing: 3,
289 },
290 Stats{
291 TeamNumber: 1238, MatchNumber: 94,
292 ShotsMissed: 5, UpperGoalShots: 5, LowerGoalShots: 5,
293 ShotsMissedAuto: 5, UpperGoalAuto: 5, LowerGoalAuto: 5,
294 PlayedDefense: 7, Climbing: 1,
295 },
296 Stats{
297 TeamNumber: 1239, MatchNumber: 94,
298 ShotsMissed: 6, UpperGoalShots: 6, LowerGoalShots: 6,
299 ShotsMissedAuto: 6, UpperGoalAuto: 6, LowerGoalAuto: 6,
300 PlayedDefense: 7, Climbing: 1,
301 },
302 Stats{
303 TeamNumber: 1233, MatchNumber: 94,
304 ShotsMissed: 7, UpperGoalShots: 7, LowerGoalShots: 7,
305 ShotsMissedAuto: 7, UpperGoalAuto: 7, LowerGoalAuto: 3,
306 PlayedDefense: 7, Climbing: 1,
307 },
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800308 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800309
310 err := db.AddToMatch(Match{
311 MatchNumber: 94, Round: 1, CompLevel: "quals",
312 R1: 1235, R2: 1236, R3: 1237, B1: 1238, B2: 1239, B3: 1233})
313 check(t, err, "Failed to add match")
314
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800315 for i := 0; i < len(correct); i++ {
Philipp Schrader83fc2722022-03-10 21:59:20 -0800316 err = db.AddToStats(correct[i])
317 check(t, err, fmt.Sprint("Failed to add stats", i))
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800318 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800319
320 got, err := db.ReturnStats()
321 check(t, err, "Failed ReturnStats()")
322
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800323 if !reflect.DeepEqual(correct, got) {
324 t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
325 }
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800326}
Alex Perry871eab92022-03-12 17:43:52 -0800327
328func TestNotes(t *testing.T) {
329 db := createDatabase(t)
330 defer db.Delete()
331
332 expected := NotesData{
333 TeamNumber: 1234,
334 Notes: []string{"Note 1", "Note 3"},
335 }
336
337 err := db.AddNotes(NotesData{1234, []string{"Note 1"}})
338 check(t, err, "Failed to add Note")
339 err = db.AddNotes(NotesData{1235, []string{"Note 2"}})
340 check(t, err, "Failed to add Note")
341 err = db.AddNotes(NotesData{1234, []string{"Note 3"}})
342 check(t, err, "Failed to add Note")
343
344 actual, err := db.QueryNotes(1234)
345 check(t, err, "Failed to get Notes")
346
347 if !reflect.DeepEqual(expected, actual) {
348 t.Errorf("Got %#v,\nbut expected %#v.", actual, expected)
349 }
350}