blob: d7001b8910178c308b730b3cb12c01e65617c91e [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{
Emily Markovae68b7632023-12-30 14:17:55 -0800117 TeamNumber: "123",
Yash Chainanibcd1bb32022-04-02 17:10:24 -0700118 Losses: 1, Wins: 7, Ties: 0,
119 Rank: 2, Dq: 0,
120 },
121 Ranking{
Emily Markovae68b7632023-12-30 14:17:55 -0800122 TeamNumber: "125",
Yash Chainanibcd1bb32022-04-02 17:10:24 -0700123 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{
Philipp Schrader8fdfadf2023-04-15 16:26:10 -0700147 PreScouting: false,
148 TeamNumber: "6344", MatchNumber: 3, SetNumber: 1,
Emily Markova290147d2023-03-03 22:40:06 -0800149 CompLevel: "quals", StartingQuadrant: 1, LowCubesAuto: 0,
150 MiddleCubesAuto: 1, HighCubesAuto: 0, CubesDroppedAuto: 1,
151 LowConesAuto: 1, MiddleConesAuto: 0, HighConesAuto: 2,
152 ConesDroppedAuto: 0, LowCubes: 1, MiddleCubes: 2,
153 HighCubes: 1, CubesDropped: 0, LowCones: 0,
Filip Kujawa7a045e72023-04-13 08:41:09 -0700154 MiddleCones: 2, HighCones: 1, ConesDropped: 1, SuperchargedPieces: 0,
Filip Kujawa0b4b1e52023-04-15 14:05:40 -0700155 AvgCycle: 0, Mobility: true, DockedAuto: true, EngagedAuto: false,
Emily Markova63c63f62023-03-29 20:57:35 -0700156 BalanceAttemptAuto: false, Docked: false, Engaged: false,
157 BalanceAttempt: false, CollectedBy: "emma",
Emily Markova290147d2023-03-03 22:40:06 -0800158 },
159 Stats2023{
Philipp Schrader8fdfadf2023-04-15 16:26:10 -0700160 PreScouting: false,
161 TeamNumber: "7454", MatchNumber: 3, SetNumber: 1,
Emily Markova290147d2023-03-03 22:40:06 -0800162 CompLevel: "quals", StartingQuadrant: 2, LowCubesAuto: 1,
163 MiddleCubesAuto: 2, HighCubesAuto: 2, CubesDroppedAuto: 0,
164 LowConesAuto: 2, MiddleConesAuto: 0, HighConesAuto: 0,
165 ConesDroppedAuto: 1, LowCubes: 1, MiddleCubes: 0,
166 HighCubes: 0, CubesDropped: 1, LowCones: 0,
Filip Kujawa7a045e72023-04-13 08:41:09 -0700167 MiddleCones: 0, HighCones: 1, ConesDropped: 0, SuperchargedPieces: 1,
Filip Kujawa0b4b1e52023-04-15 14:05:40 -0700168 AvgCycle: 0, Mobility: false, DockedAuto: false, EngagedAuto: false,
Emily Markova63c63f62023-03-29 20:57:35 -0700169 BalanceAttemptAuto: true, Docked: true, Engaged: true,
170 BalanceAttempt: false, CollectedBy: "tyler",
Emily Markova290147d2023-03-03 22:40:06 -0800171 },
172 Stats2023{
Philipp Schrader8fdfadf2023-04-15 16:26:10 -0700173 PreScouting: false,
174 TeamNumber: "4354", MatchNumber: 3, SetNumber: 1,
Emily Markova290147d2023-03-03 22:40:06 -0800175 CompLevel: "quals", StartingQuadrant: 3, LowCubesAuto: 0,
176 MiddleCubesAuto: 1, HighCubesAuto: 1, CubesDroppedAuto: 0,
177 LowConesAuto: 0, MiddleConesAuto: 2, HighConesAuto: 1,
178 ConesDroppedAuto: 1, LowCubes: 0, MiddleCubes: 0,
179 HighCubes: 2, CubesDropped: 1, LowCones: 1,
Filip Kujawa7a045e72023-04-13 08:41:09 -0700180 MiddleCones: 1, HighCones: 0, ConesDropped: 1, SuperchargedPieces: 0,
Filip Kujawa0b4b1e52023-04-15 14:05:40 -0700181 AvgCycle: 0, Mobility: true, DockedAuto: false, EngagedAuto: false,
Emily Markova63c63f62023-03-29 20:57:35 -0700182 BalanceAttemptAuto: false, Docked: false, Engaged: false,
183 BalanceAttempt: true, CollectedBy: "isaac",
Emily Markova290147d2023-03-03 22:40:06 -0800184 },
185 Stats2023{
Philipp Schrader8fdfadf2023-04-15 16:26:10 -0700186 PreScouting: false,
187 TeamNumber: "6533", MatchNumber: 3, SetNumber: 1,
Emily Markova290147d2023-03-03 22:40:06 -0800188 CompLevel: "quals", StartingQuadrant: 1, LowCubesAuto: 0,
189 MiddleCubesAuto: 2, HighCubesAuto: 1, CubesDroppedAuto: 1,
190 LowConesAuto: 1, MiddleConesAuto: 0, HighConesAuto: 0,
191 ConesDroppedAuto: 0, LowCubes: 0, MiddleCubes: 1,
192 HighCubes: 2, CubesDropped: 1, LowCones: 0,
Filip Kujawa7a045e72023-04-13 08:41:09 -0700193 MiddleCones: 1, HighCones: 0, ConesDropped: 0, SuperchargedPieces: 0,
Filip Kujawa0b4b1e52023-04-15 14:05:40 -0700194 AvgCycle: 0, Mobility: false, DockedAuto: true, EngagedAuto: true,
Emily Markova63c63f62023-03-29 20:57:35 -0700195 BalanceAttemptAuto: true, Docked: false, Engaged: false,
196 BalanceAttempt: true, CollectedBy: "will",
Emily Markova290147d2023-03-03 22:40:06 -0800197 },
198 Stats2023{
Philipp Schrader8fdfadf2023-04-15 16:26:10 -0700199 PreScouting: false,
200 TeamNumber: "8354", MatchNumber: 3, SetNumber: 1,
Emily Markova290147d2023-03-03 22:40:06 -0800201 CompLevel: "quals", StartingQuadrant: 2, LowCubesAuto: 1,
202 MiddleCubesAuto: 1, HighCubesAuto: 2, CubesDroppedAuto: 0,
203 LowConesAuto: 0, MiddleConesAuto: 1, HighConesAuto: 1,
204 ConesDroppedAuto: 1, LowCubes: 1, MiddleCubes: 0,
205 HighCubes: 0, CubesDropped: 2, LowCones: 1,
Filip Kujawa7a045e72023-04-13 08:41:09 -0700206 MiddleCones: 1, HighCones: 0, ConesDropped: 1, SuperchargedPieces: 0,
Filip Kujawa0b4b1e52023-04-15 14:05:40 -0700207 AvgCycle: 0, Mobility: true, DockedAuto: true, EngagedAuto: false,
Emily Markova63c63f62023-03-29 20:57:35 -0700208 BalanceAttemptAuto: false, Docked: true, Engaged: false,
209 BalanceAttempt: false, CollectedBy: "unkown",
Emily Markova290147d2023-03-03 22:40:06 -0800210 },
211 }
212
213 matches := []TeamMatch{
214 TeamMatch{MatchNumber: 3, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700215 Alliance: "R", AlliancePosition: 1, TeamNumber: "6344"},
Emily Markova290147d2023-03-03 22:40:06 -0800216 TeamMatch{MatchNumber: 3, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700217 Alliance: "R", AlliancePosition: 2, TeamNumber: "7454"},
Emily Markova290147d2023-03-03 22:40:06 -0800218 TeamMatch{MatchNumber: 3, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700219 Alliance: "R", AlliancePosition: 3, TeamNumber: "4354"},
Emily Markova290147d2023-03-03 22:40:06 -0800220 TeamMatch{MatchNumber: 3, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700221 Alliance: "B", AlliancePosition: 1, TeamNumber: "6533"},
Emily Markova290147d2023-03-03 22:40:06 -0800222 TeamMatch{MatchNumber: 3, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700223 Alliance: "B", AlliancePosition: 2, TeamNumber: "8354"},
Emily Markova290147d2023-03-03 22:40:06 -0800224 }
225
226 for _, match := range matches {
227 err := fixture.db.AddToMatch(match)
228 check(t, err, "Failed to add match")
229 }
230
231 for i := 0; i < len(correct); i++ {
232 err := fixture.db.AddToStats2023(correct[i])
233 check(t, err, "Failed to add 2023stats to DB")
234 }
235
236 got, err := fixture.db.ReturnStats2023()
237 check(t, err, "Failed ReturnStats2023()")
238
239 if !reflect.DeepEqual(correct, got) {
240 t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
241 }
242}
243
Philipp Schrader8fdfadf2023-04-15 16:26:10 -0700244func TestInsertPreScoutedStats(t *testing.T) {
245 fixture := createDatabase(t)
246 defer fixture.TearDown()
247
248 stats := Stats2023{
249 PreScouting: false,
250 TeamNumber: "6344", MatchNumber: 3, SetNumber: 1,
251 CompLevel: "quals", StartingQuadrant: 1, LowCubesAuto: 0,
252 MiddleCubesAuto: 1, HighCubesAuto: 0, CubesDroppedAuto: 1,
253 LowConesAuto: 1, MiddleConesAuto: 0, HighConesAuto: 2,
254 ConesDroppedAuto: 0, LowCubes: 1, MiddleCubes: 2,
255 HighCubes: 1, CubesDropped: 0, LowCones: 0,
256 MiddleCones: 2, HighCones: 1, ConesDropped: 1, SuperchargedPieces: 0,
257 AvgCycle: 0, Mobility: true, DockedAuto: true, EngagedAuto: false,
258 BalanceAttemptAuto: false, Docked: false, Engaged: false,
259 BalanceAttempt: false, CollectedBy: "emma",
260 }
261
262 // Attempt to insert the non-pre-scouted data and make sure it fails.
263 err := fixture.db.AddToStats2023(stats)
264 if err == nil {
265 t.Fatal("Expected error from inserting the stats.")
266 }
267 if err.Error() != "Failed to find team 6344 in match 3 in the schedule." {
268 t.Fatal("Got:", err.Error())
269 }
270
271 // Mark the data as pre-scouting data. It should now succeed.
272 stats.PreScouting = true
273 err = fixture.db.AddToStats2023(stats)
274 check(t, err, "Failed to add prescouted stats to DB")
275}
276
Philipp Schrader78dc96b2023-03-11 15:23:44 -0800277func TestQueryingStats2023ByTeam(t *testing.T) {
278 fixture := createDatabase(t)
279 defer fixture.TearDown()
280
281 stats := []Stats2023{
282 Stats2023{
Philipp Schrader8fdfadf2023-04-15 16:26:10 -0700283 PreScouting: false,
284 TeamNumber: "6344", MatchNumber: 3, SetNumber: 1,
Philipp Schrader78dc96b2023-03-11 15:23:44 -0800285 CompLevel: "qm", StartingQuadrant: 1, LowCubesAuto: 0,
286 MiddleCubesAuto: 1, HighCubesAuto: 0, CubesDroppedAuto: 1,
287 LowConesAuto: 1, MiddleConesAuto: 0, HighConesAuto: 2,
288 ConesDroppedAuto: 0, LowCubes: 1, MiddleCubes: 2,
289 HighCubes: 1, CubesDropped: 0, LowCones: 0,
Filip Kujawa7a045e72023-04-13 08:41:09 -0700290 MiddleCones: 2, HighCones: 1, ConesDropped: 1, SuperchargedPieces: 0,
Filip Kujawa0b4b1e52023-04-15 14:05:40 -0700291 AvgCycle: 0, Mobility: true, DockedAuto: true, EngagedAuto: false,
Emily Markova63c63f62023-03-29 20:57:35 -0700292 BalanceAttemptAuto: false, Docked: false, Engaged: false,
293 BalanceAttempt: false, CollectedBy: "emma",
Philipp Schrader78dc96b2023-03-11 15:23:44 -0800294 },
295 Stats2023{
Philipp Schrader8fdfadf2023-04-15 16:26:10 -0700296 PreScouting: false,
297 TeamNumber: "7454", MatchNumber: 4, SetNumber: 1,
Philipp Schrader78dc96b2023-03-11 15:23:44 -0800298 CompLevel: "qm", StartingQuadrant: 2, LowCubesAuto: 1,
299 MiddleCubesAuto: 2, HighCubesAuto: 2, CubesDroppedAuto: 0,
300 LowConesAuto: 2, MiddleConesAuto: 0, HighConesAuto: 0,
301 ConesDroppedAuto: 1, LowCubes: 1, MiddleCubes: 0,
302 HighCubes: 0, CubesDropped: 1, LowCones: 0,
Filip Kujawa7a045e72023-04-13 08:41:09 -0700303 MiddleCones: 0, HighCones: 1, ConesDropped: 0, SuperchargedPieces: 1,
Filip Kujawa0b4b1e52023-04-15 14:05:40 -0700304 AvgCycle: 0, Mobility: false, DockedAuto: true, EngagedAuto: true,
Emily Markova63c63f62023-03-29 20:57:35 -0700305 BalanceAttemptAuto: true, Docked: false, Engaged: false,
306 BalanceAttempt: false, CollectedBy: "tyler",
Philipp Schrader78dc96b2023-03-11 15:23:44 -0800307 },
308 Stats2023{
Philipp Schrader8fdfadf2023-04-15 16:26:10 -0700309 PreScouting: false,
310 TeamNumber: "6344", MatchNumber: 5, SetNumber: 1,
Philipp Schrader78dc96b2023-03-11 15:23:44 -0800311 CompLevel: "qm", StartingQuadrant: 1, LowCubesAuto: 0,
312 MiddleCubesAuto: 1, HighCubesAuto: 0, CubesDroppedAuto: 1,
313 LowConesAuto: 1, MiddleConesAuto: 0, HighConesAuto: 2,
314 ConesDroppedAuto: 0, LowCubes: 1, MiddleCubes: 2,
315 HighCubes: 1, CubesDropped: 0, LowCones: 0,
Filip Kujawa7a045e72023-04-13 08:41:09 -0700316 MiddleCones: 2, HighCones: 1, ConesDropped: 1, SuperchargedPieces: 0,
Filip Kujawa0b4b1e52023-04-15 14:05:40 -0700317 AvgCycle: 0, Mobility: true, DockedAuto: true, EngagedAuto: false,
Emily Markova63c63f62023-03-29 20:57:35 -0700318 BalanceAttemptAuto: false, Docked: true, Engaged: false,
319 BalanceAttempt: true, CollectedBy: "emma",
Philipp Schrader78dc96b2023-03-11 15:23:44 -0800320 },
321 }
322
323 matches := []TeamMatch{
324 TeamMatch{MatchNumber: 3, SetNumber: 1, CompLevel: "qm",
Emily Markovab8551572023-03-22 19:49:39 -0700325 Alliance: "R", AlliancePosition: 1, TeamNumber: "6344"},
Philipp Schrader78dc96b2023-03-11 15:23:44 -0800326 TeamMatch{MatchNumber: 4, SetNumber: 1, CompLevel: "qm",
Emily Markovab8551572023-03-22 19:49:39 -0700327 Alliance: "R", AlliancePosition: 1, TeamNumber: "7454"},
Philipp Schrader78dc96b2023-03-11 15:23:44 -0800328 TeamMatch{MatchNumber: 5, SetNumber: 1, CompLevel: "qm",
Emily Markovab8551572023-03-22 19:49:39 -0700329 Alliance: "R", AlliancePosition: 1, TeamNumber: "6344"},
Philipp Schrader78dc96b2023-03-11 15:23:44 -0800330 }
331
332 for _, match := range matches {
333 err := fixture.db.AddToMatch(match)
334 check(t, err, "Failed to add match")
335 }
336
337 for i := range stats {
338 err := fixture.db.AddToStats2023(stats[i])
339 check(t, err, "Failed to add 2023stats to DB")
340 }
341
342 // Validate that requesting status for a single team gets us the
343 // expected data.
Filip Kujawaf3f9def2023-04-20 13:46:46 -0700344 statsFor6344, err := fixture.db.ReturnStats2023ForTeam("6344", 3, 1, "qm", false)
Philipp Schrader78dc96b2023-03-11 15:23:44 -0800345 check(t, err, "Failed ReturnStats2023()")
346
347 if !reflect.DeepEqual([]Stats2023{stats[0]}, statsFor6344) {
348 t.Errorf("Got %#v,\nbut expected %#v.", statsFor6344, stats[0])
349 }
350
351 // Validate that requesting team data for a non-existent match returns
352 // nothing.
Filip Kujawaf3f9def2023-04-20 13:46:46 -0700353 statsForMissing, err := fixture.db.ReturnStats2023ForTeam("6344", 9, 1, "qm", false)
Philipp Schrader78dc96b2023-03-11 15:23:44 -0800354 check(t, err, "Failed ReturnStats2023()")
355
356 if !reflect.DeepEqual([]Stats2023{}, statsForMissing) {
357 t.Errorf("Got %#v,\nbut expected %#v.", statsForMissing, []Stats2023{})
358 }
359}
360
Emily Markova6b551e02023-02-18 17:37:40 -0800361func TestDeleteFromStats(t *testing.T) {
362 fixture := createDatabase(t)
363 defer fixture.TearDown()
364
365 startingStats := []Stats2023{
366 Stats2023{
Philipp Schrader8fdfadf2023-04-15 16:26:10 -0700367 PreScouting: false,
368 TeamNumber: "1111", MatchNumber: 5, SetNumber: 1,
Emily Markova6b551e02023-02-18 17:37:40 -0800369 CompLevel: "quals", StartingQuadrant: 2, LowCubesAuto: 2,
370 MiddleCubesAuto: 0, HighCubesAuto: 1, CubesDroppedAuto: 1,
371 LowConesAuto: 0, MiddleConesAuto: 2, HighConesAuto: 0,
372 ConesDroppedAuto: 1, LowCubes: 0, MiddleCubes: 1,
373 HighCubes: 2, CubesDropped: 1, LowCones: 1,
Filip Kujawa7a045e72023-04-13 08:41:09 -0700374 MiddleCones: 0, HighCones: 1, ConesDropped: 2, SuperchargedPieces: 0,
Filip Kujawa0b4b1e52023-04-15 14:05:40 -0700375 AvgCycle: 58, Mobility: true, DockedAuto: false, EngagedAuto: false,
Emily Markova63c63f62023-03-29 20:57:35 -0700376 BalanceAttemptAuto: true, Docked: true, Engaged: true,
377 BalanceAttempt: false, CollectedBy: "unknown",
Emily Markova6b551e02023-02-18 17:37:40 -0800378 },
379 Stats2023{
Philipp Schrader8fdfadf2023-04-15 16:26:10 -0700380 PreScouting: false,
381 TeamNumber: "2314", MatchNumber: 5, SetNumber: 1,
Emily Markova6b551e02023-02-18 17:37:40 -0800382 CompLevel: "quals", StartingQuadrant: 3, LowCubesAuto: 1,
383 MiddleCubesAuto: 0, HighCubesAuto: 1, CubesDroppedAuto: 1,
384 LowConesAuto: 0, MiddleConesAuto: 1, HighConesAuto: 0,
385 ConesDroppedAuto: 0, LowCubes: 2, MiddleCubes: 0,
386 HighCubes: 1, CubesDropped: 0, LowCones: 0,
Filip Kujawa7a045e72023-04-13 08:41:09 -0700387 MiddleCones: 2, HighCones: 1, ConesDropped: 0, SuperchargedPieces: 1,
Filip Kujawa0b4b1e52023-04-15 14:05:40 -0700388 AvgCycle: 34, Mobility: true, DockedAuto: true, EngagedAuto: true,
Emily Markova63c63f62023-03-29 20:57:35 -0700389 BalanceAttemptAuto: false, Docked: true, Engaged: false,
390 BalanceAttempt: false, CollectedBy: "simon",
Emily Markova6b551e02023-02-18 17:37:40 -0800391 },
392 Stats2023{
Philipp Schrader8fdfadf2023-04-15 16:26:10 -0700393 PreScouting: false,
394 TeamNumber: "3242", MatchNumber: 5, SetNumber: 1,
Emily Markova6b551e02023-02-18 17:37:40 -0800395 CompLevel: "quals", StartingQuadrant: 1, LowCubesAuto: 0,
396 MiddleCubesAuto: 2, HighCubesAuto: 0, CubesDroppedAuto: 1,
397 LowConesAuto: 1, MiddleConesAuto: 0, HighConesAuto: 0,
398 ConesDroppedAuto: 1, LowCubes: 0, MiddleCubes: 2,
399 HighCubes: 0, CubesDropped: 0, LowCones: 2,
Filip Kujawa7a045e72023-04-13 08:41:09 -0700400 MiddleCones: 0, HighCones: 1, ConesDropped: 1, SuperchargedPieces: 0,
Filip Kujawa0b4b1e52023-04-15 14:05:40 -0700401 AvgCycle: 50, Mobility: true, DockedAuto: false, EngagedAuto: false,
Emily Markova63c63f62023-03-29 20:57:35 -0700402 BalanceAttemptAuto: true, Docked: false, Engaged: false,
403 BalanceAttempt: false, CollectedBy: "eliza",
Emily Markova6b551e02023-02-18 17:37:40 -0800404 },
405 Stats2023{
Philipp Schrader8fdfadf2023-04-15 16:26:10 -0700406 PreScouting: false,
407 TeamNumber: "1742", MatchNumber: 5, SetNumber: 1,
Emily Markova6b551e02023-02-18 17:37:40 -0800408 CompLevel: "quals", StartingQuadrant: 4, LowCubesAuto: 1,
409 MiddleCubesAuto: 1, HighCubesAuto: 0, CubesDroppedAuto: 0,
410 LowConesAuto: 0, MiddleConesAuto: 2, HighConesAuto: 0,
411 ConesDroppedAuto: 1, LowCubes: 0, MiddleCubes: 1,
412 HighCubes: 2, CubesDropped: 1, LowCones: 0,
Filip Kujawa7a045e72023-04-13 08:41:09 -0700413 MiddleCones: 2, HighCones: 1, ConesDropped: 1, SuperchargedPieces: 0,
Filip Kujawa0b4b1e52023-04-15 14:05:40 -0700414 AvgCycle: 49, Mobility: false, DockedAuto: true, EngagedAuto: false,
Emily Markova46a69bf2023-03-22 20:45:52 -0700415 Docked: false, Engaged: false, CollectedBy: "isaac",
Emily Markova6b551e02023-02-18 17:37:40 -0800416 },
417 Stats2023{
Philipp Schrader8fdfadf2023-04-15 16:26:10 -0700418 PreScouting: false,
419 TeamNumber: "2454", MatchNumber: 5, SetNumber: 1,
Emily Markova6b551e02023-02-18 17:37:40 -0800420 CompLevel: "quals", StartingQuadrant: 1, LowCubesAuto: 0,
421 MiddleCubesAuto: 0, HighCubesAuto: 0, CubesDroppedAuto: 0,
422 LowConesAuto: 1, MiddleConesAuto: 1, HighConesAuto: 0,
423 ConesDroppedAuto: 1, LowCubes: 1, MiddleCubes: 2,
424 HighCubes: 0, CubesDropped: 0, LowCones: 1,
Filip Kujawa7a045e72023-04-13 08:41:09 -0700425 MiddleCones: 1, HighCones: 1, ConesDropped: 0, SuperchargedPieces: 0,
Filip Kujawa0b4b1e52023-04-15 14:05:40 -0700426 AvgCycle: 70, Mobility: false, DockedAuto: true, EngagedAuto: true,
Emily Markova63c63f62023-03-29 20:57:35 -0700427 BalanceAttemptAuto: false, Docked: false, Engaged: false,
428 BalanceAttempt: true, CollectedBy: "sam",
Emily Markova6b551e02023-02-18 17:37:40 -0800429 },
430 }
431
432 correct := []Stats2023{
433 Stats2023{
Philipp Schrader8fdfadf2023-04-15 16:26:10 -0700434 PreScouting: false,
435 TeamNumber: "3242", MatchNumber: 5, SetNumber: 1,
Emily Markova6b551e02023-02-18 17:37:40 -0800436 CompLevel: "quals", StartingQuadrant: 1, LowCubesAuto: 0,
437 MiddleCubesAuto: 2, HighCubesAuto: 0, CubesDroppedAuto: 1,
438 LowConesAuto: 1, MiddleConesAuto: 0, HighConesAuto: 0,
439 ConesDroppedAuto: 1, LowCubes: 0, MiddleCubes: 2,
440 HighCubes: 0, CubesDropped: 0, LowCones: 2,
Filip Kujawa7a045e72023-04-13 08:41:09 -0700441 MiddleCones: 0, HighCones: 1, ConesDropped: 1, SuperchargedPieces: 0,
Filip Kujawa0b4b1e52023-04-15 14:05:40 -0700442 AvgCycle: 50, Mobility: true, DockedAuto: false, EngagedAuto: false,
Emily Markova63c63f62023-03-29 20:57:35 -0700443 BalanceAttemptAuto: true, Docked: false, Engaged: false,
444 BalanceAttempt: false, CollectedBy: "eliza",
Emily Markova6b551e02023-02-18 17:37:40 -0800445 },
446 Stats2023{
Philipp Schrader8fdfadf2023-04-15 16:26:10 -0700447 PreScouting: false,
448 TeamNumber: "2454", MatchNumber: 5, SetNumber: 1,
Emily Markova6b551e02023-02-18 17:37:40 -0800449 CompLevel: "quals", StartingQuadrant: 1, LowCubesAuto: 0,
450 MiddleCubesAuto: 0, HighCubesAuto: 0, CubesDroppedAuto: 0,
451 LowConesAuto: 1, MiddleConesAuto: 1, HighConesAuto: 0,
452 ConesDroppedAuto: 1, LowCubes: 1, MiddleCubes: 2,
453 HighCubes: 0, CubesDropped: 0, LowCones: 1,
Filip Kujawa7a045e72023-04-13 08:41:09 -0700454 MiddleCones: 1, HighCones: 1, ConesDropped: 0, SuperchargedPieces: 0,
Filip Kujawa0b4b1e52023-04-15 14:05:40 -0700455 AvgCycle: 70, Mobility: false, DockedAuto: true, EngagedAuto: true,
Emily Markova63c63f62023-03-29 20:57:35 -0700456 BalanceAttemptAuto: false, Docked: false, Engaged: false,
457 BalanceAttempt: true, CollectedBy: "sam",
Emily Markova6b551e02023-02-18 17:37:40 -0800458 },
459 }
460
461 originalMatches := []TeamMatch{
462 TeamMatch{MatchNumber: 5, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700463 Alliance: "R", AlliancePosition: 1, TeamNumber: "1111"},
Emily Markova6b551e02023-02-18 17:37:40 -0800464 TeamMatch{MatchNumber: 5, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700465 Alliance: "B", AlliancePosition: 1, TeamNumber: "2314"},
Emily Markova6b551e02023-02-18 17:37:40 -0800466 TeamMatch{MatchNumber: 5, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700467 Alliance: "R", AlliancePosition: 3, TeamNumber: "1742"},
Emily Markova6b551e02023-02-18 17:37:40 -0800468 TeamMatch{MatchNumber: 5, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700469 Alliance: "B", AlliancePosition: 2, TeamNumber: "2454"},
Emily Markova6b551e02023-02-18 17:37:40 -0800470 TeamMatch{MatchNumber: 5, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700471 Alliance: "B", AlliancePosition: 3, TeamNumber: "3242"},
Emily Markova6b551e02023-02-18 17:37:40 -0800472 }
473
474 // Matches for which we want to delete the stats.
475 matches := []TeamMatch{
476 TeamMatch{MatchNumber: 5, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700477 TeamNumber: "1111"},
Emily Markova6b551e02023-02-18 17:37:40 -0800478 TeamMatch{MatchNumber: 5, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700479 TeamNumber: "2314"},
Emily Markova6b551e02023-02-18 17:37:40 -0800480 TeamMatch{MatchNumber: 5, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700481 TeamNumber: "1742"},
Emily Markova6b551e02023-02-18 17:37:40 -0800482 }
483
484 for _, match := range originalMatches {
485 err := fixture.db.AddToMatch(match)
486 check(t, err, "Failed to add match")
487 fmt.Println("Match has been added : ", match.TeamNumber)
488 }
489
490 for _, stat := range startingStats {
491 err := fixture.db.AddToStats2023(stat)
492 check(t, err, "Failed to add stat")
493 }
494
495 for _, match := range matches {
Emily Markovab8551572023-03-22 19:49:39 -0700496 err := fixture.db.DeleteFromStats(match.CompLevel, match.MatchNumber, match.SetNumber, match.TeamNumber)
Emily Markova6b551e02023-02-18 17:37:40 -0800497 check(t, err, "Failed to delete stat")
498 }
499
500 got, err := fixture.db.ReturnStats2023()
501 check(t, err, "Failed ReturnStats()")
502
503 if !reflect.DeepEqual(correct, got) {
504 t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
505 }
506}
507
Filip Kujawac1ded372023-05-27 14:33:43 -0700508func TestDeleteFromActions(t *testing.T) {
509 fixture := createDatabase(t)
510 defer fixture.TearDown()
511
512 startingActions := []Action{
513 Action{
514 TeamNumber: "1235", MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
515 CompletedAction: []byte(""), Timestamp: 0000, CollectedBy: "",
516 },
517 Action{
518 TeamNumber: "1236", MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
519 CompletedAction: []byte(""), Timestamp: 0321, CollectedBy: "",
520 },
521 Action{
522 TeamNumber: "1237", MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
523 CompletedAction: []byte(""), Timestamp: 0222, CollectedBy: "",
524 },
525 Action{
526 TeamNumber: "1238", MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
527 CompletedAction: []byte(""), Timestamp: 0110, CollectedBy: "",
528 },
529 Action{
530 TeamNumber: "1239", MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
531 CompletedAction: []byte(""), Timestamp: 0004, CollectedBy: "",
532 },
533 Action{
534 TeamNumber: "1233", MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
535 CompletedAction: []byte(""), Timestamp: 0005, CollectedBy: "",
536 },
537 }
538
539 correct := []Action{
540 Action{
541 TeamNumber: "1235", MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
542 CompletedAction: []byte(""), Timestamp: 0000, CollectedBy: "",
543 },
544 Action{
545 TeamNumber: "1236", MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
546 CompletedAction: []byte(""), Timestamp: 0321, CollectedBy: "",
547 },
548 Action{
549 TeamNumber: "1237", MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
550 CompletedAction: []byte(""), Timestamp: 0222, CollectedBy: "",
551 },
552 Action{
553 TeamNumber: "1238", MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
554 CompletedAction: []byte(""), Timestamp: 0110, CollectedBy: "",
555 },
556 Action{
557 TeamNumber: "1233", MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
558 CompletedAction: []byte(""), Timestamp: 0005, CollectedBy: "",
559 },
560 }
561
562 for _, action := range startingActions {
563 err := fixture.db.AddAction(action)
564 check(t, err, "Failed to add stat")
565 }
566
567 err := fixture.db.DeleteFromActions("quals", 94, 1, "1239")
568
569 got, err := fixture.db.ReturnActions()
570 check(t, err, "Failed ReturnActions()")
571
572 if !reflect.DeepEqual(correct, got) {
573 t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
574 }
575}
576
Milo Lina72e2002022-04-06 20:31:13 -0700577func TestQueryShiftDB(t *testing.T) {
578 fixture := createDatabase(t)
579 defer fixture.TearDown()
580
581 testDatabase := []Shift{
582 Shift{
583 MatchNumber: 1,
584 R1scouter: "Bob1", R2scouter: "Bob2", R3scouter: "Bob3", B1scouter: "Alice1", B2scouter: "Alice2", B3scouter: "Alice3",
585 },
586 Shift{
587 MatchNumber: 2,
588 R1scouter: "Bob1", R2scouter: "Bob2", R3scouter: "Bob3", B1scouter: "Alice1", B2scouter: "Alice2", B3scouter: "Alice3",
589 },
590 }
591
592 for i := 0; i < len(testDatabase); i++ {
593 err := fixture.db.AddToShift(testDatabase[i])
594 check(t, err, fmt.Sprint("Failed to add shift", i))
595 }
596
597 correct := []Shift{
598 Shift{
599 MatchNumber: 1,
600 R1scouter: "Bob1", R2scouter: "Bob2", R3scouter: "Bob3", B1scouter: "Alice1", B2scouter: "Alice2", B3scouter: "Alice3",
601 },
602 }
603
604 got, err := fixture.db.QueryAllShifts(1)
605 check(t, err, "Failed to query shift for match 1")
606
607 if !reflect.DeepEqual(correct, got) {
608 t.Fatalf("Got %#v,\nbut expected %#v.", got, correct)
609 }
610}
611
Emily Markovafaecfe12023-07-01 12:40:03 -0700612func TestQueryPitImages(t *testing.T) {
613 fixture := createDatabase(t)
614 defer fixture.TearDown()
615
616 testDatabase := []PitImage{
617 PitImage{
618 TeamNumber: "723", CheckSum: "8be8h9829hf98wp",
619 ImagePath: "image1.jpg", ImageData: []byte{14, 15, 32, 54},
620 },
621 PitImage{
622 TeamNumber: "237", CheckSum: "br78232b6r7iaa",
623 ImagePath: "bot.png", ImageData: []byte{32, 54, 23, 00},
624 },
625 PitImage{
626 TeamNumber: "125A", CheckSum: "b63c728bqiq8a73",
627 ImagePath: "file123.jpeg", ImageData: []byte{32, 05, 01, 28},
628 },
629 }
630
631 for i := 0; i < len(testDatabase); i++ {
632 err := fixture.db.AddPitImage(testDatabase[i])
633 check(t, err, fmt.Sprint("Failed to add pit image", i))
634 }
635
636 correct := []RequestedPitImage{
637 RequestedPitImage{
638 TeamNumber: "723", CheckSum: "8be8h9829hf98wp",
639 ImagePath: "image1.jpg",
640 },
641 }
642
643 got, err := fixture.db.QueryPitImages("723")
644 check(t, err, "Failed to query shift for team 723")
645
646 if !reflect.DeepEqual(correct, got) {
647 t.Fatalf("Got %#v,\nbut expected %#v.", got, correct)
648 }
649}
650
651func TestQueryPitImageByChecksum(t *testing.T) {
652 fixture := createDatabase(t)
653 defer fixture.TearDown()
654
655 testDatabase := []PitImage{
656 PitImage{
657 TeamNumber: "723", CheckSum: "8be8h9829hf98wp",
658 ImagePath: "image1.jpg", ImageData: []byte{05, 32, 00, 74, 28},
659 },
660 PitImage{
661 TeamNumber: "237", CheckSum: "br78232b6r7iaa",
662 ImagePath: "bot.png", ImageData: []byte{32, 54, 23, 00},
663 },
664 PitImage{
665 TeamNumber: "125A", CheckSum: "b63c728bqiq8a73",
666 ImagePath: "file123.jpeg", ImageData: []byte{32, 05, 01, 28},
667 },
668 }
669
670 for i := 0; i < len(testDatabase); i++ {
671 err := fixture.db.AddPitImage(testDatabase[i])
672 check(t, err, fmt.Sprint("Failed to add pit image", i))
673 }
674
675 correctPitImage := PitImage{
676 TeamNumber: "125A", CheckSum: "b63c728bqiq8a73",
677 ImagePath: "file123.jpeg", ImageData: []byte{32, 05, 01, 28},
678 }
679
680 got, err := fixture.db.QueryPitImageByChecksum("b63c728bqiq8a73")
681 check(t, err, "Failed to query shift for checksum 'b63c728bqiq8a73'")
682
683 if !reflect.DeepEqual(correctPitImage, got) {
684 t.Fatalf("Got %#v,\nbut expected %#v.", got, correctPitImage)
685 }
686}
687
Yash Chainanibcd1bb32022-04-02 17:10:24 -0700688func TestQueryRankingsDB(t *testing.T) {
689 fixture := createDatabase(t)
690 defer fixture.TearDown()
691
692 testDatabase := []Ranking{
693 Ranking{
Emily Markovae68b7632023-12-30 14:17:55 -0800694 TeamNumber: "123",
Yash Chainanibcd1bb32022-04-02 17:10:24 -0700695 Losses: 1, Wins: 7, Ties: 2,
696 Rank: 2, Dq: 0,
697 },
698 Ranking{
Emily Markovae68b7632023-12-30 14:17:55 -0800699 TeamNumber: "124",
Yash Chainanibcd1bb32022-04-02 17:10:24 -0700700 Losses: 3, Wins: 4, Ties: 0,
701 Rank: 4, Dq: 2,
702 },
703 Ranking{
Emily Markovae68b7632023-12-30 14:17:55 -0800704 TeamNumber: "125",
Yash Chainanibcd1bb32022-04-02 17:10:24 -0700705 Losses: 5, Wins: 2, Ties: 0,
706 Rank: 17, Dq: 0,
707 },
708 Ranking{
Emily Markovae68b7632023-12-30 14:17:55 -0800709 TeamNumber: "126",
Yash Chainanibcd1bb32022-04-02 17:10:24 -0700710 Losses: 0, Wins: 7, Ties: 0,
711 Rank: 5, Dq: 0,
712 },
713 }
714
715 for i := 0; i < len(testDatabase); i++ {
716 err := fixture.db.AddOrUpdateRankings(testDatabase[i])
717 check(t, err, fmt.Sprint("Failed to add rankings ", i))
718 }
719
720 correct := []Ranking{
721 Ranking{
Emily Markovae68b7632023-12-30 14:17:55 -0800722 TeamNumber: "126",
Yash Chainanibcd1bb32022-04-02 17:10:24 -0700723 Losses: 0, Wins: 7, Ties: 0,
724 Rank: 5, Dq: 0,
725 },
726 }
727
Emily Markovae68b7632023-12-30 14:17:55 -0800728 got, err := fixture.db.QueryRankings("126")
Yash Chainanibcd1bb32022-04-02 17:10:24 -0700729 check(t, err, "Failed QueryRankings()")
730
731 if !reflect.DeepEqual(correct, got) {
732 t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
733 }
734}
735
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800736func TestReturnMatchDB(t *testing.T) {
Philipp Schrader7365d322022-03-06 16:40:08 -0800737 fixture := createDatabase(t)
738 defer fixture.TearDown()
Philipp Schrader4953cc32022-02-25 18:09:02 -0800739
Emily Markovabf24c9e2023-02-08 20:31:11 -0800740 correct := []TeamMatch{
741 TeamMatch{
Emily Markovab8551572023-03-22 19:49:39 -0700742 MatchNumber: 8, SetNumber: 1, CompLevel: "quals", Alliance: "R", AlliancePosition: 1, TeamNumber: "6835"},
Emily Markovabf24c9e2023-02-08 20:31:11 -0800743 TeamMatch{
Emily Markovab8551572023-03-22 19:49:39 -0700744 MatchNumber: 8, SetNumber: 1, CompLevel: "quals", Alliance: "R", AlliancePosition: 2, TeamNumber: "4834"},
Emily Markovabf24c9e2023-02-08 20:31:11 -0800745 TeamMatch{
Emily Markovab8551572023-03-22 19:49:39 -0700746 MatchNumber: 9, SetNumber: 1, CompLevel: "quals", Alliance: "B", AlliancePosition: 3, TeamNumber: "9824"},
Emily Markovabf24c9e2023-02-08 20:31:11 -0800747 TeamMatch{
Emily Markovab8551572023-03-22 19:49:39 -0700748 MatchNumber: 7, SetNumber: 2, CompLevel: "quals", Alliance: "B", AlliancePosition: 1, TeamNumber: "3732"},
Emily Markovabf24c9e2023-02-08 20:31:11 -0800749 TeamMatch{
Emily Markovab8551572023-03-22 19:49:39 -0700750 MatchNumber: 8, SetNumber: 1, CompLevel: "quals", Alliance: "B", AlliancePosition: 1, TeamNumber: "3732"},
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800751 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800752
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800753 for i := 0; i < len(correct); i++ {
Philipp Schrader7365d322022-03-06 16:40:08 -0800754 err := fixture.db.AddToMatch(correct[i])
Philipp Schrader83fc2722022-03-10 21:59:20 -0800755 check(t, err, fmt.Sprint("Failed to add match", i))
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800756 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800757
Philipp Schrader7365d322022-03-06 16:40:08 -0800758 got, err := fixture.db.ReturnMatches()
Philipp Schrader83fc2722022-03-10 21:59:20 -0800759 check(t, err, "Failed ReturnMatches()")
760
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800761 if !reflect.DeepEqual(correct, got) {
762 t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
763 }
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800764}
765
Philipp Schraderfe583842022-04-08 19:47:07 -0700766func TestOverwriteNewMatchData(t *testing.T) {
767 fixture := createDatabase(t)
768 defer fixture.TearDown()
769
Emily Markovabf24c9e2023-02-08 20:31:11 -0800770 testDatabase := []TeamMatch{
771 TeamMatch{
Emily Markovab8551572023-03-22 19:49:39 -0700772 MatchNumber: 9, SetNumber: 1, CompLevel: "quals", Alliance: "B", AlliancePosition: 3, TeamNumber: "4464"},
Emily Markovabf24c9e2023-02-08 20:31:11 -0800773 TeamMatch{
Emily Markovab8551572023-03-22 19:49:39 -0700774 MatchNumber: 8, SetNumber: 1, CompLevel: "quals", Alliance: "R", AlliancePosition: 2, TeamNumber: "2352"},
Emily Markovabf24c9e2023-02-08 20:31:11 -0800775 TeamMatch{
Emily Markovab8551572023-03-22 19:49:39 -0700776 MatchNumber: 9, SetNumber: 1, CompLevel: "quals", Alliance: "B", AlliancePosition: 3, TeamNumber: "6321"},
Philipp Schraderfe583842022-04-08 19:47:07 -0700777 }
778
779 for i := 0; i < len(testDatabase); i++ {
780 err := fixture.db.AddToMatch(testDatabase[i])
781 check(t, err, fmt.Sprint("Failed to add match", i))
782 }
783
Emily Markovabf24c9e2023-02-08 20:31:11 -0800784 correct := []TeamMatch{
785 TeamMatch{
Emily Markovab8551572023-03-22 19:49:39 -0700786 MatchNumber: 8, SetNumber: 1, CompLevel: "quals", Alliance: "R", AlliancePosition: 2, TeamNumber: "2352"},
Emily Markovabf24c9e2023-02-08 20:31:11 -0800787 TeamMatch{
Emily Markovab8551572023-03-22 19:49:39 -0700788 MatchNumber: 9, SetNumber: 1, CompLevel: "quals", Alliance: "B", AlliancePosition: 3, TeamNumber: "6321"},
Philipp Schraderfe583842022-04-08 19:47:07 -0700789 }
790
791 got, err := fixture.db.ReturnMatches()
792 check(t, err, "Failed to get match list")
793
794 if !reflect.DeepEqual(correct, got) {
795 t.Fatalf("Got %#v,\nbut expected %#v.", got, correct)
796 }
797}
798
Milo Lina72e2002022-04-06 20:31:13 -0700799func TestAddReturnShiftDB(t *testing.T) {
800 fixture := createDatabase(t)
801 defer fixture.TearDown()
802
803 correct := []Shift{
804 Shift{
805 MatchNumber: 1,
806 R1scouter: "Bob1", R2scouter: "Bob2", R3scouter: "Bob3", B1scouter: "Alice1", B2scouter: "Alice2", B3scouter: "Alice3",
807 },
808 Shift{
809 MatchNumber: 2,
810 R1scouter: "Bob1", R2scouter: "Bob2", R3scouter: "Bob3", B1scouter: "Alice1", B2scouter: "Alice2", B3scouter: "Alice3",
811 },
812 }
813
814 for i := 0; i < len(correct); i++ {
815 err := fixture.db.AddToShift(correct[i])
816 check(t, err, fmt.Sprint("Failed to add shift", i))
817 }
818
819 got, err := fixture.db.ReturnAllShifts()
820 check(t, err, "Failed ReturnAllShifts()")
821
822 if !reflect.DeepEqual(correct, got) {
823 t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
824 }
825}
826
Yash Chainanibcd1bb32022-04-02 17:10:24 -0700827func TestReturnRankingsDB(t *testing.T) {
828 fixture := createDatabase(t)
829 defer fixture.TearDown()
830
831 correct := []Ranking{
832 Ranking{
Emily Markovae68b7632023-12-30 14:17:55 -0800833 TeamNumber: "123",
Yash Chainanibcd1bb32022-04-02 17:10:24 -0700834 Losses: 1, Wins: 7, Ties: 2,
835 Rank: 2, Dq: 0,
836 },
837 Ranking{
Emily Markovae68b7632023-12-30 14:17:55 -0800838 TeamNumber: "124",
Yash Chainanibcd1bb32022-04-02 17:10:24 -0700839 Losses: 3, Wins: 4, Ties: 0,
840 Rank: 4, Dq: 2,
841 },
842 Ranking{
Emily Markovae68b7632023-12-30 14:17:55 -0800843 TeamNumber: "125",
Yash Chainanibcd1bb32022-04-02 17:10:24 -0700844 Losses: 5, Wins: 2, Ties: 0,
845 Rank: 17, Dq: 0,
846 },
847 Ranking{
Emily Markovae68b7632023-12-30 14:17:55 -0800848 TeamNumber: "126",
Yash Chainanibcd1bb32022-04-02 17:10:24 -0700849 Losses: 0, Wins: 7, Ties: 0,
850 Rank: 5, Dq: 0,
851 },
852 }
853
854 for i := 0; i < len(correct); i++ {
855 err := fixture.db.AddOrUpdateRankings(correct[i])
856 check(t, err, fmt.Sprint("Failed to add rankings", i))
857 }
858
859 got, err := fixture.db.ReturnRankings()
860 check(t, err, "Failed ReturnRankings()")
861
862 if !reflect.DeepEqual(correct, got) {
863 t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
864 }
865}
866
Emily Markova290147d2023-03-03 22:40:06 -0800867func TestReturnStats2023DB(t *testing.T) {
868 fixture := createDatabase(t)
869 defer fixture.TearDown()
870
871 correct := []Stats2023{
872 Stats2023{
Philipp Schrader8fdfadf2023-04-15 16:26:10 -0700873 PreScouting: false,
874 TeamNumber: "2343", MatchNumber: 2, SetNumber: 1,
Emily Markova290147d2023-03-03 22:40:06 -0800875 CompLevel: "quals", StartingQuadrant: 1, LowCubesAuto: 1,
876 MiddleCubesAuto: 2, HighCubesAuto: 2, CubesDroppedAuto: 1,
877 LowConesAuto: 0, MiddleConesAuto: 0, HighConesAuto: 2,
878 ConesDroppedAuto: 1, LowCubes: 1, MiddleCubes: 2,
879 HighCubes: 1, CubesDropped: 0, LowCones: 2,
Filip Kujawa7a045e72023-04-13 08:41:09 -0700880 MiddleCones: 0, HighCones: 2, ConesDropped: 1, SuperchargedPieces: 0,
Filip Kujawa0b4b1e52023-04-15 14:05:40 -0700881 AvgCycle: 51, Mobility: true, DockedAuto: true, EngagedAuto: true,
Emily Markova63c63f62023-03-29 20:57:35 -0700882 BalanceAttemptAuto: false, Docked: false, Engaged: false,
883 BalanceAttempt: true, CollectedBy: "isaac",
Emily Markova290147d2023-03-03 22:40:06 -0800884 },
885 Stats2023{
Philipp Schrader8fdfadf2023-04-15 16:26:10 -0700886 PreScouting: false,
887 TeamNumber: "5443", MatchNumber: 2, SetNumber: 1,
Emily Markova290147d2023-03-03 22:40:06 -0800888 CompLevel: "quals", StartingQuadrant: 2, LowCubesAuto: 1,
889 MiddleCubesAuto: 1, HighCubesAuto: 0, CubesDroppedAuto: 1,
890 LowConesAuto: 1, MiddleConesAuto: 1, HighConesAuto: 0,
891 ConesDroppedAuto: 0, LowCubes: 2, MiddleCubes: 2,
892 HighCubes: 1, CubesDropped: 0, LowCones: 1,
Filip Kujawa7a045e72023-04-13 08:41:09 -0700893 MiddleCones: 0, HighCones: 2, ConesDropped: 1, SuperchargedPieces: 1,
Filip Kujawa0b4b1e52023-04-15 14:05:40 -0700894 AvgCycle: 39, Mobility: false, DockedAuto: false, EngagedAuto: false,
Emily Markova63c63f62023-03-29 20:57:35 -0700895 BalanceAttemptAuto: true, Docked: false, Engaged: false,
896 BalanceAttempt: false, CollectedBy: "jack",
Emily Markova290147d2023-03-03 22:40:06 -0800897 },
898 Stats2023{
Philipp Schrader8fdfadf2023-04-15 16:26:10 -0700899 PreScouting: false,
900 TeamNumber: "5436", MatchNumber: 2, SetNumber: 1,
Emily Markova290147d2023-03-03 22:40:06 -0800901 CompLevel: "quals", StartingQuadrant: 3, LowCubesAuto: 0,
902 MiddleCubesAuto: 2, HighCubesAuto: 0, CubesDroppedAuto: 1,
903 LowConesAuto: 2, MiddleConesAuto: 0, HighConesAuto: 0,
904 ConesDroppedAuto: 1, LowCubes: 2, MiddleCubes: 2,
905 HighCubes: 0, CubesDropped: 0, LowCones: 1,
Filip Kujawa7a045e72023-04-13 08:41:09 -0700906 MiddleCones: 2, HighCones: 1, ConesDropped: 1, SuperchargedPieces: 0,
Filip Kujawa0b4b1e52023-04-15 14:05:40 -0700907 AvgCycle: 45, Mobility: false, DockedAuto: true, EngagedAuto: false,
Emily Markova63c63f62023-03-29 20:57:35 -0700908 BalanceAttemptAuto: true, Docked: false, Engaged: false,
909 BalanceAttempt: true, CollectedBy: "martin",
Emily Markova290147d2023-03-03 22:40:06 -0800910 },
911 Stats2023{
Philipp Schrader8fdfadf2023-04-15 16:26:10 -0700912 PreScouting: false,
913 TeamNumber: "5643", MatchNumber: 2, SetNumber: 1,
Emily Markova290147d2023-03-03 22:40:06 -0800914 CompLevel: "quals", StartingQuadrant: 4, LowCubesAuto: 0,
915 MiddleCubesAuto: 0, HighCubesAuto: 1, CubesDroppedAuto: 1,
916 LowConesAuto: 2, MiddleConesAuto: 0, HighConesAuto: 0,
917 ConesDroppedAuto: 1, LowCubes: 2, MiddleCubes: 2,
918 HighCubes: 0, CubesDropped: 0, LowCones: 2,
Filip Kujawa7a045e72023-04-13 08:41:09 -0700919 MiddleCones: 2, HighCones: 1, ConesDropped: 1, SuperchargedPieces: 0,
Filip Kujawa0b4b1e52023-04-15 14:05:40 -0700920 AvgCycle: 34, Mobility: true, DockedAuto: true, EngagedAuto: false,
Emily Markova63c63f62023-03-29 20:57:35 -0700921 BalanceAttemptAuto: false, Docked: true, Engaged: false,
922 BalanceAttempt: false, CollectedBy: "unknown",
Emily Markova290147d2023-03-03 22:40:06 -0800923 },
924 }
925
926 matches := []TeamMatch{
927 TeamMatch{MatchNumber: 2, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700928 Alliance: "R", AlliancePosition: 1, TeamNumber: "2343"},
Emily Markova290147d2023-03-03 22:40:06 -0800929 TeamMatch{MatchNumber: 2, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700930 Alliance: "R", AlliancePosition: 2, TeamNumber: "5443"},
Emily Markova290147d2023-03-03 22:40:06 -0800931 TeamMatch{MatchNumber: 2, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700932 Alliance: "R", AlliancePosition: 3, TeamNumber: "5436"},
Emily Markova290147d2023-03-03 22:40:06 -0800933 TeamMatch{MatchNumber: 2, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700934 Alliance: "B", AlliancePosition: 1, TeamNumber: "5643"},
Emily Markova290147d2023-03-03 22:40:06 -0800935 }
936
937 for _, match := range matches {
938 err := fixture.db.AddToMatch(match)
939 check(t, err, "Failed to add match")
940 }
941
942 for i := 0; i < len(correct); i++ {
943 err := fixture.db.AddToStats2023(correct[i])
944 check(t, err, fmt.Sprint("Failed to add stats ", i))
945 }
946
947 got, err := fixture.db.ReturnStats2023()
948 check(t, err, "Failed ReturnStats()")
949
950 if !reflect.DeepEqual(correct, got) {
951 t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
952 }
953}
954
Sabina Leaver759090b2023-01-14 20:42:56 -0800955func TestReturnActionsDB(t *testing.T) {
956 fixture := createDatabase(t)
957 defer fixture.TearDown()
958 correct := []Action{
959 Action{
960 TeamNumber: "1235", MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
Philipp Schrader670a1c82023-05-17 19:42:43 -0700961 CompletedAction: []byte(""), Timestamp: 0000, CollectedBy: "",
Sabina Leaver759090b2023-01-14 20:42:56 -0800962 },
963 Action{
964 TeamNumber: "1236", MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
Philipp Schrader670a1c82023-05-17 19:42:43 -0700965 CompletedAction: []byte(""), Timestamp: 0321, CollectedBy: "",
Sabina Leaver759090b2023-01-14 20:42:56 -0800966 },
967 Action{
968 TeamNumber: "1237", MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
Philipp Schrader670a1c82023-05-17 19:42:43 -0700969 CompletedAction: []byte(""), Timestamp: 0222, CollectedBy: "",
Sabina Leaver759090b2023-01-14 20:42:56 -0800970 },
971 Action{
972 TeamNumber: "1238", MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
Philipp Schrader670a1c82023-05-17 19:42:43 -0700973 CompletedAction: []byte(""), Timestamp: 0110, CollectedBy: "",
Sabina Leaver759090b2023-01-14 20:42:56 -0800974 },
975 Action{
976 TeamNumber: "1239", MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
Philipp Schrader670a1c82023-05-17 19:42:43 -0700977 CompletedAction: []byte(""), Timestamp: 0004, CollectedBy: "",
Sabina Leaver759090b2023-01-14 20:42:56 -0800978 },
979 Action{
980 TeamNumber: "1233", MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
Philipp Schrader670a1c82023-05-17 19:42:43 -0700981 CompletedAction: []byte(""), Timestamp: 0005, CollectedBy: "",
Sabina Leaver759090b2023-01-14 20:42:56 -0800982 },
983 }
984
Emily Markovabf24c9e2023-02-08 20:31:11 -0800985 matches := []TeamMatch{
986 TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700987 Alliance: "R", AlliancePosition: 1, TeamNumber: "1235"},
Emily Markovabf24c9e2023-02-08 20:31:11 -0800988 TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700989 Alliance: "R", AlliancePosition: 2, TeamNumber: "1236"},
Emily Markovabf24c9e2023-02-08 20:31:11 -0800990 TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700991 Alliance: "R", AlliancePosition: 3, TeamNumber: "1237"},
Emily Markovabf24c9e2023-02-08 20:31:11 -0800992 TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700993 Alliance: "B", AlliancePosition: 1, TeamNumber: "1238"},
Emily Markovabf24c9e2023-02-08 20:31:11 -0800994 TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700995 Alliance: "B", AlliancePosition: 2, TeamNumber: "1239"},
Emily Markovabf24c9e2023-02-08 20:31:11 -0800996 TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
Emily Markovab8551572023-03-22 19:49:39 -0700997 Alliance: "B", AlliancePosition: 3, TeamNumber: "1233"},
Emily Markovabf24c9e2023-02-08 20:31:11 -0800998 }
999
1000 for _, match := range matches {
1001 err := fixture.db.AddToMatch(match)
1002 check(t, err, "Failed to add match")
1003 }
Sabina Leaver759090b2023-01-14 20:42:56 -08001004
1005 for i := 0; i < len(correct); i++ {
Emily Markovabf24c9e2023-02-08 20:31:11 -08001006 err := fixture.db.AddAction(correct[i])
Sabina Leaver759090b2023-01-14 20:42:56 -08001007 check(t, err, fmt.Sprint("Failed to add to actions ", i))
1008 }
1009
1010 got, err := fixture.db.ReturnActions()
1011 check(t, err, "Failed ReturnActions()")
1012
1013 if !reflect.DeepEqual(correct, got) {
1014 t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
1015 }
1016}
1017
Yash Chainanibcd1bb32022-04-02 17:10:24 -07001018func TestRankingsDbUpdate(t *testing.T) {
1019 fixture := createDatabase(t)
1020 defer fixture.TearDown()
1021
1022 testDatabase := []Ranking{
1023 Ranking{
Emily Markovae68b7632023-12-30 14:17:55 -08001024 TeamNumber: "123",
Yash Chainanibcd1bb32022-04-02 17:10:24 -07001025 Losses: 1, Wins: 7, Ties: 2,
1026 Rank: 2, Dq: 0,
1027 },
1028 Ranking{
Emily Markovae68b7632023-12-30 14:17:55 -08001029 TeamNumber: "124",
Yash Chainanibcd1bb32022-04-02 17:10:24 -07001030 Losses: 3, Wins: 4, Ties: 0,
1031 Rank: 4, Dq: 2,
1032 },
1033 Ranking{
Emily Markovae68b7632023-12-30 14:17:55 -08001034 TeamNumber: "125",
Yash Chainanibcd1bb32022-04-02 17:10:24 -07001035 Losses: 5, Wins: 2, Ties: 0,
1036 Rank: 17, Dq: 0,
1037 },
1038 Ranking{
Emily Markovae68b7632023-12-30 14:17:55 -08001039 TeamNumber: "126",
Yash Chainanibcd1bb32022-04-02 17:10:24 -07001040 Losses: 0, Wins: 7, Ties: 0,
1041 Rank: 5, Dq: 0,
1042 },
1043 Ranking{
Emily Markovae68b7632023-12-30 14:17:55 -08001044 TeamNumber: "125",
Yash Chainanibcd1bb32022-04-02 17:10:24 -07001045 Losses: 2, Wins: 4, Ties: 1,
1046 Rank: 5, Dq: 0,
1047 },
1048 }
1049
1050 for i := 0; i < len(testDatabase); i++ {
1051 err := fixture.db.AddOrUpdateRankings(testDatabase[i])
1052 check(t, err, fmt.Sprint("Failed to add rankings ", i))
1053 }
1054
1055 correct := []Ranking{
1056 Ranking{
Emily Markovae68b7632023-12-30 14:17:55 -08001057 TeamNumber: "125",
Yash Chainanibcd1bb32022-04-02 17:10:24 -07001058 Losses: 2, Wins: 4, Ties: 1,
1059 Rank: 5, Dq: 0,
1060 },
1061 }
1062
Emily Markovae68b7632023-12-30 14:17:55 -08001063 got, err := fixture.db.QueryRankings("125")
Yash Chainanibcd1bb32022-04-02 17:10:24 -07001064 check(t, err, "Failed QueryRankings()")
1065
Philipp Schradereecb8962022-06-01 21:02:42 -07001066 checkDeepEqual(t, correct, got)
Yash Chainanibcd1bb32022-04-02 17:10:24 -07001067}
1068
Alex Perry871eab92022-03-12 17:43:52 -08001069func TestNotes(t *testing.T) {
Philipp Schrader7365d322022-03-06 16:40:08 -08001070 fixture := createDatabase(t)
1071 defer fixture.TearDown()
Alex Perry871eab92022-03-12 17:43:52 -08001072
Philipp Schradereecb8962022-06-01 21:02:42 -07001073 expected := []string{"Note 1", "Note 3"}
Alex Perry871eab92022-03-12 17:43:52 -08001074
Emily Markovae68b7632023-12-30 14:17:55 -08001075 err := fixture.db.AddNotes(NotesData{TeamNumber: "1234", Notes: "Note 1", GoodDriving: true, BadDriving: false, SolidPlacing: false, SketchyPlacing: true, GoodDefense: false, BadDefense: true, EasilyDefended: true})
Alex Perry871eab92022-03-12 17:43:52 -08001076 check(t, err, "Failed to add Note")
Emily Markovae68b7632023-12-30 14:17:55 -08001077 err = fixture.db.AddNotes(NotesData{TeamNumber: "1235", Notes: "Note 2", GoodDriving: false, BadDriving: true, SolidPlacing: false, SketchyPlacing: true, GoodDefense: false, BadDefense: false, EasilyDefended: false})
Alex Perry871eab92022-03-12 17:43:52 -08001078 check(t, err, "Failed to add Note")
Emily Markovae68b7632023-12-30 14:17:55 -08001079 err = fixture.db.AddNotes(NotesData{TeamNumber: "1234", Notes: "Note 3", GoodDriving: true, BadDriving: false, SolidPlacing: false, SketchyPlacing: true, GoodDefense: true, BadDefense: false, EasilyDefended: true})
Alex Perry871eab92022-03-12 17:43:52 -08001080 check(t, err, "Failed to add Note")
1081
Emily Markovae68b7632023-12-30 14:17:55 -08001082 actual, err := fixture.db.QueryNotes("1234")
Alex Perry871eab92022-03-12 17:43:52 -08001083 check(t, err, "Failed to get Notes")
1084
1085 if !reflect.DeepEqual(expected, actual) {
1086 t.Errorf("Got %#v,\nbut expected %#v.", actual, expected)
1087 }
1088}
Filip Kujawa210a03b2022-11-24 14:41:11 -08001089
1090func TestDriverRanking(t *testing.T) {
1091 fixture := createDatabase(t)
1092 defer fixture.TearDown()
1093
1094 expected := []DriverRankingData{
Emily Markovae68b7632023-12-30 14:17:55 -08001095 {ID: 1, MatchNumber: 12, Rank1: "1234", Rank2: "1235", Rank3: "1236"},
1096 {ID: 2, MatchNumber: 12, Rank1: "1236", Rank2: "1235", Rank3: "1234"},
Filip Kujawa210a03b2022-11-24 14:41:11 -08001097 }
1098
1099 err := fixture.db.AddDriverRanking(
Emily Markovae68b7632023-12-30 14:17:55 -08001100 DriverRankingData{MatchNumber: 12, Rank1: "1234", Rank2: "1235", Rank3: "1236"},
Filip Kujawa210a03b2022-11-24 14:41:11 -08001101 )
1102 check(t, err, "Failed to add Driver Ranking")
1103 err = fixture.db.AddDriverRanking(
Emily Markovae68b7632023-12-30 14:17:55 -08001104 DriverRankingData{MatchNumber: 12, Rank1: "1236", Rank2: "1235", Rank3: "1234"},
Filip Kujawa210a03b2022-11-24 14:41:11 -08001105 )
1106 check(t, err, "Failed to add Driver Ranking")
1107 err = fixture.db.AddDriverRanking(
Emily Markovae68b7632023-12-30 14:17:55 -08001108 DriverRankingData{MatchNumber: 13, Rank1: "1235", Rank2: "1234", Rank3: "1236"},
Filip Kujawa210a03b2022-11-24 14:41:11 -08001109 )
1110 check(t, err, "Failed to add Driver Ranking")
1111
1112 actual, err := fixture.db.QueryDriverRanking(12)
1113 check(t, err, "Failed to get Driver Ranking")
1114
1115 if !reflect.DeepEqual(expected, actual) {
1116 t.Errorf("Got %#v,\nbut expected %#v.", actual, expected)
1117 }
1118}
Philipp Schradera8955fb2023-03-05 15:47:19 -08001119
1120func TestParsedDriverRanking(t *testing.T) {
1121 fixture := createDatabase(t)
1122 defer fixture.TearDown()
1123
1124 expected := []ParsedDriverRankingData{
1125 {TeamNumber: "1234", Score: 100},
1126 {TeamNumber: "1235", Score: 110},
1127 {TeamNumber: "1236", Score: 90},
1128 }
1129
1130 for i := range expected {
1131 err := fixture.db.AddParsedDriverRanking(expected[i])
1132 check(t, err, "Failed to add Parsed Driver Ranking")
1133 }
1134
1135 actual, err := fixture.db.ReturnAllParsedDriverRankings()
1136 check(t, err, "Failed to get Parsed Driver Ranking")
1137 if !reflect.DeepEqual(expected, actual) {
1138 t.Errorf("Got %#v,\nbut expected %#v.", actual, expected)
1139 }
1140
1141 // Now update one of the rankings and make sure we get the properly
1142 // merged result.
1143 err = fixture.db.AddParsedDriverRanking(ParsedDriverRankingData{
1144 TeamNumber: "1235", Score: 200,
1145 })
1146 check(t, err, "Failed to add Parsed Driver Ranking")
1147
1148 expected = []ParsedDriverRankingData{
1149 {TeamNumber: "1234", Score: 100},
1150 {TeamNumber: "1236", Score: 90},
1151 {TeamNumber: "1235", Score: 200},
1152 }
1153
1154 actual, err = fixture.db.ReturnAllParsedDriverRankings()
1155 check(t, err, "Failed to get Parsed Driver Ranking")
1156 if !reflect.DeepEqual(expected, actual) {
1157 t.Errorf("Got %#v,\nbut expected %#v.", actual, expected)
1158 }
1159}