blob: ec5e776a1ffcf3236e325ed8f6daa1cc75ad873c [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"
Philipp Schraderf117fae2022-04-08 20:14:57 -07009 "strings"
Sabina Leaverc5fd2772022-01-29 17:00:23 -080010 "testing"
Philipp Schrader7365d322022-03-06 16:40:08 -080011 "time"
Philipp Schradereecb8962022-06-01 21:02:42 -070012
13 "github.com/davecgh/go-spew/spew"
Sabina Leaverc5fd2772022-01-29 17:00:23 -080014)
15
Philipp Schrader83fc2722022-03-10 21:59:20 -080016// Shortcut for error checking. If the specified error is non-nil, print the
17// error message and exit the test.
18func check(t *testing.T, err error, message string) {
19 if err != nil {
20 t.Fatal(message, ":", err)
21 }
22}
23
Philipp Schrader7365d322022-03-06 16:40:08 -080024type dbFixture struct {
25 db *Database
26 server *exec.Cmd
27}
28
29func (fixture dbFixture) TearDown() {
30 fixture.db.Delete()
Philipp Schrader7365d322022-03-06 16:40:08 -080031 log.Println("Shutting down testdb")
32 fixture.server.Process.Signal(os.Interrupt)
33 fixture.server.Process.Wait()
34 log.Println("Successfully shut down testdb")
35}
36
37func createDatabase(t *testing.T) dbFixture {
38 var fixture dbFixture
39
40 log.Println("Starting up postgres.")
41 fixture.server = exec.Command("testdb_server/testdb_server_/testdb_server")
42 fixture.server.Stdout = os.Stdout
43 fixture.server.Stderr = os.Stderr
44 err := fixture.server.Start()
45 check(t, err, "Failed to run postgres")
46
47 // Wait until the server is ready. We cannot rely on the TCP socket
48 // alone because postgres creates the socket before it's actually ready
49 // to service requests.
50 for {
51 fixture.db, err = NewDatabase("test", "password", 5432)
52 if err == nil {
53 break
54 }
55 time.Sleep(50 * time.Millisecond)
56 }
57 log.Println("Connected to postgres.")
58
Philipp Schradereecb8962022-06-01 21:02:42 -070059 fixture.db.SetDebugLogLevel()
60
Philipp Schrader7365d322022-03-06 16:40:08 -080061 return fixture
Philipp Schrader4953cc32022-02-25 18:09:02 -080062}
63
Philipp Schradereecb8962022-06-01 21:02:42 -070064func checkDeepEqual(t *testing.T, expected interface{}, actual interface{}) {
65 if !reflect.DeepEqual(expected, actual) {
66 t.Fatalf(spew.Sprintf("Got %#v,\nbut expected %#v.", actual, expected))
67 }
68}
69
Philipp Schrader4953cc32022-02-25 18:09:02 -080070func TestAddToMatchDB(t *testing.T) {
Philipp Schrader7365d322022-03-06 16:40:08 -080071 fixture := createDatabase(t)
72 defer fixture.TearDown()
Philipp Schrader4953cc32022-02-25 18:09:02 -080073
Emily Markovabf24c9e2023-02-08 20:31:11 -080074 correct := []TeamMatch{
75 TeamMatch{
76 MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
77 Alliance: "R", AlliancePosition: 1, TeamNumber: 9999,
78 },
79 TeamMatch{
80 MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
81 Alliance: "R", AlliancePosition: 2, TeamNumber: 1000,
82 },
83 TeamMatch{
84 MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
85 Alliance: "R", AlliancePosition: 3, TeamNumber: 777,
86 },
87 TeamMatch{
88 MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
89 Alliance: "B", AlliancePosition: 1, TeamNumber: 0000,
90 },
91 TeamMatch{
92 MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
93 Alliance: "B", AlliancePosition: 2, TeamNumber: 4321,
94 },
95 TeamMatch{
96 MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
97 Alliance: "B", AlliancePosition: 3, TeamNumber: 1234,
Philipp Schrader83fc2722022-03-10 21:59:20 -080098 },
Sabina Leaverc5fd2772022-01-29 17:00:23 -080099 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800100
Emily Markovabf24c9e2023-02-08 20:31:11 -0800101 for _, match := range correct {
102 err := fixture.db.AddToMatch(match)
103 check(t, err, "Failed to add match data")
104 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800105
Philipp Schrader7365d322022-03-06 16:40:08 -0800106 got, err := fixture.db.ReturnMatches()
Philipp Schrader83fc2722022-03-10 21:59:20 -0800107 check(t, err, "Failed ReturnMatches()")
108
Philipp Schradereecb8962022-06-01 21:02:42 -0700109 checkDeepEqual(t, correct, got)
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800110}
111
Yash Chainanibcd1bb32022-04-02 17:10:24 -0700112func TestAddOrUpdateRankingsDB(t *testing.T) {
113 fixture := createDatabase(t)
114 defer fixture.TearDown()
115
116 correct := []Ranking{
117 Ranking{
118 TeamNumber: 123,
119 Losses: 1, Wins: 7, Ties: 0,
120 Rank: 2, Dq: 0,
121 },
122 Ranking{
123 TeamNumber: 125,
124 Losses: 2, Wins: 4, Ties: 0,
125 Rank: 2, Dq: 0,
126 },
127 }
128
129 for i := 0; i < len(correct); i++ {
130 err := fixture.db.AddOrUpdateRankings(correct[i])
131 check(t, err, "Failed to add ranking data")
132 }
133
134 got, err := fixture.db.ReturnRankings()
135 check(t, err, "Failed ReturnRankings()")
136
137 if !reflect.DeepEqual(correct, got) {
138 t.Fatalf("Got %#v,\nbut expected %#v.", got, correct)
139 }
140}
141
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800142func TestAddToStatsDB(t *testing.T) {
Philipp Schrader7365d322022-03-06 16:40:08 -0800143 fixture := createDatabase(t)
144 defer fixture.TearDown()
Philipp Schrader4953cc32022-02-25 18:09:02 -0800145
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800146 correct := []Stats{
Philipp Schrader83fc2722022-03-10 21:59:20 -0800147 Stats{
148 TeamNumber: 1236, MatchNumber: 7,
Philipp Schraderfee07e12022-03-17 22:19:47 -0700149 StartingQuadrant: 2,
150 AutoBallPickedUp: [5]bool{false, false, false, true, false},
151 ShotsMissed: 9, UpperGoalShots: 5, LowerGoalShots: 4,
Philipp Schrader83fc2722022-03-10 21:59:20 -0800152 ShotsMissedAuto: 3, UpperGoalAuto: 2, LowerGoalAuto: 1,
Philipp Schraderfa45d742022-03-18 19:29:05 -0700153 PlayedDefense: 2, DefenseReceivedScore: 0, Climbing: 3,
154 Comment: "this is a comment", CollectedBy: "josh",
Philipp Schrader83fc2722022-03-10 21:59:20 -0800155 },
156 Stats{
157 TeamNumber: 1001, MatchNumber: 7,
Philipp Schraderfee07e12022-03-17 22:19:47 -0700158 StartingQuadrant: 3,
159 AutoBallPickedUp: [5]bool{true, false, true, true, false},
160 ShotsMissed: 6, UpperGoalShots: 9, LowerGoalShots: 9,
Philipp Schrader83fc2722022-03-10 21:59:20 -0800161 ShotsMissedAuto: 0, UpperGoalAuto: 0, LowerGoalAuto: 0,
Philipp Schraderfa45d742022-03-18 19:29:05 -0700162 PlayedDefense: 0, DefenseReceivedScore: 1, Climbing: 0,
163 Comment: "another comment", CollectedBy: "rupert",
Philipp Schrader83fc2722022-03-10 21:59:20 -0800164 },
165 Stats{
166 TeamNumber: 777, MatchNumber: 7,
Philipp Schraderfee07e12022-03-17 22:19:47 -0700167 StartingQuadrant: 4,
168 AutoBallPickedUp: [5]bool{false, true, true, true, false},
169 ShotsMissed: 5, UpperGoalShots: 7, LowerGoalShots: 12,
Philipp Schrader83fc2722022-03-10 21:59:20 -0800170 ShotsMissedAuto: 0, UpperGoalAuto: 4, LowerGoalAuto: 0,
Philipp Schraderfa45d742022-03-18 19:29:05 -0700171 PlayedDefense: 0, DefenseReceivedScore: 3, Climbing: 0,
172 Comment: "and another", CollectedBy: "felix",
Philipp Schrader83fc2722022-03-10 21:59:20 -0800173 },
174 Stats{
175 TeamNumber: 1000, MatchNumber: 7,
Philipp Schraderfee07e12022-03-17 22:19:47 -0700176 StartingQuadrant: 1,
177 AutoBallPickedUp: [5]bool{false, false, false, false, false},
178 ShotsMissed: 12, UpperGoalShots: 6, LowerGoalShots: 10,
Philipp Schrader83fc2722022-03-10 21:59:20 -0800179 ShotsMissedAuto: 0, UpperGoalAuto: 7, LowerGoalAuto: 0,
Philipp Schraderfa45d742022-03-18 19:29:05 -0700180 PlayedDefense: 0, DefenseReceivedScore: 1, Climbing: 0,
181 Comment: "and another one", CollectedBy: "thea",
Philipp Schrader83fc2722022-03-10 21:59:20 -0800182 },
183 Stats{
184 TeamNumber: 4321, MatchNumber: 7,
Philipp Schraderfee07e12022-03-17 22:19:47 -0700185 StartingQuadrant: 2,
186 AutoBallPickedUp: [5]bool{true, false, false, false, false},
187 ShotsMissed: 14, UpperGoalShots: 12, LowerGoalShots: 3,
Philipp Schrader83fc2722022-03-10 21:59:20 -0800188 ShotsMissedAuto: 0, UpperGoalAuto: 7, LowerGoalAuto: 0,
Philipp Schraderfa45d742022-03-18 19:29:05 -0700189 PlayedDefense: 0, DefenseReceivedScore: 0, Climbing: 0,
190 Comment: "more comment", CollectedBy: "amy",
Philipp Schrader83fc2722022-03-10 21:59:20 -0800191 },
192 Stats{
193 TeamNumber: 1234, MatchNumber: 7,
Philipp Schraderfee07e12022-03-17 22:19:47 -0700194 StartingQuadrant: 3,
195 AutoBallPickedUp: [5]bool{false, false, false, false, true},
196 ShotsMissed: 3, UpperGoalShots: 4, LowerGoalShots: 0,
Philipp Schrader83fc2722022-03-10 21:59:20 -0800197 ShotsMissedAuto: 0, UpperGoalAuto: 9, LowerGoalAuto: 0,
Philipp Schraderfa45d742022-03-18 19:29:05 -0700198 PlayedDefense: 0, DefenseReceivedScore: 5, Climbing: 0,
199 Comment: "final comment", CollectedBy: "beth",
Philipp Schrader83fc2722022-03-10 21:59:20 -0800200 },
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800201 }
Emily Markovabf24c9e2023-02-08 20:31:11 -0800202 matches := []TeamMatch{
203 TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
204 Alliance: "R", AlliancePosition: 1, TeamNumber: 1236},
205 TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
206 Alliance: "R", AlliancePosition: 2, TeamNumber: 1001},
207 TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
208 Alliance: "R", AlliancePosition: 3, TeamNumber: 777},
209 TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
210 Alliance: "B", AlliancePosition: 1, TeamNumber: 1000},
211 TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
212 Alliance: "B", AlliancePosition: 2, TeamNumber: 4321},
213 TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
214 Alliance: "B", AlliancePosition: 3, TeamNumber: 1234},
215 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800216
Emily Markovabf24c9e2023-02-08 20:31:11 -0800217 for _, match := range matches {
218 err := fixture.db.AddToMatch(match)
219 check(t, err, "Failed to add match")
220 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800221
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800222 for i := 0; i < len(correct); i++ {
Emily Markovabf24c9e2023-02-08 20:31:11 -0800223 err := fixture.db.AddToStats(correct[i])
Philipp Schrader83fc2722022-03-10 21:59:20 -0800224 check(t, err, "Failed to add stats to DB")
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800225 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800226
Philipp Schrader7365d322022-03-06 16:40:08 -0800227 got, err := fixture.db.ReturnStats()
Philipp Schrader83fc2722022-03-10 21:59:20 -0800228 check(t, err, "Failed ReturnStats()")
229
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800230 if !reflect.DeepEqual(correct, got) {
231 t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
232 }
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800233}
234
Philipp Schraderf117fae2022-04-08 20:14:57 -0700235func TestAddDuplicateStats(t *testing.T) {
236 fixture := createDatabase(t)
237 defer fixture.TearDown()
238
239 stats := Stats{
240 TeamNumber: 1236, MatchNumber: 7,
Philipp Schradereecb8962022-06-01 21:02:42 -0700241 SetNumber: 1, CompLevel: "qual",
Philipp Schraderf117fae2022-04-08 20:14:57 -0700242 StartingQuadrant: 2,
243 AutoBallPickedUp: [5]bool{false, false, false, true, false},
244 ShotsMissed: 9, UpperGoalShots: 5, LowerGoalShots: 4,
245 ShotsMissedAuto: 3, UpperGoalAuto: 2, LowerGoalAuto: 1,
246 PlayedDefense: 2, DefenseReceivedScore: 0, Climbing: 3,
247 Comment: "this is a comment", CollectedBy: "josh",
248 }
249
Emily Markovabf24c9e2023-02-08 20:31:11 -0800250 matches := []TeamMatch{
251 TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
252 Alliance: "R", AlliancePosition: 1, TeamNumber: 1236},
253 TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
254 Alliance: "R", AlliancePosition: 2, TeamNumber: 1001},
255 TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
256 Alliance: "R", AlliancePosition: 3, TeamNumber: 777},
257 TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
258 Alliance: "B", AlliancePosition: 1, TeamNumber: 1000},
259 TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
260 Alliance: "B", AlliancePosition: 2, TeamNumber: 4321},
261 TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
262 Alliance: "B", AlliancePosition: 3, TeamNumber: 1234},
263 }
264
265 for _, match := range matches {
266 err := fixture.db.AddToMatch(match)
267 check(t, err, "Failed to add match")
268 }
Philipp Schraderf117fae2022-04-08 20:14:57 -0700269
270 // Add stats. This should succeed.
Emily Markovabf24c9e2023-02-08 20:31:11 -0800271 err := fixture.db.AddToStats(stats)
Philipp Schraderf117fae2022-04-08 20:14:57 -0700272 check(t, err, "Failed to add stats to DB")
273
274 // Try again. It should fail this time.
275 err = fixture.db.AddToStats(stats)
276 if err == nil {
277 t.Fatal("Failed to get error when adding duplicate stats.")
278 }
279 if !strings.Contains(err.Error(), "ERROR: duplicate key value violates unique constraint") {
280 t.Fatal("Expected error message to be complain about duplicate key value, but got ", err)
281 }
282}
283
Milo Lina72e2002022-04-06 20:31:13 -0700284func TestQueryShiftDB(t *testing.T) {
285 fixture := createDatabase(t)
286 defer fixture.TearDown()
287
288 testDatabase := []Shift{
289 Shift{
290 MatchNumber: 1,
291 R1scouter: "Bob1", R2scouter: "Bob2", R3scouter: "Bob3", B1scouter: "Alice1", B2scouter: "Alice2", B3scouter: "Alice3",
292 },
293 Shift{
294 MatchNumber: 2,
295 R1scouter: "Bob1", R2scouter: "Bob2", R3scouter: "Bob3", B1scouter: "Alice1", B2scouter: "Alice2", B3scouter: "Alice3",
296 },
297 }
298
299 for i := 0; i < len(testDatabase); i++ {
300 err := fixture.db.AddToShift(testDatabase[i])
301 check(t, err, fmt.Sprint("Failed to add shift", i))
302 }
303
304 correct := []Shift{
305 Shift{
306 MatchNumber: 1,
307 R1scouter: "Bob1", R2scouter: "Bob2", R3scouter: "Bob3", B1scouter: "Alice1", B2scouter: "Alice2", B3scouter: "Alice3",
308 },
309 }
310
311 got, err := fixture.db.QueryAllShifts(1)
312 check(t, err, "Failed to query shift for match 1")
313
314 if !reflect.DeepEqual(correct, got) {
315 t.Fatalf("Got %#v,\nbut expected %#v.", got, correct)
316 }
317}
318
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800319func TestQueryStatsDB(t *testing.T) {
Philipp Schrader7365d322022-03-06 16:40:08 -0800320 fixture := createDatabase(t)
321 defer fixture.TearDown()
Philipp Schrader4953cc32022-02-25 18:09:02 -0800322
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800323 testDatabase := []Stats{
Philipp Schrader83fc2722022-03-10 21:59:20 -0800324 Stats{
Philipp Schrader30b4a682022-04-16 14:36:17 -0700325 TeamNumber: 1235, MatchNumber: 94, SetNumber: 2, CompLevel: "quals",
Philipp Schraderfee07e12022-03-17 22:19:47 -0700326 StartingQuadrant: 1,
327 AutoBallPickedUp: [5]bool{false, false, false, false, false},
328 ShotsMissed: 2, UpperGoalShots: 2, LowerGoalShots: 2,
Philipp Schrader83fc2722022-03-10 21:59:20 -0800329 ShotsMissedAuto: 2, UpperGoalAuto: 2, LowerGoalAuto: 2,
Philipp Schraderfa45d742022-03-18 19:29:05 -0700330 PlayedDefense: 2, DefenseReceivedScore: 1, Climbing: 2},
Philipp Schrader83fc2722022-03-10 21:59:20 -0800331 Stats{
Philipp Schrader30b4a682022-04-16 14:36:17 -0700332 TeamNumber: 1234, MatchNumber: 94, SetNumber: 2, CompLevel: "quals",
Philipp Schraderfee07e12022-03-17 22:19:47 -0700333 StartingQuadrant: 2,
334 AutoBallPickedUp: [5]bool{false, false, false, false, true},
335 ShotsMissed: 4, UpperGoalShots: 4, LowerGoalShots: 4,
Philipp Schrader83fc2722022-03-10 21:59:20 -0800336 ShotsMissedAuto: 4, UpperGoalAuto: 4, LowerGoalAuto: 4,
Philipp Schraderfa45d742022-03-18 19:29:05 -0700337 PlayedDefense: 7, DefenseReceivedScore: 1, Climbing: 2,
Philipp Schrader83fc2722022-03-10 21:59:20 -0800338 },
339 Stats{
Philipp Schrader30b4a682022-04-16 14:36:17 -0700340 TeamNumber: 1233, MatchNumber: 94, SetNumber: 2, CompLevel: "quals",
Philipp Schraderfee07e12022-03-17 22:19:47 -0700341 StartingQuadrant: 3,
342 AutoBallPickedUp: [5]bool{false, false, false, false, false},
343 ShotsMissed: 3, UpperGoalShots: 3, LowerGoalShots: 3,
Philipp Schrader83fc2722022-03-10 21:59:20 -0800344 ShotsMissedAuto: 3, UpperGoalAuto: 3, LowerGoalAuto: 3,
Philipp Schraderfa45d742022-03-18 19:29:05 -0700345 PlayedDefense: 3, DefenseReceivedScore: 0, Climbing: 3,
Philipp Schrader83fc2722022-03-10 21:59:20 -0800346 },
347 Stats{
Philipp Schrader30b4a682022-04-16 14:36:17 -0700348 TeamNumber: 1232, MatchNumber: 94, SetNumber: 2, CompLevel: "quals",
Philipp Schraderfee07e12022-03-17 22:19:47 -0700349 StartingQuadrant: 2,
350 AutoBallPickedUp: [5]bool{true, false, false, false, true},
351 ShotsMissed: 5, UpperGoalShots: 5, LowerGoalShots: 5,
Philipp Schrader83fc2722022-03-10 21:59:20 -0800352 ShotsMissedAuto: 5, UpperGoalAuto: 5, LowerGoalAuto: 5,
Philipp Schraderfa45d742022-03-18 19:29:05 -0700353 PlayedDefense: 7, DefenseReceivedScore: 2, Climbing: 1,
Philipp Schrader83fc2722022-03-10 21:59:20 -0800354 },
355 Stats{
Philipp Schrader30b4a682022-04-16 14:36:17 -0700356 TeamNumber: 1231, MatchNumber: 94, SetNumber: 2, CompLevel: "quals",
Philipp Schraderfee07e12022-03-17 22:19:47 -0700357 StartingQuadrant: 3,
358 AutoBallPickedUp: [5]bool{false, false, true, false, false},
359 ShotsMissed: 6, UpperGoalShots: 6, LowerGoalShots: 6,
Philipp Schrader83fc2722022-03-10 21:59:20 -0800360 ShotsMissedAuto: 6, UpperGoalAuto: 6, LowerGoalAuto: 6,
Philipp Schraderfa45d742022-03-18 19:29:05 -0700361 PlayedDefense: 7, DefenseReceivedScore: 3, Climbing: 1,
Philipp Schrader83fc2722022-03-10 21:59:20 -0800362 },
363 Stats{
Philipp Schrader30b4a682022-04-16 14:36:17 -0700364 TeamNumber: 1239, MatchNumber: 94, SetNumber: 2, CompLevel: "quals",
Philipp Schraderfee07e12022-03-17 22:19:47 -0700365 StartingQuadrant: 4,
366 AutoBallPickedUp: [5]bool{false, true, true, false, false},
367 ShotsMissed: 7, UpperGoalShots: 7, LowerGoalShots: 7,
Philipp Schrader83fc2722022-03-10 21:59:20 -0800368 ShotsMissedAuto: 7, UpperGoalAuto: 7, LowerGoalAuto: 3,
Philipp Schraderfa45d742022-03-18 19:29:05 -0700369 PlayedDefense: 7, DefenseReceivedScore: 5, Climbing: 1,
Philipp Schrader83fc2722022-03-10 21:59:20 -0800370 },
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800371 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800372
Emily Markovabf24c9e2023-02-08 20:31:11 -0800373 matches := []TeamMatch{
374 TeamMatch{MatchNumber: 94, SetNumber: 2, CompLevel: "quals",
375 Alliance: "R", AlliancePosition: 1, TeamNumber: 1235},
376 TeamMatch{MatchNumber: 94, SetNumber: 2, CompLevel: "quals",
377 Alliance: "R", AlliancePosition: 2, TeamNumber: 1234},
378 TeamMatch{MatchNumber: 94, SetNumber: 2, CompLevel: "quals",
379 Alliance: "R", AlliancePosition: 3, TeamNumber: 1233},
380 TeamMatch{MatchNumber: 94, SetNumber: 2, CompLevel: "quals",
381 Alliance: "B", AlliancePosition: 1, TeamNumber: 1232},
382 TeamMatch{MatchNumber: 94, SetNumber: 2, CompLevel: "quals",
383 Alliance: "B", AlliancePosition: 2, TeamNumber: 1231},
384 TeamMatch{MatchNumber: 94, SetNumber: 2, CompLevel: "quals",
385 Alliance: "B", AlliancePosition: 3, TeamNumber: 1239},
386 }
387
388 for _, match := range matches {
389 err := fixture.db.AddToMatch(match)
390 check(t, err, "Failed to add match")
391 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800392
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800393 for i := 0; i < len(testDatabase); i++ {
Emily Markovabf24c9e2023-02-08 20:31:11 -0800394 err := fixture.db.AddToStats(testDatabase[i])
Philipp Schraderfee07e12022-03-17 22:19:47 -0700395 check(t, err, fmt.Sprint("Failed to add stats ", i))
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800396 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800397
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800398 correct := []Stats{
Philipp Schrader83fc2722022-03-10 21:59:20 -0800399 Stats{
Philipp Schrader30b4a682022-04-16 14:36:17 -0700400 TeamNumber: 1235, MatchNumber: 94, SetNumber: 2, CompLevel: "quals",
Philipp Schraderfee07e12022-03-17 22:19:47 -0700401 StartingQuadrant: 1,
402 AutoBallPickedUp: [5]bool{false, false, false, false, false},
403 ShotsMissed: 2, UpperGoalShots: 2, LowerGoalShots: 2,
Philipp Schrader83fc2722022-03-10 21:59:20 -0800404 ShotsMissedAuto: 2, UpperGoalAuto: 2, LowerGoalAuto: 2,
Philipp Schraderfa45d742022-03-18 19:29:05 -0700405 PlayedDefense: 2, DefenseReceivedScore: 1, Climbing: 2,
Philipp Schrader83fc2722022-03-10 21:59:20 -0800406 },
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800407 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800408
Philipp Schrader7365d322022-03-06 16:40:08 -0800409 got, err := fixture.db.QueryStats(1235)
Philipp Schrader83fc2722022-03-10 21:59:20 -0800410 check(t, err, "Failed QueryStats()")
411
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800412 if !reflect.DeepEqual(correct, got) {
413 t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
414 }
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800415}
416
Yash Chainanibcd1bb32022-04-02 17:10:24 -0700417func TestQueryRankingsDB(t *testing.T) {
418 fixture := createDatabase(t)
419 defer fixture.TearDown()
420
421 testDatabase := []Ranking{
422 Ranking{
423 TeamNumber: 123,
424 Losses: 1, Wins: 7, Ties: 2,
425 Rank: 2, Dq: 0,
426 },
427 Ranking{
428 TeamNumber: 124,
429 Losses: 3, Wins: 4, Ties: 0,
430 Rank: 4, Dq: 2,
431 },
432 Ranking{
433 TeamNumber: 125,
434 Losses: 5, Wins: 2, Ties: 0,
435 Rank: 17, Dq: 0,
436 },
437 Ranking{
438 TeamNumber: 126,
439 Losses: 0, Wins: 7, Ties: 0,
440 Rank: 5, Dq: 0,
441 },
442 }
443
444 for i := 0; i < len(testDatabase); i++ {
445 err := fixture.db.AddOrUpdateRankings(testDatabase[i])
446 check(t, err, fmt.Sprint("Failed to add rankings ", i))
447 }
448
449 correct := []Ranking{
450 Ranking{
451 TeamNumber: 126,
452 Losses: 0, Wins: 7, Ties: 0,
453 Rank: 5, Dq: 0,
454 },
455 }
456
457 got, err := fixture.db.QueryRankings(126)
458 check(t, err, "Failed QueryRankings()")
459
460 if !reflect.DeepEqual(correct, got) {
461 t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
462 }
463}
464
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800465func TestReturnMatchDB(t *testing.T) {
Philipp Schrader7365d322022-03-06 16:40:08 -0800466 fixture := createDatabase(t)
467 defer fixture.TearDown()
Philipp Schrader4953cc32022-02-25 18:09:02 -0800468
Emily Markovabf24c9e2023-02-08 20:31:11 -0800469 correct := []TeamMatch{
470 TeamMatch{
471 MatchNumber: 8, SetNumber: 1, CompLevel: "quals", Alliance: "R", AlliancePosition: 1, TeamNumber: 6835},
472 TeamMatch{
473 MatchNumber: 8, SetNumber: 1, CompLevel: "quals", Alliance: "R", AlliancePosition: 2, TeamNumber: 4834},
474 TeamMatch{
475 MatchNumber: 9, SetNumber: 1, CompLevel: "quals", Alliance: "B", AlliancePosition: 3, TeamNumber: 9824},
476 TeamMatch{
477 MatchNumber: 7, SetNumber: 2, CompLevel: "quals", Alliance: "B", AlliancePosition: 1, TeamNumber: 3732},
478 TeamMatch{
479 MatchNumber: 8, SetNumber: 1, CompLevel: "quals", Alliance: "B", AlliancePosition: 1, TeamNumber: 3732},
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800480 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800481
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800482 for i := 0; i < len(correct); i++ {
Philipp Schrader7365d322022-03-06 16:40:08 -0800483 err := fixture.db.AddToMatch(correct[i])
Philipp Schrader83fc2722022-03-10 21:59:20 -0800484 check(t, err, fmt.Sprint("Failed to add match", i))
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800485 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800486
Philipp Schrader7365d322022-03-06 16:40:08 -0800487 got, err := fixture.db.ReturnMatches()
Philipp Schrader83fc2722022-03-10 21:59:20 -0800488 check(t, err, "Failed ReturnMatches()")
489
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800490 if !reflect.DeepEqual(correct, got) {
491 t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
492 }
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800493}
494
Philipp Schraderfe583842022-04-08 19:47:07 -0700495func TestOverwriteNewMatchData(t *testing.T) {
496 fixture := createDatabase(t)
497 defer fixture.TearDown()
498
Emily Markovabf24c9e2023-02-08 20:31:11 -0800499 testDatabase := []TeamMatch{
500 TeamMatch{
501 MatchNumber: 9, SetNumber: 1, CompLevel: "quals", Alliance: "B", AlliancePosition: 3, TeamNumber: 4464},
502 TeamMatch{
503 MatchNumber: 8, SetNumber: 1, CompLevel: "quals", Alliance: "R", AlliancePosition: 2, TeamNumber: 2352},
504 TeamMatch{
505 MatchNumber: 9, SetNumber: 1, CompLevel: "quals", Alliance: "B", AlliancePosition: 3, TeamNumber: 6321},
Philipp Schraderfe583842022-04-08 19:47:07 -0700506 }
507
508 for i := 0; i < len(testDatabase); i++ {
509 err := fixture.db.AddToMatch(testDatabase[i])
510 check(t, err, fmt.Sprint("Failed to add match", i))
511 }
512
Emily Markovabf24c9e2023-02-08 20:31:11 -0800513 correct := []TeamMatch{
514 TeamMatch{
515 MatchNumber: 8, SetNumber: 1, CompLevel: "quals", Alliance: "R", AlliancePosition: 2, TeamNumber: 2352},
516 TeamMatch{
517 MatchNumber: 9, SetNumber: 1, CompLevel: "quals", Alliance: "B", AlliancePosition: 3, TeamNumber: 6321},
Philipp Schraderfe583842022-04-08 19:47:07 -0700518 }
519
520 got, err := fixture.db.ReturnMatches()
521 check(t, err, "Failed to get match list")
522
523 if !reflect.DeepEqual(correct, got) {
524 t.Fatalf("Got %#v,\nbut expected %#v.", got, correct)
525 }
526}
527
Milo Lina72e2002022-04-06 20:31:13 -0700528func TestAddReturnShiftDB(t *testing.T) {
529 fixture := createDatabase(t)
530 defer fixture.TearDown()
531
532 correct := []Shift{
533 Shift{
534 MatchNumber: 1,
535 R1scouter: "Bob1", R2scouter: "Bob2", R3scouter: "Bob3", B1scouter: "Alice1", B2scouter: "Alice2", B3scouter: "Alice3",
536 },
537 Shift{
538 MatchNumber: 2,
539 R1scouter: "Bob1", R2scouter: "Bob2", R3scouter: "Bob3", B1scouter: "Alice1", B2scouter: "Alice2", B3scouter: "Alice3",
540 },
541 }
542
543 for i := 0; i < len(correct); i++ {
544 err := fixture.db.AddToShift(correct[i])
545 check(t, err, fmt.Sprint("Failed to add shift", i))
546 }
547
548 got, err := fixture.db.ReturnAllShifts()
549 check(t, err, "Failed ReturnAllShifts()")
550
551 if !reflect.DeepEqual(correct, got) {
552 t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
553 }
554}
555
Yash Chainanibcd1bb32022-04-02 17:10:24 -0700556func TestReturnRankingsDB(t *testing.T) {
557 fixture := createDatabase(t)
558 defer fixture.TearDown()
559
560 correct := []Ranking{
561 Ranking{
562 TeamNumber: 123,
563 Losses: 1, Wins: 7, Ties: 2,
564 Rank: 2, Dq: 0,
565 },
566 Ranking{
567 TeamNumber: 124,
568 Losses: 3, Wins: 4, Ties: 0,
569 Rank: 4, Dq: 2,
570 },
571 Ranking{
572 TeamNumber: 125,
573 Losses: 5, Wins: 2, Ties: 0,
574 Rank: 17, Dq: 0,
575 },
576 Ranking{
577 TeamNumber: 126,
578 Losses: 0, Wins: 7, Ties: 0,
579 Rank: 5, Dq: 0,
580 },
581 }
582
583 for i := 0; i < len(correct); i++ {
584 err := fixture.db.AddOrUpdateRankings(correct[i])
585 check(t, err, fmt.Sprint("Failed to add rankings", i))
586 }
587
588 got, err := fixture.db.ReturnRankings()
589 check(t, err, "Failed ReturnRankings()")
590
591 if !reflect.DeepEqual(correct, got) {
592 t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
593 }
594}
595
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800596func TestReturnStatsDB(t *testing.T) {
Philipp Schrader7365d322022-03-06 16:40:08 -0800597 fixture := createDatabase(t)
598 defer fixture.TearDown()
Philipp Schrader4953cc32022-02-25 18:09:02 -0800599
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800600 correct := []Stats{
Philipp Schrader83fc2722022-03-10 21:59:20 -0800601 Stats{
Philipp Schrader30b4a682022-04-16 14:36:17 -0700602 TeamNumber: 1235, MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
Philipp Schraderfee07e12022-03-17 22:19:47 -0700603 StartingQuadrant: 1,
604 AutoBallPickedUp: [5]bool{false, false, false, false, false},
605 ShotsMissed: 2, UpperGoalShots: 2, LowerGoalShots: 2,
Philipp Schrader83fc2722022-03-10 21:59:20 -0800606 ShotsMissedAuto: 2, UpperGoalAuto: 2, LowerGoalAuto: 2,
Philipp Schraderfa45d742022-03-18 19:29:05 -0700607 PlayedDefense: 2, DefenseReceivedScore: 3, Climbing: 2},
Philipp Schrader83fc2722022-03-10 21:59:20 -0800608 Stats{
Philipp Schrader30b4a682022-04-16 14:36:17 -0700609 TeamNumber: 1236, MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
Philipp Schraderfee07e12022-03-17 22:19:47 -0700610 StartingQuadrant: 2,
611 AutoBallPickedUp: [5]bool{false, false, false, false, true},
612 ShotsMissed: 4, UpperGoalShots: 4, LowerGoalShots: 4,
Philipp Schrader83fc2722022-03-10 21:59:20 -0800613 ShotsMissedAuto: 4, UpperGoalAuto: 4, LowerGoalAuto: 4,
Philipp Schraderfa45d742022-03-18 19:29:05 -0700614 PlayedDefense: 7, DefenseReceivedScore: 1, Climbing: 2,
Philipp Schrader83fc2722022-03-10 21:59:20 -0800615 },
616 Stats{
Philipp Schrader30b4a682022-04-16 14:36:17 -0700617 TeamNumber: 1237, MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
Philipp Schraderfee07e12022-03-17 22:19:47 -0700618 StartingQuadrant: 3,
619 AutoBallPickedUp: [5]bool{false, false, false, false, false},
620 ShotsMissed: 3, UpperGoalShots: 3, LowerGoalShots: 3,
Philipp Schrader83fc2722022-03-10 21:59:20 -0800621 ShotsMissedAuto: 3, UpperGoalAuto: 3, LowerGoalAuto: 3,
Philipp Schraderfa45d742022-03-18 19:29:05 -0700622 PlayedDefense: 3, DefenseReceivedScore: 0, Climbing: 3,
Philipp Schrader83fc2722022-03-10 21:59:20 -0800623 },
624 Stats{
Philipp Schrader30b4a682022-04-16 14:36:17 -0700625 TeamNumber: 1238, MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
Philipp Schraderfee07e12022-03-17 22:19:47 -0700626 StartingQuadrant: 2,
627 AutoBallPickedUp: [5]bool{true, false, false, false, true},
628 ShotsMissed: 5, UpperGoalShots: 5, LowerGoalShots: 5,
Philipp Schrader83fc2722022-03-10 21:59:20 -0800629 ShotsMissedAuto: 5, UpperGoalAuto: 5, LowerGoalAuto: 5,
Philipp Schraderfa45d742022-03-18 19:29:05 -0700630 PlayedDefense: 7, DefenseReceivedScore: 4, Climbing: 1,
Philipp Schrader83fc2722022-03-10 21:59:20 -0800631 },
632 Stats{
Philipp Schrader30b4a682022-04-16 14:36:17 -0700633 TeamNumber: 1239, MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
Philipp Schraderfee07e12022-03-17 22:19:47 -0700634 StartingQuadrant: 3,
635 AutoBallPickedUp: [5]bool{false, false, true, false, false},
636 ShotsMissed: 6, UpperGoalShots: 6, LowerGoalShots: 6,
Philipp Schrader83fc2722022-03-10 21:59:20 -0800637 ShotsMissedAuto: 6, UpperGoalAuto: 6, LowerGoalAuto: 6,
Philipp Schraderfa45d742022-03-18 19:29:05 -0700638 PlayedDefense: 7, DefenseReceivedScore: 4, Climbing: 1,
Philipp Schrader83fc2722022-03-10 21:59:20 -0800639 },
640 Stats{
Philipp Schrader30b4a682022-04-16 14:36:17 -0700641 TeamNumber: 1233, MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
Philipp Schraderfee07e12022-03-17 22:19:47 -0700642 StartingQuadrant: 4,
643 AutoBallPickedUp: [5]bool{false, true, true, false, false},
644 ShotsMissed: 7, UpperGoalShots: 7, LowerGoalShots: 7,
Philipp Schrader83fc2722022-03-10 21:59:20 -0800645 ShotsMissedAuto: 7, UpperGoalAuto: 7, LowerGoalAuto: 3,
Philipp Schraderfa45d742022-03-18 19:29:05 -0700646 PlayedDefense: 7, DefenseReceivedScore: 1, Climbing: 1,
Philipp Schrader83fc2722022-03-10 21:59:20 -0800647 },
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800648 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800649
Emily Markovabf24c9e2023-02-08 20:31:11 -0800650 matches := []TeamMatch{
651 TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
652 Alliance: "R", AlliancePosition: 1, TeamNumber: 1235},
653 TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
654 Alliance: "R", AlliancePosition: 2, TeamNumber: 1236},
655 TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
656 Alliance: "R", AlliancePosition: 3, TeamNumber: 1237},
657 TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
658 Alliance: "B", AlliancePosition: 1, TeamNumber: 1238},
659 TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
660 Alliance: "B", AlliancePosition: 2, TeamNumber: 1239},
661 TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
662 Alliance: "B", AlliancePosition: 3, TeamNumber: 1233},
663 }
664
665 for _, match := range matches {
666 err := fixture.db.AddToMatch(match)
667 check(t, err, "Failed to add match")
668 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800669
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800670 for i := 0; i < len(correct); i++ {
Emily Markovabf24c9e2023-02-08 20:31:11 -0800671 err := fixture.db.AddToStats(correct[i])
Philipp Schraderfee07e12022-03-17 22:19:47 -0700672 check(t, err, fmt.Sprint("Failed to add stats ", i))
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800673 }
Philipp Schrader83fc2722022-03-10 21:59:20 -0800674
Philipp Schrader7365d322022-03-06 16:40:08 -0800675 got, err := fixture.db.ReturnStats()
Philipp Schrader83fc2722022-03-10 21:59:20 -0800676 check(t, err, "Failed ReturnStats()")
677
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800678 if !reflect.DeepEqual(correct, got) {
679 t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
680 }
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800681}
Alex Perry871eab92022-03-12 17:43:52 -0800682
Sabina Leaver759090b2023-01-14 20:42:56 -0800683func TestReturnActionsDB(t *testing.T) {
684 fixture := createDatabase(t)
685 defer fixture.TearDown()
686 correct := []Action{
687 Action{
688 TeamNumber: "1235", MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
689 CompletedAction: []byte(""), TimeStamp: 0000, CollectedBy: "",
690 },
691 Action{
692 TeamNumber: "1236", MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
693 CompletedAction: []byte(""), TimeStamp: 0321, CollectedBy: "",
694 },
695 Action{
696 TeamNumber: "1237", MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
697 CompletedAction: []byte(""), TimeStamp: 0222, CollectedBy: "",
698 },
699 Action{
700 TeamNumber: "1238", MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
701 CompletedAction: []byte(""), TimeStamp: 0110, CollectedBy: "",
702 },
703 Action{
704 TeamNumber: "1239", MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
705 CompletedAction: []byte(""), TimeStamp: 0004, CollectedBy: "",
706 },
707 Action{
708 TeamNumber: "1233", MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
709 CompletedAction: []byte(""), TimeStamp: 0004, CollectedBy: "",
710 },
711 }
712
Emily Markovabf24c9e2023-02-08 20:31:11 -0800713 matches := []TeamMatch{
714 TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
715 Alliance: "R", AlliancePosition: 1, TeamNumber: 1235},
716 TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
717 Alliance: "R", AlliancePosition: 2, TeamNumber: 1236},
718 TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
719 Alliance: "R", AlliancePosition: 3, TeamNumber: 1237},
720 TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
721 Alliance: "B", AlliancePosition: 1, TeamNumber: 1238},
722 TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
723 Alliance: "B", AlliancePosition: 2, TeamNumber: 1239},
724 TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
725 Alliance: "B", AlliancePosition: 3, TeamNumber: 1233},
726 }
727
728 for _, match := range matches {
729 err := fixture.db.AddToMatch(match)
730 check(t, err, "Failed to add match")
731 }
Sabina Leaver759090b2023-01-14 20:42:56 -0800732
733 for i := 0; i < len(correct); i++ {
Emily Markovabf24c9e2023-02-08 20:31:11 -0800734 err := fixture.db.AddAction(correct[i])
Sabina Leaver759090b2023-01-14 20:42:56 -0800735 check(t, err, fmt.Sprint("Failed to add to actions ", i))
736 }
737
738 got, err := fixture.db.ReturnActions()
739 check(t, err, "Failed ReturnActions()")
740
741 if !reflect.DeepEqual(correct, got) {
742 t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
743 }
744}
745
Yash Chainanibcd1bb32022-04-02 17:10:24 -0700746func TestRankingsDbUpdate(t *testing.T) {
747 fixture := createDatabase(t)
748 defer fixture.TearDown()
749
750 testDatabase := []Ranking{
751 Ranking{
752 TeamNumber: 123,
753 Losses: 1, Wins: 7, Ties: 2,
754 Rank: 2, Dq: 0,
755 },
756 Ranking{
757 TeamNumber: 124,
758 Losses: 3, Wins: 4, Ties: 0,
759 Rank: 4, Dq: 2,
760 },
761 Ranking{
762 TeamNumber: 125,
763 Losses: 5, Wins: 2, Ties: 0,
764 Rank: 17, Dq: 0,
765 },
766 Ranking{
767 TeamNumber: 126,
768 Losses: 0, Wins: 7, Ties: 0,
769 Rank: 5, Dq: 0,
770 },
771 Ranking{
772 TeamNumber: 125,
773 Losses: 2, Wins: 4, Ties: 1,
774 Rank: 5, Dq: 0,
775 },
776 }
777
778 for i := 0; i < len(testDatabase); i++ {
779 err := fixture.db.AddOrUpdateRankings(testDatabase[i])
780 check(t, err, fmt.Sprint("Failed to add rankings ", i))
781 }
782
783 correct := []Ranking{
784 Ranking{
785 TeamNumber: 125,
786 Losses: 2, Wins: 4, Ties: 1,
787 Rank: 5, Dq: 0,
788 },
789 }
790
791 got, err := fixture.db.QueryRankings(125)
792 check(t, err, "Failed QueryRankings()")
793
Philipp Schradereecb8962022-06-01 21:02:42 -0700794 checkDeepEqual(t, correct, got)
Yash Chainanibcd1bb32022-04-02 17:10:24 -0700795}
796
Alex Perry871eab92022-03-12 17:43:52 -0800797func TestNotes(t *testing.T) {
Philipp Schrader7365d322022-03-06 16:40:08 -0800798 fixture := createDatabase(t)
799 defer fixture.TearDown()
Alex Perry871eab92022-03-12 17:43:52 -0800800
Philipp Schradereecb8962022-06-01 21:02:42 -0700801 expected := []string{"Note 1", "Note 3"}
Alex Perry871eab92022-03-12 17:43:52 -0800802
Filip Kujawaf947cb42022-11-21 10:00:30 -0800803 err := fixture.db.AddNotes(NotesData{TeamNumber: 1234, Notes: "Note 1", GoodDriving: true, BadDriving: false, SketchyClimb: false, SolidClimb: true, GoodDefense: false, BadDefense: true})
Alex Perry871eab92022-03-12 17:43:52 -0800804 check(t, err, "Failed to add Note")
Filip Kujawaf947cb42022-11-21 10:00:30 -0800805 err = fixture.db.AddNotes(NotesData{TeamNumber: 1235, Notes: "Note 2", GoodDriving: false, BadDriving: true, SketchyClimb: false, SolidClimb: true, GoodDefense: false, BadDefense: false})
Alex Perry871eab92022-03-12 17:43:52 -0800806 check(t, err, "Failed to add Note")
Filip Kujawaf947cb42022-11-21 10:00:30 -0800807 err = fixture.db.AddNotes(NotesData{TeamNumber: 1234, Notes: "Note 3", GoodDriving: true, BadDriving: false, SketchyClimb: false, SolidClimb: true, GoodDefense: true, BadDefense: false})
Alex Perry871eab92022-03-12 17:43:52 -0800808 check(t, err, "Failed to add Note")
809
Philipp Schrader7365d322022-03-06 16:40:08 -0800810 actual, err := fixture.db.QueryNotes(1234)
Alex Perry871eab92022-03-12 17:43:52 -0800811 check(t, err, "Failed to get Notes")
812
813 if !reflect.DeepEqual(expected, actual) {
814 t.Errorf("Got %#v,\nbut expected %#v.", actual, expected)
815 }
816}
Filip Kujawa210a03b2022-11-24 14:41:11 -0800817
818func TestDriverRanking(t *testing.T) {
819 fixture := createDatabase(t)
820 defer fixture.TearDown()
821
822 expected := []DriverRankingData{
823 {ID: 1, MatchNumber: 12, Rank1: 1234, Rank2: 1235, Rank3: 1236},
824 {ID: 2, MatchNumber: 12, Rank1: 1236, Rank2: 1235, Rank3: 1234},
825 }
826
827 err := fixture.db.AddDriverRanking(
828 DriverRankingData{MatchNumber: 12, Rank1: 1234, Rank2: 1235, Rank3: 1236},
829 )
830 check(t, err, "Failed to add Driver Ranking")
831 err = fixture.db.AddDriverRanking(
832 DriverRankingData{MatchNumber: 12, Rank1: 1236, Rank2: 1235, Rank3: 1234},
833 )
834 check(t, err, "Failed to add Driver Ranking")
835 err = fixture.db.AddDriverRanking(
836 DriverRankingData{MatchNumber: 13, Rank1: 1235, Rank2: 1234, Rank3: 1236},
837 )
838 check(t, err, "Failed to add Driver Ranking")
839
840 actual, err := fixture.db.QueryDriverRanking(12)
841 check(t, err, "Failed to get Driver Ranking")
842
843 if !reflect.DeepEqual(expected, actual) {
844 t.Errorf("Got %#v,\nbut expected %#v.", actual, expected)
845 }
846}