blob: 2f9196e7aa9603c677b145c0d0ceca0b5621a27f [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"
Philipp Schradereecb8962022-06-01 21:02:42 -070011
12 "github.com/davecgh/go-spew/spew"
Sabina Leaverc5fd2772022-01-29 17:00:23 -080013)
14
Philipp Schrader83fc2722022-03-10 21:59:20 -080015// Shortcut for error checking. If the specified error is non-nil, print the
16// error message and exit the test.
17func check(t *testing.T, err error, message string) {
18 if err != nil {
19 t.Fatal(message, ":", err)
20 }
21}
22
Philipp Schrader7365d322022-03-06 16:40:08 -080023type dbFixture struct {
24 db *Database
25 server *exec.Cmd
26}
27
28func (fixture dbFixture) TearDown() {
29 fixture.db.Delete()
Philipp Schrader7365d322022-03-06 16:40:08 -080030 log.Println("Shutting down testdb")
31 fixture.server.Process.Signal(os.Interrupt)
32 fixture.server.Process.Wait()
33 log.Println("Successfully shut down testdb")
34}
35
36func createDatabase(t *testing.T) dbFixture {
37 var fixture dbFixture
38
39 log.Println("Starting up postgres.")
40 fixture.server = exec.Command("testdb_server/testdb_server_/testdb_server")
41 fixture.server.Stdout = os.Stdout
42 fixture.server.Stderr = os.Stderr
43 err := fixture.server.Start()
44 check(t, err, "Failed to run postgres")
45
46 // Wait until the server is ready. We cannot rely on the TCP socket
47 // alone because postgres creates the socket before it's actually ready
48 // to service requests.
49 for {
50 fixture.db, err = NewDatabase("test", "password", 5432)
51 if err == nil {
52 break
53 }
54 time.Sleep(50 * time.Millisecond)
55 }
56 log.Println("Connected to postgres.")
57
Philipp Schradereecb8962022-06-01 21:02:42 -070058 fixture.db.SetDebugLogLevel()
59
Philipp Schrader7365d322022-03-06 16:40:08 -080060 return fixture
Philipp Schrader4953cc32022-02-25 18:09:02 -080061}
62
Philipp Schradereecb8962022-06-01 21:02:42 -070063func checkDeepEqual(t *testing.T, expected interface{}, actual interface{}) {
64 if !reflect.DeepEqual(expected, actual) {
65 t.Fatalf(spew.Sprintf("Got %#v,\nbut expected %#v.", actual, expected))
66 }
67}
68
Philipp Schrader4953cc32022-02-25 18:09:02 -080069func TestAddToMatchDB(t *testing.T) {
Philipp Schrader7365d322022-03-06 16:40:08 -080070 fixture := createDatabase(t)
71 defer fixture.TearDown()
Philipp Schrader4953cc32022-02-25 18:09:02 -080072
Emily Markovabf24c9e2023-02-08 20:31:11 -080073 correct := []TeamMatch{
74 TeamMatch{
75 MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -070076 Alliance: "R", AlliancePosition: 1, TeamNumber: "9999",
Emily Markovabf24c9e2023-02-08 20:31:11 -080077 },
78 TeamMatch{
79 MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -070080 Alliance: "R", AlliancePosition: 2, TeamNumber: "1000",
Emily Markovabf24c9e2023-02-08 20:31:11 -080081 },
82 TeamMatch{
83 MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -070084 Alliance: "R", AlliancePosition: 3, TeamNumber: "777",
Emily Markovabf24c9e2023-02-08 20:31:11 -080085 },
86 TeamMatch{
87 MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -070088 Alliance: "B", AlliancePosition: 1, TeamNumber: "0000",
Emily Markovabf24c9e2023-02-08 20:31:11 -080089 },
90 TeamMatch{
91 MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -070092 Alliance: "B", AlliancePosition: 2, TeamNumber: "4321",
Emily Markovabf24c9e2023-02-08 20:31:11 -080093 },
94 TeamMatch{
95 MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -070096 Alliance: "B", AlliancePosition: 3, TeamNumber: "1234",
Philipp Schrader83fc2722022-03-10 21:59:20 -080097 },
Sabina Leaverc5fd2772022-01-29 17:00:23 -080098 }
Philipp Schrader83fc2722022-03-10 21:59:20 -080099
Emily Markovabf24c9e2023-02-08 20:31:11 -0800100 for _, match := range correct {
101 err := fixture.db.AddToMatch(match)
102 check(t, err, "Failed to add match data")
103 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800104
Philipp Schrader7365d322022-03-06 16:40:08 -0800105 got, err := fixture.db.ReturnMatches()
Philipp Schrader83fc2722022-03-10 21:59:20 -0800106 check(t, err, "Failed ReturnMatches()")
107
Philipp Schradereecb8962022-06-01 21:02:42 -0700108 checkDeepEqual(t, correct, got)
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800109}
110
Yash Chainanibcd1bb32022-04-02 17:10:24 -0700111func TestAddOrUpdateRankingsDB(t *testing.T) {
112 fixture := createDatabase(t)
113 defer fixture.TearDown()
114
115 correct := []Ranking{
116 Ranking{
117 TeamNumber: 123,
118 Losses: 1, Wins: 7, Ties: 0,
119 Rank: 2, Dq: 0,
120 },
121 Ranking{
122 TeamNumber: 125,
123 Losses: 2, Wins: 4, Ties: 0,
124 Rank: 2, Dq: 0,
125 },
126 }
127
128 for i := 0; i < len(correct); i++ {
129 err := fixture.db.AddOrUpdateRankings(correct[i])
130 check(t, err, "Failed to add ranking data")
131 }
132
133 got, err := fixture.db.ReturnRankings()
134 check(t, err, "Failed ReturnRankings()")
135
136 if !reflect.DeepEqual(correct, got) {
137 t.Fatalf("Got %#v,\nbut expected %#v.", got, correct)
138 }
139}
140
Emily Markova290147d2023-03-03 22:40:06 -0800141func TestAddToStats2023DB(t *testing.T) {
142 fixture := createDatabase(t)
143 defer fixture.TearDown()
144
145 correct := []Stats2023{
146 Stats2023{
147 TeamNumber: "6344", MatchNumber: 3, SetNumber: 1,
148 CompLevel: "quals", StartingQuadrant: 1, LowCubesAuto: 0,
149 MiddleCubesAuto: 1, HighCubesAuto: 0, CubesDroppedAuto: 1,
150 LowConesAuto: 1, MiddleConesAuto: 0, HighConesAuto: 2,
151 ConesDroppedAuto: 0, LowCubes: 1, MiddleCubes: 2,
152 HighCubes: 1, CubesDropped: 0, LowCones: 0,
153 MiddleCones: 2, HighCones: 1, ConesDropped: 1,
Emily Markova46a69bf2023-03-22 20:45:52 -0700154 AvgCycle: 0, DockedAuto: true, EngagedAuto: false,
155 Docked: false, Engaged: false, CollectedBy: "emma",
Emily Markova290147d2023-03-03 22:40:06 -0800156 },
157 Stats2023{
158 TeamNumber: "7454", MatchNumber: 3, SetNumber: 1,
159 CompLevel: "quals", StartingQuadrant: 2, LowCubesAuto: 1,
160 MiddleCubesAuto: 2, HighCubesAuto: 2, CubesDroppedAuto: 0,
161 LowConesAuto: 2, MiddleConesAuto: 0, HighConesAuto: 0,
162 ConesDroppedAuto: 1, LowCubes: 1, MiddleCubes: 0,
163 HighCubes: 0, CubesDropped: 1, LowCones: 0,
164 MiddleCones: 0, HighCones: 1, ConesDropped: 0,
Emily Markova46a69bf2023-03-22 20:45:52 -0700165 AvgCycle: 0, DockedAuto: false, EngagedAuto: false,
166 Docked: true, Engaged: true, CollectedBy: "tyler",
Emily Markova290147d2023-03-03 22:40:06 -0800167 },
168 Stats2023{
169 TeamNumber: "4354", MatchNumber: 3, SetNumber: 1,
170 CompLevel: "quals", StartingQuadrant: 3, LowCubesAuto: 0,
171 MiddleCubesAuto: 1, HighCubesAuto: 1, CubesDroppedAuto: 0,
172 LowConesAuto: 0, MiddleConesAuto: 2, HighConesAuto: 1,
173 ConesDroppedAuto: 1, LowCubes: 0, MiddleCubes: 0,
174 HighCubes: 2, CubesDropped: 1, LowCones: 1,
175 MiddleCones: 1, HighCones: 0, ConesDropped: 1,
Emily Markova46a69bf2023-03-22 20:45:52 -0700176 AvgCycle: 0, DockedAuto: false, EngagedAuto: false,
177 Docked: false, Engaged: false, CollectedBy: "isaac",
Emily Markova290147d2023-03-03 22:40:06 -0800178 },
179 Stats2023{
180 TeamNumber: "6533", MatchNumber: 3, SetNumber: 1,
181 CompLevel: "quals", StartingQuadrant: 1, LowCubesAuto: 0,
182 MiddleCubesAuto: 2, HighCubesAuto: 1, CubesDroppedAuto: 1,
183 LowConesAuto: 1, MiddleConesAuto: 0, HighConesAuto: 0,
184 ConesDroppedAuto: 0, LowCubes: 0, MiddleCubes: 1,
185 HighCubes: 2, CubesDropped: 1, LowCones: 0,
186 MiddleCones: 1, HighCones: 0, ConesDropped: 0,
Emily Markova46a69bf2023-03-22 20:45:52 -0700187 AvgCycle: 0, DockedAuto: true, EngagedAuto: true,
188 Docked: false, Engaged: false, CollectedBy: "will",
Emily Markova290147d2023-03-03 22:40:06 -0800189 },
190 Stats2023{
191 TeamNumber: "8354", MatchNumber: 3, SetNumber: 1,
192 CompLevel: "quals", StartingQuadrant: 2, LowCubesAuto: 1,
193 MiddleCubesAuto: 1, HighCubesAuto: 2, CubesDroppedAuto: 0,
194 LowConesAuto: 0, MiddleConesAuto: 1, HighConesAuto: 1,
195 ConesDroppedAuto: 1, LowCubes: 1, MiddleCubes: 0,
196 HighCubes: 0, CubesDropped: 2, LowCones: 1,
197 MiddleCones: 1, HighCones: 0, ConesDropped: 1,
Emily Markova46a69bf2023-03-22 20:45:52 -0700198 AvgCycle: 0, DockedAuto: true, EngagedAuto: false,
199 Docked: true, Engaged: false, CollectedBy: "unkown",
Emily Markova290147d2023-03-03 22:40:06 -0800200 },
201 }
202
203 matches := []TeamMatch{
204 TeamMatch{MatchNumber: 3, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700205 Alliance: "R", AlliancePosition: 1, TeamNumber: "6344"},
Emily Markova290147d2023-03-03 22:40:06 -0800206 TeamMatch{MatchNumber: 3, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700207 Alliance: "R", AlliancePosition: 2, TeamNumber: "7454"},
Emily Markova290147d2023-03-03 22:40:06 -0800208 TeamMatch{MatchNumber: 3, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700209 Alliance: "R", AlliancePosition: 3, TeamNumber: "4354"},
Emily Markova290147d2023-03-03 22:40:06 -0800210 TeamMatch{MatchNumber: 3, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700211 Alliance: "B", AlliancePosition: 1, TeamNumber: "6533"},
Emily Markova290147d2023-03-03 22:40:06 -0800212 TeamMatch{MatchNumber: 3, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700213 Alliance: "B", AlliancePosition: 2, TeamNumber: "8354"},
Emily Markova290147d2023-03-03 22:40:06 -0800214 }
215
216 for _, match := range matches {
217 err := fixture.db.AddToMatch(match)
218 check(t, err, "Failed to add match")
219 }
220
221 for i := 0; i < len(correct); i++ {
222 err := fixture.db.AddToStats2023(correct[i])
223 check(t, err, "Failed to add 2023stats to DB")
224 }
225
226 got, err := fixture.db.ReturnStats2023()
227 check(t, err, "Failed ReturnStats2023()")
228
229 if !reflect.DeepEqual(correct, got) {
230 t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
231 }
232}
233
Philipp Schrader78dc96b2023-03-11 15:23:44 -0800234func TestQueryingStats2023ByTeam(t *testing.T) {
235 fixture := createDatabase(t)
236 defer fixture.TearDown()
237
238 stats := []Stats2023{
239 Stats2023{
240 TeamNumber: "6344", MatchNumber: 3, SetNumber: 1,
241 CompLevel: "qm", StartingQuadrant: 1, LowCubesAuto: 0,
242 MiddleCubesAuto: 1, HighCubesAuto: 0, CubesDroppedAuto: 1,
243 LowConesAuto: 1, MiddleConesAuto: 0, HighConesAuto: 2,
244 ConesDroppedAuto: 0, LowCubes: 1, MiddleCubes: 2,
245 HighCubes: 1, CubesDropped: 0, LowCones: 0,
246 MiddleCones: 2, HighCones: 1, ConesDropped: 1,
Emily Markova46a69bf2023-03-22 20:45:52 -0700247 AvgCycle: 0, DockedAuto: true, EngagedAuto: false,
248 Docked: false, Engaged: false, CollectedBy: "emma",
Philipp Schrader78dc96b2023-03-11 15:23:44 -0800249 },
250 Stats2023{
251 TeamNumber: "7454", MatchNumber: 4, SetNumber: 1,
252 CompLevel: "qm", StartingQuadrant: 2, LowCubesAuto: 1,
253 MiddleCubesAuto: 2, HighCubesAuto: 2, CubesDroppedAuto: 0,
254 LowConesAuto: 2, MiddleConesAuto: 0, HighConesAuto: 0,
255 ConesDroppedAuto: 1, LowCubes: 1, MiddleCubes: 0,
256 HighCubes: 0, CubesDropped: 1, LowCones: 0,
257 MiddleCones: 0, HighCones: 1, ConesDropped: 0,
Emily Markova46a69bf2023-03-22 20:45:52 -0700258 AvgCycle: 0, DockedAuto: true, EngagedAuto: true,
259 Docked: false, Engaged: false, CollectedBy: "tyler",
Philipp Schrader78dc96b2023-03-11 15:23:44 -0800260 },
261 Stats2023{
262 TeamNumber: "6344", MatchNumber: 5, SetNumber: 1,
263 CompLevel: "qm", StartingQuadrant: 1, LowCubesAuto: 0,
264 MiddleCubesAuto: 1, HighCubesAuto: 0, CubesDroppedAuto: 1,
265 LowConesAuto: 1, MiddleConesAuto: 0, HighConesAuto: 2,
266 ConesDroppedAuto: 0, LowCubes: 1, MiddleCubes: 2,
267 HighCubes: 1, CubesDropped: 0, LowCones: 0,
268 MiddleCones: 2, HighCones: 1, ConesDropped: 1,
Emily Markova46a69bf2023-03-22 20:45:52 -0700269 AvgCycle: 0, DockedAuto: true, EngagedAuto: false,
270 Docked: true, Engaged: false, CollectedBy: "emma",
Philipp Schrader78dc96b2023-03-11 15:23:44 -0800271 },
272 }
273
274 matches := []TeamMatch{
275 TeamMatch{MatchNumber: 3, SetNumber: 1, CompLevel: "qm",
Emily Markovab8551572023-03-22 19:49:39 -0700276 Alliance: "R", AlliancePosition: 1, TeamNumber: "6344"},
Philipp Schrader78dc96b2023-03-11 15:23:44 -0800277 TeamMatch{MatchNumber: 4, SetNumber: 1, CompLevel: "qm",
Emily Markovab8551572023-03-22 19:49:39 -0700278 Alliance: "R", AlliancePosition: 1, TeamNumber: "7454"},
Philipp Schrader78dc96b2023-03-11 15:23:44 -0800279 TeamMatch{MatchNumber: 5, SetNumber: 1, CompLevel: "qm",
Emily Markovab8551572023-03-22 19:49:39 -0700280 Alliance: "R", AlliancePosition: 1, TeamNumber: "6344"},
Philipp Schrader78dc96b2023-03-11 15:23:44 -0800281 }
282
283 for _, match := range matches {
284 err := fixture.db.AddToMatch(match)
285 check(t, err, "Failed to add match")
286 }
287
288 for i := range stats {
289 err := fixture.db.AddToStats2023(stats[i])
290 check(t, err, "Failed to add 2023stats to DB")
291 }
292
293 // Validate that requesting status for a single team gets us the
294 // expected data.
295 statsFor6344, err := fixture.db.ReturnStats2023ForTeam("6344", 3, 1, "qm")
296 check(t, err, "Failed ReturnStats2023()")
297
298 if !reflect.DeepEqual([]Stats2023{stats[0]}, statsFor6344) {
299 t.Errorf("Got %#v,\nbut expected %#v.", statsFor6344, stats[0])
300 }
301
302 // Validate that requesting team data for a non-existent match returns
303 // nothing.
304 statsForMissing, err := fixture.db.ReturnStats2023ForTeam("6344", 9, 1, "qm")
305 check(t, err, "Failed ReturnStats2023()")
306
307 if !reflect.DeepEqual([]Stats2023{}, statsForMissing) {
308 t.Errorf("Got %#v,\nbut expected %#v.", statsForMissing, []Stats2023{})
309 }
310}
311
Emily Markova6b551e02023-02-18 17:37:40 -0800312func TestDeleteFromStats(t *testing.T) {
313 fixture := createDatabase(t)
314 defer fixture.TearDown()
315
316 startingStats := []Stats2023{
317 Stats2023{
318 TeamNumber: "1111", MatchNumber: 5, SetNumber: 1,
319 CompLevel: "quals", StartingQuadrant: 2, LowCubesAuto: 2,
320 MiddleCubesAuto: 0, HighCubesAuto: 1, CubesDroppedAuto: 1,
321 LowConesAuto: 0, MiddleConesAuto: 2, HighConesAuto: 0,
322 ConesDroppedAuto: 1, LowCubes: 0, MiddleCubes: 1,
323 HighCubes: 2, CubesDropped: 1, LowCones: 1,
324 MiddleCones: 0, HighCones: 1, ConesDropped: 2,
Emily Markova46a69bf2023-03-22 20:45:52 -0700325 AvgCycle: 58, DockedAuto: false, EngagedAuto: false,
326 Docked: true, Engaged: true, CollectedBy: "unknown",
Emily Markova6b551e02023-02-18 17:37:40 -0800327 },
328 Stats2023{
329 TeamNumber: "2314", MatchNumber: 5, SetNumber: 1,
330 CompLevel: "quals", StartingQuadrant: 3, LowCubesAuto: 1,
331 MiddleCubesAuto: 0, HighCubesAuto: 1, CubesDroppedAuto: 1,
332 LowConesAuto: 0, MiddleConesAuto: 1, HighConesAuto: 0,
333 ConesDroppedAuto: 0, LowCubes: 2, MiddleCubes: 0,
334 HighCubes: 1, CubesDropped: 0, LowCones: 0,
335 MiddleCones: 2, HighCones: 1, ConesDropped: 0,
Emily Markova46a69bf2023-03-22 20:45:52 -0700336 AvgCycle: 34, DockedAuto: true, EngagedAuto: true,
337 Docked: true, Engaged: false, CollectedBy: "simon",
Emily Markova6b551e02023-02-18 17:37:40 -0800338 },
339 Stats2023{
340 TeamNumber: "3242", MatchNumber: 5, SetNumber: 1,
341 CompLevel: "quals", StartingQuadrant: 1, LowCubesAuto: 0,
342 MiddleCubesAuto: 2, HighCubesAuto: 0, CubesDroppedAuto: 1,
343 LowConesAuto: 1, MiddleConesAuto: 0, HighConesAuto: 0,
344 ConesDroppedAuto: 1, LowCubes: 0, MiddleCubes: 2,
345 HighCubes: 0, CubesDropped: 0, LowCones: 2,
346 MiddleCones: 0, HighCones: 1, ConesDropped: 1,
Emily Markova46a69bf2023-03-22 20:45:52 -0700347 AvgCycle: 50, DockedAuto: false, EngagedAuto: false,
348 Docked: false, Engaged: false, CollectedBy: "eliza",
Emily Markova6b551e02023-02-18 17:37:40 -0800349 },
350 Stats2023{
351 TeamNumber: "1742", MatchNumber: 5, SetNumber: 1,
352 CompLevel: "quals", StartingQuadrant: 4, LowCubesAuto: 1,
353 MiddleCubesAuto: 1, HighCubesAuto: 0, CubesDroppedAuto: 0,
354 LowConesAuto: 0, MiddleConesAuto: 2, HighConesAuto: 0,
355 ConesDroppedAuto: 1, LowCubes: 0, MiddleCubes: 1,
356 HighCubes: 2, CubesDropped: 1, LowCones: 0,
357 MiddleCones: 2, HighCones: 1, ConesDropped: 1,
Emily Markova46a69bf2023-03-22 20:45:52 -0700358 AvgCycle: 49, DockedAuto: true, EngagedAuto: false,
359 Docked: false, Engaged: false, CollectedBy: "isaac",
Emily Markova6b551e02023-02-18 17:37:40 -0800360 },
361 Stats2023{
362 TeamNumber: "2454", MatchNumber: 5, SetNumber: 1,
363 CompLevel: "quals", StartingQuadrant: 1, LowCubesAuto: 0,
364 MiddleCubesAuto: 0, HighCubesAuto: 0, CubesDroppedAuto: 0,
365 LowConesAuto: 1, MiddleConesAuto: 1, HighConesAuto: 0,
366 ConesDroppedAuto: 1, LowCubes: 1, MiddleCubes: 2,
367 HighCubes: 0, CubesDropped: 0, LowCones: 1,
368 MiddleCones: 1, HighCones: 1, ConesDropped: 0,
Emily Markova46a69bf2023-03-22 20:45:52 -0700369 AvgCycle: 70, DockedAuto: true, EngagedAuto: true,
370 Docked: false, Engaged: false, CollectedBy: "sam",
Emily Markova6b551e02023-02-18 17:37:40 -0800371 },
372 }
373
374 correct := []Stats2023{
375 Stats2023{
376 TeamNumber: "3242", MatchNumber: 5, SetNumber: 1,
377 CompLevel: "quals", StartingQuadrant: 1, LowCubesAuto: 0,
378 MiddleCubesAuto: 2, HighCubesAuto: 0, CubesDroppedAuto: 1,
379 LowConesAuto: 1, MiddleConesAuto: 0, HighConesAuto: 0,
380 ConesDroppedAuto: 1, LowCubes: 0, MiddleCubes: 2,
381 HighCubes: 0, CubesDropped: 0, LowCones: 2,
382 MiddleCones: 0, HighCones: 1, ConesDropped: 1,
Emily Markova46a69bf2023-03-22 20:45:52 -0700383 AvgCycle: 50, DockedAuto: false, EngagedAuto: false,
384 Docked: false, Engaged: false, CollectedBy: "eliza",
Emily Markova6b551e02023-02-18 17:37:40 -0800385 },
386 Stats2023{
387 TeamNumber: "2454", MatchNumber: 5, SetNumber: 1,
388 CompLevel: "quals", StartingQuadrant: 1, LowCubesAuto: 0,
389 MiddleCubesAuto: 0, HighCubesAuto: 0, CubesDroppedAuto: 0,
390 LowConesAuto: 1, MiddleConesAuto: 1, HighConesAuto: 0,
391 ConesDroppedAuto: 1, LowCubes: 1, MiddleCubes: 2,
392 HighCubes: 0, CubesDropped: 0, LowCones: 1,
393 MiddleCones: 1, HighCones: 1, ConesDropped: 0,
Emily Markova46a69bf2023-03-22 20:45:52 -0700394 AvgCycle: 70, DockedAuto: true, EngagedAuto: true,
395 Docked: false, Engaged: false, CollectedBy: "sam",
Emily Markova6b551e02023-02-18 17:37:40 -0800396 },
397 }
398
399 originalMatches := []TeamMatch{
400 TeamMatch{MatchNumber: 5, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700401 Alliance: "R", AlliancePosition: 1, TeamNumber: "1111"},
Emily Markova6b551e02023-02-18 17:37:40 -0800402 TeamMatch{MatchNumber: 5, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700403 Alliance: "B", AlliancePosition: 1, TeamNumber: "2314"},
Emily Markova6b551e02023-02-18 17:37:40 -0800404 TeamMatch{MatchNumber: 5, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700405 Alliance: "R", AlliancePosition: 3, TeamNumber: "1742"},
Emily Markova6b551e02023-02-18 17:37:40 -0800406 TeamMatch{MatchNumber: 5, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700407 Alliance: "B", AlliancePosition: 2, TeamNumber: "2454"},
Emily Markova6b551e02023-02-18 17:37:40 -0800408 TeamMatch{MatchNumber: 5, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700409 Alliance: "B", AlliancePosition: 3, TeamNumber: "3242"},
Emily Markova6b551e02023-02-18 17:37:40 -0800410 }
411
412 // Matches for which we want to delete the stats.
413 matches := []TeamMatch{
414 TeamMatch{MatchNumber: 5, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700415 TeamNumber: "1111"},
Emily Markova6b551e02023-02-18 17:37:40 -0800416 TeamMatch{MatchNumber: 5, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700417 TeamNumber: "2314"},
Emily Markova6b551e02023-02-18 17:37:40 -0800418 TeamMatch{MatchNumber: 5, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700419 TeamNumber: "1742"},
Emily Markova6b551e02023-02-18 17:37:40 -0800420 }
421
422 for _, match := range originalMatches {
423 err := fixture.db.AddToMatch(match)
424 check(t, err, "Failed to add match")
425 fmt.Println("Match has been added : ", match.TeamNumber)
426 }
427
428 for _, stat := range startingStats {
429 err := fixture.db.AddToStats2023(stat)
430 check(t, err, "Failed to add stat")
431 }
432
433 for _, match := range matches {
Emily Markovab8551572023-03-22 19:49:39 -0700434 err := fixture.db.DeleteFromStats(match.CompLevel, match.MatchNumber, match.SetNumber, match.TeamNumber)
Emily Markova6b551e02023-02-18 17:37:40 -0800435 check(t, err, "Failed to delete stat")
436 }
437
438 got, err := fixture.db.ReturnStats2023()
439 check(t, err, "Failed ReturnStats()")
440
441 if !reflect.DeepEqual(correct, got) {
442 t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
443 }
444}
445
Milo Lina72e2002022-04-06 20:31:13 -0700446func TestQueryShiftDB(t *testing.T) {
447 fixture := createDatabase(t)
448 defer fixture.TearDown()
449
450 testDatabase := []Shift{
451 Shift{
452 MatchNumber: 1,
453 R1scouter: "Bob1", R2scouter: "Bob2", R3scouter: "Bob3", B1scouter: "Alice1", B2scouter: "Alice2", B3scouter: "Alice3",
454 },
455 Shift{
456 MatchNumber: 2,
457 R1scouter: "Bob1", R2scouter: "Bob2", R3scouter: "Bob3", B1scouter: "Alice1", B2scouter: "Alice2", B3scouter: "Alice3",
458 },
459 }
460
461 for i := 0; i < len(testDatabase); i++ {
462 err := fixture.db.AddToShift(testDatabase[i])
463 check(t, err, fmt.Sprint("Failed to add shift", i))
464 }
465
466 correct := []Shift{
467 Shift{
468 MatchNumber: 1,
469 R1scouter: "Bob1", R2scouter: "Bob2", R3scouter: "Bob3", B1scouter: "Alice1", B2scouter: "Alice2", B3scouter: "Alice3",
470 },
471 }
472
473 got, err := fixture.db.QueryAllShifts(1)
474 check(t, err, "Failed to query shift for match 1")
475
476 if !reflect.DeepEqual(correct, got) {
477 t.Fatalf("Got %#v,\nbut expected %#v.", got, correct)
478 }
479}
480
Yash Chainanibcd1bb32022-04-02 17:10:24 -0700481func TestQueryRankingsDB(t *testing.T) {
482 fixture := createDatabase(t)
483 defer fixture.TearDown()
484
485 testDatabase := []Ranking{
486 Ranking{
487 TeamNumber: 123,
488 Losses: 1, Wins: 7, Ties: 2,
489 Rank: 2, Dq: 0,
490 },
491 Ranking{
492 TeamNumber: 124,
493 Losses: 3, Wins: 4, Ties: 0,
494 Rank: 4, Dq: 2,
495 },
496 Ranking{
497 TeamNumber: 125,
498 Losses: 5, Wins: 2, Ties: 0,
499 Rank: 17, Dq: 0,
500 },
501 Ranking{
502 TeamNumber: 126,
503 Losses: 0, Wins: 7, Ties: 0,
504 Rank: 5, Dq: 0,
505 },
506 }
507
508 for i := 0; i < len(testDatabase); i++ {
509 err := fixture.db.AddOrUpdateRankings(testDatabase[i])
510 check(t, err, fmt.Sprint("Failed to add rankings ", i))
511 }
512
513 correct := []Ranking{
514 Ranking{
515 TeamNumber: 126,
516 Losses: 0, Wins: 7, Ties: 0,
517 Rank: 5, Dq: 0,
518 },
519 }
520
521 got, err := fixture.db.QueryRankings(126)
522 check(t, err, "Failed QueryRankings()")
523
524 if !reflect.DeepEqual(correct, got) {
525 t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
526 }
527}
528
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800529func TestReturnMatchDB(t *testing.T) {
Philipp Schrader7365d322022-03-06 16:40:08 -0800530 fixture := createDatabase(t)
531 defer fixture.TearDown()
Philipp Schrader4953cc32022-02-25 18:09:02 -0800532
Emily Markovabf24c9e2023-02-08 20:31:11 -0800533 correct := []TeamMatch{
534 TeamMatch{
Emily Markovab8551572023-03-22 19:49:39 -0700535 MatchNumber: 8, SetNumber: 1, CompLevel: "quals", Alliance: "R", AlliancePosition: 1, TeamNumber: "6835"},
Emily Markovabf24c9e2023-02-08 20:31:11 -0800536 TeamMatch{
Emily Markovab8551572023-03-22 19:49:39 -0700537 MatchNumber: 8, SetNumber: 1, CompLevel: "quals", Alliance: "R", AlliancePosition: 2, TeamNumber: "4834"},
Emily Markovabf24c9e2023-02-08 20:31:11 -0800538 TeamMatch{
Emily Markovab8551572023-03-22 19:49:39 -0700539 MatchNumber: 9, SetNumber: 1, CompLevel: "quals", Alliance: "B", AlliancePosition: 3, TeamNumber: "9824"},
Emily Markovabf24c9e2023-02-08 20:31:11 -0800540 TeamMatch{
Emily Markovab8551572023-03-22 19:49:39 -0700541 MatchNumber: 7, SetNumber: 2, CompLevel: "quals", Alliance: "B", AlliancePosition: 1, TeamNumber: "3732"},
Emily Markovabf24c9e2023-02-08 20:31:11 -0800542 TeamMatch{
Emily Markovab8551572023-03-22 19:49:39 -0700543 MatchNumber: 8, SetNumber: 1, CompLevel: "quals", Alliance: "B", AlliancePosition: 1, TeamNumber: "3732"},
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800544 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800545
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800546 for i := 0; i < len(correct); i++ {
Philipp Schrader7365d322022-03-06 16:40:08 -0800547 err := fixture.db.AddToMatch(correct[i])
Philipp Schrader83fc2722022-03-10 21:59:20 -0800548 check(t, err, fmt.Sprint("Failed to add match", i))
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800549 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800550
Philipp Schrader7365d322022-03-06 16:40:08 -0800551 got, err := fixture.db.ReturnMatches()
Philipp Schrader83fc2722022-03-10 21:59:20 -0800552 check(t, err, "Failed ReturnMatches()")
553
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800554 if !reflect.DeepEqual(correct, got) {
555 t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
556 }
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800557}
558
Philipp Schraderfe583842022-04-08 19:47:07 -0700559func TestOverwriteNewMatchData(t *testing.T) {
560 fixture := createDatabase(t)
561 defer fixture.TearDown()
562
Emily Markovabf24c9e2023-02-08 20:31:11 -0800563 testDatabase := []TeamMatch{
564 TeamMatch{
Emily Markovab8551572023-03-22 19:49:39 -0700565 MatchNumber: 9, SetNumber: 1, CompLevel: "quals", Alliance: "B", AlliancePosition: 3, TeamNumber: "4464"},
Emily Markovabf24c9e2023-02-08 20:31:11 -0800566 TeamMatch{
Emily Markovab8551572023-03-22 19:49:39 -0700567 MatchNumber: 8, SetNumber: 1, CompLevel: "quals", Alliance: "R", AlliancePosition: 2, TeamNumber: "2352"},
Emily Markovabf24c9e2023-02-08 20:31:11 -0800568 TeamMatch{
Emily Markovab8551572023-03-22 19:49:39 -0700569 MatchNumber: 9, SetNumber: 1, CompLevel: "quals", Alliance: "B", AlliancePosition: 3, TeamNumber: "6321"},
Philipp Schraderfe583842022-04-08 19:47:07 -0700570 }
571
572 for i := 0; i < len(testDatabase); i++ {
573 err := fixture.db.AddToMatch(testDatabase[i])
574 check(t, err, fmt.Sprint("Failed to add match", i))
575 }
576
Emily Markovabf24c9e2023-02-08 20:31:11 -0800577 correct := []TeamMatch{
578 TeamMatch{
Emily Markovab8551572023-03-22 19:49:39 -0700579 MatchNumber: 8, SetNumber: 1, CompLevel: "quals", Alliance: "R", AlliancePosition: 2, TeamNumber: "2352"},
Emily Markovabf24c9e2023-02-08 20:31:11 -0800580 TeamMatch{
Emily Markovab8551572023-03-22 19:49:39 -0700581 MatchNumber: 9, SetNumber: 1, CompLevel: "quals", Alliance: "B", AlliancePosition: 3, TeamNumber: "6321"},
Philipp Schraderfe583842022-04-08 19:47:07 -0700582 }
583
584 got, err := fixture.db.ReturnMatches()
585 check(t, err, "Failed to get match list")
586
587 if !reflect.DeepEqual(correct, got) {
588 t.Fatalf("Got %#v,\nbut expected %#v.", got, correct)
589 }
590}
591
Milo Lina72e2002022-04-06 20:31:13 -0700592func TestAddReturnShiftDB(t *testing.T) {
593 fixture := createDatabase(t)
594 defer fixture.TearDown()
595
596 correct := []Shift{
597 Shift{
598 MatchNumber: 1,
599 R1scouter: "Bob1", R2scouter: "Bob2", R3scouter: "Bob3", B1scouter: "Alice1", B2scouter: "Alice2", B3scouter: "Alice3",
600 },
601 Shift{
602 MatchNumber: 2,
603 R1scouter: "Bob1", R2scouter: "Bob2", R3scouter: "Bob3", B1scouter: "Alice1", B2scouter: "Alice2", B3scouter: "Alice3",
604 },
605 }
606
607 for i := 0; i < len(correct); i++ {
608 err := fixture.db.AddToShift(correct[i])
609 check(t, err, fmt.Sprint("Failed to add shift", i))
610 }
611
612 got, err := fixture.db.ReturnAllShifts()
613 check(t, err, "Failed ReturnAllShifts()")
614
615 if !reflect.DeepEqual(correct, got) {
616 t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
617 }
618}
619
Yash Chainanibcd1bb32022-04-02 17:10:24 -0700620func TestReturnRankingsDB(t *testing.T) {
621 fixture := createDatabase(t)
622 defer fixture.TearDown()
623
624 correct := []Ranking{
625 Ranking{
626 TeamNumber: 123,
627 Losses: 1, Wins: 7, Ties: 2,
628 Rank: 2, Dq: 0,
629 },
630 Ranking{
631 TeamNumber: 124,
632 Losses: 3, Wins: 4, Ties: 0,
633 Rank: 4, Dq: 2,
634 },
635 Ranking{
636 TeamNumber: 125,
637 Losses: 5, Wins: 2, Ties: 0,
638 Rank: 17, Dq: 0,
639 },
640 Ranking{
641 TeamNumber: 126,
642 Losses: 0, Wins: 7, Ties: 0,
643 Rank: 5, Dq: 0,
644 },
645 }
646
647 for i := 0; i < len(correct); i++ {
648 err := fixture.db.AddOrUpdateRankings(correct[i])
649 check(t, err, fmt.Sprint("Failed to add rankings", i))
650 }
651
652 got, err := fixture.db.ReturnRankings()
653 check(t, err, "Failed ReturnRankings()")
654
655 if !reflect.DeepEqual(correct, got) {
656 t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
657 }
658}
659
Emily Markova290147d2023-03-03 22:40:06 -0800660func TestReturnStats2023DB(t *testing.T) {
661 fixture := createDatabase(t)
662 defer fixture.TearDown()
663
664 correct := []Stats2023{
665 Stats2023{
666 TeamNumber: "2343", MatchNumber: 2, SetNumber: 1,
667 CompLevel: "quals", StartingQuadrant: 1, LowCubesAuto: 1,
668 MiddleCubesAuto: 2, HighCubesAuto: 2, CubesDroppedAuto: 1,
669 LowConesAuto: 0, MiddleConesAuto: 0, HighConesAuto: 2,
670 ConesDroppedAuto: 1, LowCubes: 1, MiddleCubes: 2,
671 HighCubes: 1, CubesDropped: 0, LowCones: 2,
672 MiddleCones: 0, HighCones: 2, ConesDropped: 1,
Emily Markova46a69bf2023-03-22 20:45:52 -0700673 AvgCycle: 51, DockedAuto: true, EngagedAuto: true,
674 Docked: false, Engaged: false, CollectedBy: "isaac",
Emily Markova290147d2023-03-03 22:40:06 -0800675 },
676 Stats2023{
677 TeamNumber: "5443", MatchNumber: 2, SetNumber: 1,
678 CompLevel: "quals", StartingQuadrant: 2, LowCubesAuto: 1,
679 MiddleCubesAuto: 1, HighCubesAuto: 0, CubesDroppedAuto: 1,
680 LowConesAuto: 1, MiddleConesAuto: 1, HighConesAuto: 0,
681 ConesDroppedAuto: 0, LowCubes: 2, MiddleCubes: 2,
682 HighCubes: 1, CubesDropped: 0, LowCones: 1,
683 MiddleCones: 0, HighCones: 2, ConesDropped: 1,
Emily Markova46a69bf2023-03-22 20:45:52 -0700684 AvgCycle: 39, DockedAuto: false, EngagedAuto: false,
685 Docked: false, Engaged: false, CollectedBy: "jack",
Emily Markova290147d2023-03-03 22:40:06 -0800686 },
687 Stats2023{
688 TeamNumber: "5436", MatchNumber: 2, SetNumber: 1,
689 CompLevel: "quals", StartingQuadrant: 3, LowCubesAuto: 0,
690 MiddleCubesAuto: 2, HighCubesAuto: 0, CubesDroppedAuto: 1,
691 LowConesAuto: 2, MiddleConesAuto: 0, HighConesAuto: 0,
692 ConesDroppedAuto: 1, LowCubes: 2, MiddleCubes: 2,
693 HighCubes: 0, CubesDropped: 0, LowCones: 1,
694 MiddleCones: 2, HighCones: 1, ConesDropped: 1,
Emily Markova46a69bf2023-03-22 20:45:52 -0700695 AvgCycle: 45, DockedAuto: true, EngagedAuto: false,
696 Docked: false, Engaged: false, CollectedBy: "martin",
Emily Markova290147d2023-03-03 22:40:06 -0800697 },
698 Stats2023{
699 TeamNumber: "5643", MatchNumber: 2, SetNumber: 1,
700 CompLevel: "quals", StartingQuadrant: 4, LowCubesAuto: 0,
701 MiddleCubesAuto: 0, HighCubesAuto: 1, CubesDroppedAuto: 1,
702 LowConesAuto: 2, MiddleConesAuto: 0, HighConesAuto: 0,
703 ConesDroppedAuto: 1, LowCubes: 2, MiddleCubes: 2,
704 HighCubes: 0, CubesDropped: 0, LowCones: 2,
705 MiddleCones: 2, HighCones: 1, ConesDropped: 1,
Emily Markova46a69bf2023-03-22 20:45:52 -0700706 AvgCycle: 34, DockedAuto: true, EngagedAuto: false,
707 Docked: true, Engaged: false, CollectedBy: "unknown",
Emily Markova290147d2023-03-03 22:40:06 -0800708 },
709 }
710
711 matches := []TeamMatch{
712 TeamMatch{MatchNumber: 2, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700713 Alliance: "R", AlliancePosition: 1, TeamNumber: "2343"},
Emily Markova290147d2023-03-03 22:40:06 -0800714 TeamMatch{MatchNumber: 2, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700715 Alliance: "R", AlliancePosition: 2, TeamNumber: "5443"},
Emily Markova290147d2023-03-03 22:40:06 -0800716 TeamMatch{MatchNumber: 2, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700717 Alliance: "R", AlliancePosition: 3, TeamNumber: "5436"},
Emily Markova290147d2023-03-03 22:40:06 -0800718 TeamMatch{MatchNumber: 2, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700719 Alliance: "B", AlliancePosition: 1, TeamNumber: "5643"},
Emily Markova290147d2023-03-03 22:40:06 -0800720 }
721
722 for _, match := range matches {
723 err := fixture.db.AddToMatch(match)
724 check(t, err, "Failed to add match")
725 }
726
727 for i := 0; i < len(correct); i++ {
728 err := fixture.db.AddToStats2023(correct[i])
729 check(t, err, fmt.Sprint("Failed to add stats ", i))
730 }
731
732 got, err := fixture.db.ReturnStats2023()
733 check(t, err, "Failed ReturnStats()")
734
735 if !reflect.DeepEqual(correct, got) {
736 t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
737 }
738}
739
Sabina Leaver759090b2023-01-14 20:42:56 -0800740func TestReturnActionsDB(t *testing.T) {
741 fixture := createDatabase(t)
742 defer fixture.TearDown()
743 correct := []Action{
744 Action{
745 TeamNumber: "1235", MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
746 CompletedAction: []byte(""), TimeStamp: 0000, CollectedBy: "",
747 },
748 Action{
749 TeamNumber: "1236", MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
750 CompletedAction: []byte(""), TimeStamp: 0321, CollectedBy: "",
751 },
752 Action{
753 TeamNumber: "1237", MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
754 CompletedAction: []byte(""), TimeStamp: 0222, CollectedBy: "",
755 },
756 Action{
757 TeamNumber: "1238", MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
758 CompletedAction: []byte(""), TimeStamp: 0110, CollectedBy: "",
759 },
760 Action{
761 TeamNumber: "1239", MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
762 CompletedAction: []byte(""), TimeStamp: 0004, CollectedBy: "",
763 },
764 Action{
765 TeamNumber: "1233", MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
766 CompletedAction: []byte(""), TimeStamp: 0004, CollectedBy: "",
767 },
768 }
769
Emily Markovabf24c9e2023-02-08 20:31:11 -0800770 matches := []TeamMatch{
771 TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700772 Alliance: "R", AlliancePosition: 1, TeamNumber: "1235"},
Emily Markovabf24c9e2023-02-08 20:31:11 -0800773 TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700774 Alliance: "R", AlliancePosition: 2, TeamNumber: "1236"},
Emily Markovabf24c9e2023-02-08 20:31:11 -0800775 TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700776 Alliance: "R", AlliancePosition: 3, TeamNumber: "1237"},
Emily Markovabf24c9e2023-02-08 20:31:11 -0800777 TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700778 Alliance: "B", AlliancePosition: 1, TeamNumber: "1238"},
Emily Markovabf24c9e2023-02-08 20:31:11 -0800779 TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700780 Alliance: "B", AlliancePosition: 2, TeamNumber: "1239"},
Emily Markovabf24c9e2023-02-08 20:31:11 -0800781 TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700782 Alliance: "B", AlliancePosition: 3, TeamNumber: "1233"},
Emily Markovabf24c9e2023-02-08 20:31:11 -0800783 }
784
785 for _, match := range matches {
786 err := fixture.db.AddToMatch(match)
787 check(t, err, "Failed to add match")
788 }
Sabina Leaver759090b2023-01-14 20:42:56 -0800789
790 for i := 0; i < len(correct); i++ {
Emily Markovabf24c9e2023-02-08 20:31:11 -0800791 err := fixture.db.AddAction(correct[i])
Sabina Leaver759090b2023-01-14 20:42:56 -0800792 check(t, err, fmt.Sprint("Failed to add to actions ", i))
793 }
794
795 got, err := fixture.db.ReturnActions()
796 check(t, err, "Failed ReturnActions()")
797
798 if !reflect.DeepEqual(correct, got) {
799 t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
800 }
801}
802
Yash Chainanibcd1bb32022-04-02 17:10:24 -0700803func TestRankingsDbUpdate(t *testing.T) {
804 fixture := createDatabase(t)
805 defer fixture.TearDown()
806
807 testDatabase := []Ranking{
808 Ranking{
809 TeamNumber: 123,
810 Losses: 1, Wins: 7, Ties: 2,
811 Rank: 2, Dq: 0,
812 },
813 Ranking{
814 TeamNumber: 124,
815 Losses: 3, Wins: 4, Ties: 0,
816 Rank: 4, Dq: 2,
817 },
818 Ranking{
819 TeamNumber: 125,
820 Losses: 5, Wins: 2, Ties: 0,
821 Rank: 17, Dq: 0,
822 },
823 Ranking{
824 TeamNumber: 126,
825 Losses: 0, Wins: 7, Ties: 0,
826 Rank: 5, Dq: 0,
827 },
828 Ranking{
829 TeamNumber: 125,
830 Losses: 2, Wins: 4, Ties: 1,
831 Rank: 5, Dq: 0,
832 },
833 }
834
835 for i := 0; i < len(testDatabase); i++ {
836 err := fixture.db.AddOrUpdateRankings(testDatabase[i])
837 check(t, err, fmt.Sprint("Failed to add rankings ", i))
838 }
839
840 correct := []Ranking{
841 Ranking{
842 TeamNumber: 125,
843 Losses: 2, Wins: 4, Ties: 1,
844 Rank: 5, Dq: 0,
845 },
846 }
847
848 got, err := fixture.db.QueryRankings(125)
849 check(t, err, "Failed QueryRankings()")
850
Philipp Schradereecb8962022-06-01 21:02:42 -0700851 checkDeepEqual(t, correct, got)
Yash Chainanibcd1bb32022-04-02 17:10:24 -0700852}
853
Alex Perry871eab92022-03-12 17:43:52 -0800854func TestNotes(t *testing.T) {
Philipp Schrader7365d322022-03-06 16:40:08 -0800855 fixture := createDatabase(t)
856 defer fixture.TearDown()
Alex Perry871eab92022-03-12 17:43:52 -0800857
Philipp Schradereecb8962022-06-01 21:02:42 -0700858 expected := []string{"Note 1", "Note 3"}
Alex Perry871eab92022-03-12 17:43:52 -0800859
Filip Kujawa6f7f0b32023-03-30 13:26:08 -0700860 err := fixture.db.AddNotes(NotesData{TeamNumber: 1234, Notes: "Note 1", GoodDriving: true, BadDriving: false, SolidPickup: false, SketchyPlacing: true, GoodDefense: false, BadDefense: true, EasilyDefended: true})
Alex Perry871eab92022-03-12 17:43:52 -0800861 check(t, err, "Failed to add Note")
Filip Kujawa6f7f0b32023-03-30 13:26:08 -0700862 err = fixture.db.AddNotes(NotesData{TeamNumber: 1235, Notes: "Note 2", GoodDriving: false, BadDriving: true, SolidPickup: false, SketchyPlacing: true, GoodDefense: false, BadDefense: false, EasilyDefended: false})
Alex Perry871eab92022-03-12 17:43:52 -0800863 check(t, err, "Failed to add Note")
Filip Kujawa6f7f0b32023-03-30 13:26:08 -0700864 err = fixture.db.AddNotes(NotesData{TeamNumber: 1234, Notes: "Note 3", GoodDriving: true, BadDriving: false, SolidPickup: false, SketchyPlacing: true, GoodDefense: true, BadDefense: false, EasilyDefended: true})
Alex Perry871eab92022-03-12 17:43:52 -0800865 check(t, err, "Failed to add Note")
866
Philipp Schrader7365d322022-03-06 16:40:08 -0800867 actual, err := fixture.db.QueryNotes(1234)
Alex Perry871eab92022-03-12 17:43:52 -0800868 check(t, err, "Failed to get Notes")
869
870 if !reflect.DeepEqual(expected, actual) {
871 t.Errorf("Got %#v,\nbut expected %#v.", actual, expected)
872 }
873}
Filip Kujawa210a03b2022-11-24 14:41:11 -0800874
875func TestDriverRanking(t *testing.T) {
876 fixture := createDatabase(t)
877 defer fixture.TearDown()
878
879 expected := []DriverRankingData{
880 {ID: 1, MatchNumber: 12, Rank1: 1234, Rank2: 1235, Rank3: 1236},
881 {ID: 2, MatchNumber: 12, Rank1: 1236, Rank2: 1235, Rank3: 1234},
882 }
883
884 err := fixture.db.AddDriverRanking(
885 DriverRankingData{MatchNumber: 12, Rank1: 1234, Rank2: 1235, Rank3: 1236},
886 )
887 check(t, err, "Failed to add Driver Ranking")
888 err = fixture.db.AddDriverRanking(
889 DriverRankingData{MatchNumber: 12, Rank1: 1236, Rank2: 1235, Rank3: 1234},
890 )
891 check(t, err, "Failed to add Driver Ranking")
892 err = fixture.db.AddDriverRanking(
893 DriverRankingData{MatchNumber: 13, Rank1: 1235, Rank2: 1234, Rank3: 1236},
894 )
895 check(t, err, "Failed to add Driver Ranking")
896
897 actual, err := fixture.db.QueryDriverRanking(12)
898 check(t, err, "Failed to get Driver Ranking")
899
900 if !reflect.DeepEqual(expected, actual) {
901 t.Errorf("Got %#v,\nbut expected %#v.", actual, expected)
902 }
903}
Philipp Schradera8955fb2023-03-05 15:47:19 -0800904
905func TestParsedDriverRanking(t *testing.T) {
906 fixture := createDatabase(t)
907 defer fixture.TearDown()
908
909 expected := []ParsedDriverRankingData{
910 {TeamNumber: "1234", Score: 100},
911 {TeamNumber: "1235", Score: 110},
912 {TeamNumber: "1236", Score: 90},
913 }
914
915 for i := range expected {
916 err := fixture.db.AddParsedDriverRanking(expected[i])
917 check(t, err, "Failed to add Parsed Driver Ranking")
918 }
919
920 actual, err := fixture.db.ReturnAllParsedDriverRankings()
921 check(t, err, "Failed to get Parsed Driver Ranking")
922 if !reflect.DeepEqual(expected, actual) {
923 t.Errorf("Got %#v,\nbut expected %#v.", actual, expected)
924 }
925
926 // Now update one of the rankings and make sure we get the properly
927 // merged result.
928 err = fixture.db.AddParsedDriverRanking(ParsedDriverRankingData{
929 TeamNumber: "1235", Score: 200,
930 })
931 check(t, err, "Failed to add Parsed Driver Ranking")
932
933 expected = []ParsedDriverRankingData{
934 {TeamNumber: "1234", Score: 100},
935 {TeamNumber: "1236", Score: 90},
936 {TeamNumber: "1235", Score: 200},
937 }
938
939 actual, err = fixture.db.ReturnAllParsedDriverRankings()
940 check(t, err, "Failed to get Parsed Driver Ranking")
941 if !reflect.DeepEqual(expected, actual) {
942 t.Errorf("Got %#v,\nbut expected %#v.", actual, expected)
943 }
944}