Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 1 | package db |
| 2 | |
| 3 | import ( |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 4 | "fmt" |
Philipp Schrader | 7365d32 | 2022-03-06 16:40:08 -0800 | [diff] [blame] | 5 | "log" |
Philipp Schrader | 4953cc3 | 2022-02-25 18:09:02 -0800 | [diff] [blame] | 6 | "os" |
Philipp Schrader | 7365d32 | 2022-03-06 16:40:08 -0800 | [diff] [blame] | 7 | "os/exec" |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 8 | "reflect" |
Emily Markova | 6b551e0 | 2023-02-18 17:37:40 -0800 | [diff] [blame^] | 9 | "strconv" |
Philipp Schrader | f117fae | 2022-04-08 20:14:57 -0700 | [diff] [blame] | 10 | "strings" |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 11 | "testing" |
Philipp Schrader | 7365d32 | 2022-03-06 16:40:08 -0800 | [diff] [blame] | 12 | "time" |
Philipp Schrader | eecb896 | 2022-06-01 21:02:42 -0700 | [diff] [blame] | 13 | |
| 14 | "github.com/davecgh/go-spew/spew" |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 15 | ) |
| 16 | |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 17 | // Shortcut for error checking. If the specified error is non-nil, print the |
| 18 | // error message and exit the test. |
| 19 | func check(t *testing.T, err error, message string) { |
| 20 | if err != nil { |
| 21 | t.Fatal(message, ":", err) |
| 22 | } |
| 23 | } |
| 24 | |
Philipp Schrader | 7365d32 | 2022-03-06 16:40:08 -0800 | [diff] [blame] | 25 | type dbFixture struct { |
| 26 | db *Database |
| 27 | server *exec.Cmd |
| 28 | } |
| 29 | |
| 30 | func (fixture dbFixture) TearDown() { |
| 31 | fixture.db.Delete() |
Philipp Schrader | 7365d32 | 2022-03-06 16:40:08 -0800 | [diff] [blame] | 32 | log.Println("Shutting down testdb") |
| 33 | fixture.server.Process.Signal(os.Interrupt) |
| 34 | fixture.server.Process.Wait() |
| 35 | log.Println("Successfully shut down testdb") |
| 36 | } |
| 37 | |
| 38 | func createDatabase(t *testing.T) dbFixture { |
| 39 | var fixture dbFixture |
| 40 | |
| 41 | log.Println("Starting up postgres.") |
| 42 | fixture.server = exec.Command("testdb_server/testdb_server_/testdb_server") |
| 43 | fixture.server.Stdout = os.Stdout |
| 44 | fixture.server.Stderr = os.Stderr |
| 45 | err := fixture.server.Start() |
| 46 | check(t, err, "Failed to run postgres") |
| 47 | |
| 48 | // Wait until the server is ready. We cannot rely on the TCP socket |
| 49 | // alone because postgres creates the socket before it's actually ready |
| 50 | // to service requests. |
| 51 | for { |
| 52 | fixture.db, err = NewDatabase("test", "password", 5432) |
| 53 | if err == nil { |
| 54 | break |
| 55 | } |
| 56 | time.Sleep(50 * time.Millisecond) |
| 57 | } |
| 58 | log.Println("Connected to postgres.") |
| 59 | |
Philipp Schrader | eecb896 | 2022-06-01 21:02:42 -0700 | [diff] [blame] | 60 | fixture.db.SetDebugLogLevel() |
| 61 | |
Philipp Schrader | 7365d32 | 2022-03-06 16:40:08 -0800 | [diff] [blame] | 62 | return fixture |
Philipp Schrader | 4953cc3 | 2022-02-25 18:09:02 -0800 | [diff] [blame] | 63 | } |
| 64 | |
Philipp Schrader | eecb896 | 2022-06-01 21:02:42 -0700 | [diff] [blame] | 65 | func checkDeepEqual(t *testing.T, expected interface{}, actual interface{}) { |
| 66 | if !reflect.DeepEqual(expected, actual) { |
| 67 | t.Fatalf(spew.Sprintf("Got %#v,\nbut expected %#v.", actual, expected)) |
| 68 | } |
| 69 | } |
| 70 | |
Philipp Schrader | 4953cc3 | 2022-02-25 18:09:02 -0800 | [diff] [blame] | 71 | func TestAddToMatchDB(t *testing.T) { |
Philipp Schrader | 7365d32 | 2022-03-06 16:40:08 -0800 | [diff] [blame] | 72 | fixture := createDatabase(t) |
| 73 | defer fixture.TearDown() |
Philipp Schrader | 4953cc3 | 2022-02-25 18:09:02 -0800 | [diff] [blame] | 74 | |
Emily Markova | bf24c9e | 2023-02-08 20:31:11 -0800 | [diff] [blame] | 75 | correct := []TeamMatch{ |
| 76 | TeamMatch{ |
| 77 | MatchNumber: 7, SetNumber: 1, CompLevel: "quals", |
| 78 | Alliance: "R", AlliancePosition: 1, TeamNumber: 9999, |
| 79 | }, |
| 80 | TeamMatch{ |
| 81 | MatchNumber: 7, SetNumber: 1, CompLevel: "quals", |
| 82 | Alliance: "R", AlliancePosition: 2, TeamNumber: 1000, |
| 83 | }, |
| 84 | TeamMatch{ |
| 85 | MatchNumber: 7, SetNumber: 1, CompLevel: "quals", |
| 86 | Alliance: "R", AlliancePosition: 3, TeamNumber: 777, |
| 87 | }, |
| 88 | TeamMatch{ |
| 89 | MatchNumber: 7, SetNumber: 1, CompLevel: "quals", |
| 90 | Alliance: "B", AlliancePosition: 1, TeamNumber: 0000, |
| 91 | }, |
| 92 | TeamMatch{ |
| 93 | MatchNumber: 7, SetNumber: 1, CompLevel: "quals", |
| 94 | Alliance: "B", AlliancePosition: 2, TeamNumber: 4321, |
| 95 | }, |
| 96 | TeamMatch{ |
| 97 | MatchNumber: 7, SetNumber: 1, CompLevel: "quals", |
| 98 | Alliance: "B", AlliancePosition: 3, TeamNumber: 1234, |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 99 | }, |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 100 | } |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 101 | |
Emily Markova | bf24c9e | 2023-02-08 20:31:11 -0800 | [diff] [blame] | 102 | for _, match := range correct { |
| 103 | err := fixture.db.AddToMatch(match) |
| 104 | check(t, err, "Failed to add match data") |
| 105 | } |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 106 | |
Philipp Schrader | 7365d32 | 2022-03-06 16:40:08 -0800 | [diff] [blame] | 107 | got, err := fixture.db.ReturnMatches() |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 108 | check(t, err, "Failed ReturnMatches()") |
| 109 | |
Philipp Schrader | eecb896 | 2022-06-01 21:02:42 -0700 | [diff] [blame] | 110 | checkDeepEqual(t, correct, got) |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 111 | } |
| 112 | |
Yash Chainani | bcd1bb3 | 2022-04-02 17:10:24 -0700 | [diff] [blame] | 113 | func TestAddOrUpdateRankingsDB(t *testing.T) { |
| 114 | fixture := createDatabase(t) |
| 115 | defer fixture.TearDown() |
| 116 | |
| 117 | correct := []Ranking{ |
| 118 | Ranking{ |
| 119 | TeamNumber: 123, |
| 120 | Losses: 1, Wins: 7, Ties: 0, |
| 121 | Rank: 2, Dq: 0, |
| 122 | }, |
| 123 | Ranking{ |
| 124 | TeamNumber: 125, |
| 125 | Losses: 2, Wins: 4, Ties: 0, |
| 126 | Rank: 2, Dq: 0, |
| 127 | }, |
| 128 | } |
| 129 | |
| 130 | for i := 0; i < len(correct); i++ { |
| 131 | err := fixture.db.AddOrUpdateRankings(correct[i]) |
| 132 | check(t, err, "Failed to add ranking data") |
| 133 | } |
| 134 | |
| 135 | got, err := fixture.db.ReturnRankings() |
| 136 | check(t, err, "Failed ReturnRankings()") |
| 137 | |
| 138 | if !reflect.DeepEqual(correct, got) { |
| 139 | t.Fatalf("Got %#v,\nbut expected %#v.", got, correct) |
| 140 | } |
| 141 | } |
| 142 | |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 143 | func TestAddToStatsDB(t *testing.T) { |
Philipp Schrader | 7365d32 | 2022-03-06 16:40:08 -0800 | [diff] [blame] | 144 | fixture := createDatabase(t) |
| 145 | defer fixture.TearDown() |
Philipp Schrader | 4953cc3 | 2022-02-25 18:09:02 -0800 | [diff] [blame] | 146 | |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 147 | correct := []Stats{ |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 148 | Stats{ |
| 149 | TeamNumber: 1236, MatchNumber: 7, |
Philipp Schrader | fee07e1 | 2022-03-17 22:19:47 -0700 | [diff] [blame] | 150 | StartingQuadrant: 2, |
| 151 | AutoBallPickedUp: [5]bool{false, false, false, true, false}, |
| 152 | ShotsMissed: 9, UpperGoalShots: 5, LowerGoalShots: 4, |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 153 | ShotsMissedAuto: 3, UpperGoalAuto: 2, LowerGoalAuto: 1, |
Philipp Schrader | fa45d74 | 2022-03-18 19:29:05 -0700 | [diff] [blame] | 154 | PlayedDefense: 2, DefenseReceivedScore: 0, Climbing: 3, |
| 155 | Comment: "this is a comment", CollectedBy: "josh", |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 156 | }, |
| 157 | Stats{ |
| 158 | TeamNumber: 1001, MatchNumber: 7, |
Philipp Schrader | fee07e1 | 2022-03-17 22:19:47 -0700 | [diff] [blame] | 159 | StartingQuadrant: 3, |
| 160 | AutoBallPickedUp: [5]bool{true, false, true, true, false}, |
| 161 | ShotsMissed: 6, UpperGoalShots: 9, LowerGoalShots: 9, |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 162 | ShotsMissedAuto: 0, UpperGoalAuto: 0, LowerGoalAuto: 0, |
Philipp Schrader | fa45d74 | 2022-03-18 19:29:05 -0700 | [diff] [blame] | 163 | PlayedDefense: 0, DefenseReceivedScore: 1, Climbing: 0, |
| 164 | Comment: "another comment", CollectedBy: "rupert", |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 165 | }, |
| 166 | Stats{ |
| 167 | TeamNumber: 777, MatchNumber: 7, |
Philipp Schrader | fee07e1 | 2022-03-17 22:19:47 -0700 | [diff] [blame] | 168 | StartingQuadrant: 4, |
| 169 | AutoBallPickedUp: [5]bool{false, true, true, true, false}, |
| 170 | ShotsMissed: 5, UpperGoalShots: 7, LowerGoalShots: 12, |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 171 | ShotsMissedAuto: 0, UpperGoalAuto: 4, LowerGoalAuto: 0, |
Philipp Schrader | fa45d74 | 2022-03-18 19:29:05 -0700 | [diff] [blame] | 172 | PlayedDefense: 0, DefenseReceivedScore: 3, Climbing: 0, |
| 173 | Comment: "and another", CollectedBy: "felix", |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 174 | }, |
| 175 | Stats{ |
| 176 | TeamNumber: 1000, MatchNumber: 7, |
Philipp Schrader | fee07e1 | 2022-03-17 22:19:47 -0700 | [diff] [blame] | 177 | StartingQuadrant: 1, |
| 178 | AutoBallPickedUp: [5]bool{false, false, false, false, false}, |
| 179 | ShotsMissed: 12, UpperGoalShots: 6, LowerGoalShots: 10, |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 180 | ShotsMissedAuto: 0, UpperGoalAuto: 7, LowerGoalAuto: 0, |
Philipp Schrader | fa45d74 | 2022-03-18 19:29:05 -0700 | [diff] [blame] | 181 | PlayedDefense: 0, DefenseReceivedScore: 1, Climbing: 0, |
| 182 | Comment: "and another one", CollectedBy: "thea", |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 183 | }, |
| 184 | Stats{ |
| 185 | TeamNumber: 4321, MatchNumber: 7, |
Philipp Schrader | fee07e1 | 2022-03-17 22:19:47 -0700 | [diff] [blame] | 186 | StartingQuadrant: 2, |
| 187 | AutoBallPickedUp: [5]bool{true, false, false, false, false}, |
| 188 | ShotsMissed: 14, UpperGoalShots: 12, LowerGoalShots: 3, |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 189 | ShotsMissedAuto: 0, UpperGoalAuto: 7, LowerGoalAuto: 0, |
Philipp Schrader | fa45d74 | 2022-03-18 19:29:05 -0700 | [diff] [blame] | 190 | PlayedDefense: 0, DefenseReceivedScore: 0, Climbing: 0, |
| 191 | Comment: "more comment", CollectedBy: "amy", |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 192 | }, |
| 193 | Stats{ |
| 194 | TeamNumber: 1234, MatchNumber: 7, |
Philipp Schrader | fee07e1 | 2022-03-17 22:19:47 -0700 | [diff] [blame] | 195 | StartingQuadrant: 3, |
| 196 | AutoBallPickedUp: [5]bool{false, false, false, false, true}, |
| 197 | ShotsMissed: 3, UpperGoalShots: 4, LowerGoalShots: 0, |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 198 | ShotsMissedAuto: 0, UpperGoalAuto: 9, LowerGoalAuto: 0, |
Philipp Schrader | fa45d74 | 2022-03-18 19:29:05 -0700 | [diff] [blame] | 199 | PlayedDefense: 0, DefenseReceivedScore: 5, Climbing: 0, |
| 200 | Comment: "final comment", CollectedBy: "beth", |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 201 | }, |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 202 | } |
Emily Markova | bf24c9e | 2023-02-08 20:31:11 -0800 | [diff] [blame] | 203 | matches := []TeamMatch{ |
| 204 | TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals", |
| 205 | Alliance: "R", AlliancePosition: 1, TeamNumber: 1236}, |
| 206 | TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals", |
| 207 | Alliance: "R", AlliancePosition: 2, TeamNumber: 1001}, |
| 208 | TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals", |
| 209 | Alliance: "R", AlliancePosition: 3, TeamNumber: 777}, |
| 210 | TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals", |
| 211 | Alliance: "B", AlliancePosition: 1, TeamNumber: 1000}, |
| 212 | TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals", |
| 213 | Alliance: "B", AlliancePosition: 2, TeamNumber: 4321}, |
| 214 | TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals", |
| 215 | Alliance: "B", AlliancePosition: 3, TeamNumber: 1234}, |
| 216 | } |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 217 | |
Emily Markova | bf24c9e | 2023-02-08 20:31:11 -0800 | [diff] [blame] | 218 | for _, match := range matches { |
| 219 | err := fixture.db.AddToMatch(match) |
| 220 | check(t, err, "Failed to add match") |
| 221 | } |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 222 | |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 223 | for i := 0; i < len(correct); i++ { |
Emily Markova | bf24c9e | 2023-02-08 20:31:11 -0800 | [diff] [blame] | 224 | err := fixture.db.AddToStats(correct[i]) |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 225 | check(t, err, "Failed to add stats to DB") |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 226 | } |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 227 | |
Philipp Schrader | 7365d32 | 2022-03-06 16:40:08 -0800 | [diff] [blame] | 228 | got, err := fixture.db.ReturnStats() |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 229 | check(t, err, "Failed ReturnStats()") |
| 230 | |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 231 | if !reflect.DeepEqual(correct, got) { |
| 232 | t.Errorf("Got %#v,\nbut expected %#v.", got, correct) |
| 233 | } |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 234 | } |
| 235 | |
Philipp Schrader | f117fae | 2022-04-08 20:14:57 -0700 | [diff] [blame] | 236 | func TestAddDuplicateStats(t *testing.T) { |
| 237 | fixture := createDatabase(t) |
| 238 | defer fixture.TearDown() |
| 239 | |
| 240 | stats := Stats{ |
| 241 | TeamNumber: 1236, MatchNumber: 7, |
Philipp Schrader | eecb896 | 2022-06-01 21:02:42 -0700 | [diff] [blame] | 242 | SetNumber: 1, CompLevel: "qual", |
Philipp Schrader | f117fae | 2022-04-08 20:14:57 -0700 | [diff] [blame] | 243 | StartingQuadrant: 2, |
| 244 | AutoBallPickedUp: [5]bool{false, false, false, true, false}, |
| 245 | ShotsMissed: 9, UpperGoalShots: 5, LowerGoalShots: 4, |
| 246 | ShotsMissedAuto: 3, UpperGoalAuto: 2, LowerGoalAuto: 1, |
| 247 | PlayedDefense: 2, DefenseReceivedScore: 0, Climbing: 3, |
| 248 | Comment: "this is a comment", CollectedBy: "josh", |
| 249 | } |
| 250 | |
Emily Markova | bf24c9e | 2023-02-08 20:31:11 -0800 | [diff] [blame] | 251 | matches := []TeamMatch{ |
| 252 | TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals", |
| 253 | Alliance: "R", AlliancePosition: 1, TeamNumber: 1236}, |
| 254 | TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals", |
| 255 | Alliance: "R", AlliancePosition: 2, TeamNumber: 1001}, |
| 256 | TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals", |
| 257 | Alliance: "R", AlliancePosition: 3, TeamNumber: 777}, |
| 258 | TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals", |
| 259 | Alliance: "B", AlliancePosition: 1, TeamNumber: 1000}, |
| 260 | TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals", |
| 261 | Alliance: "B", AlliancePosition: 2, TeamNumber: 4321}, |
| 262 | TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals", |
| 263 | Alliance: "B", AlliancePosition: 3, TeamNumber: 1234}, |
| 264 | } |
| 265 | |
| 266 | for _, match := range matches { |
| 267 | err := fixture.db.AddToMatch(match) |
| 268 | check(t, err, "Failed to add match") |
| 269 | } |
Philipp Schrader | f117fae | 2022-04-08 20:14:57 -0700 | [diff] [blame] | 270 | |
| 271 | // Add stats. This should succeed. |
Emily Markova | bf24c9e | 2023-02-08 20:31:11 -0800 | [diff] [blame] | 272 | err := fixture.db.AddToStats(stats) |
Philipp Schrader | f117fae | 2022-04-08 20:14:57 -0700 | [diff] [blame] | 273 | check(t, err, "Failed to add stats to DB") |
| 274 | |
| 275 | // Try again. It should fail this time. |
| 276 | err = fixture.db.AddToStats(stats) |
| 277 | if err == nil { |
| 278 | t.Fatal("Failed to get error when adding duplicate stats.") |
| 279 | } |
| 280 | if !strings.Contains(err.Error(), "ERROR: duplicate key value violates unique constraint") { |
| 281 | t.Fatal("Expected error message to be complain about duplicate key value, but got ", err) |
| 282 | } |
| 283 | } |
| 284 | |
Emily Markova | 6b551e0 | 2023-02-18 17:37:40 -0800 | [diff] [blame^] | 285 | func TestDeleteFromStats(t *testing.T) { |
| 286 | fixture := createDatabase(t) |
| 287 | defer fixture.TearDown() |
| 288 | |
| 289 | startingStats := []Stats2023{ |
| 290 | Stats2023{ |
| 291 | TeamNumber: "1111", MatchNumber: 5, SetNumber: 1, |
| 292 | CompLevel: "quals", StartingQuadrant: 2, LowCubesAuto: 2, |
| 293 | MiddleCubesAuto: 0, HighCubesAuto: 1, CubesDroppedAuto: 1, |
| 294 | LowConesAuto: 0, MiddleConesAuto: 2, HighConesAuto: 0, |
| 295 | ConesDroppedAuto: 1, LowCubes: 0, MiddleCubes: 1, |
| 296 | HighCubes: 2, CubesDropped: 1, LowCones: 1, |
| 297 | MiddleCones: 0, HighCones: 1, ConesDropped: 2, |
| 298 | AvgCycle: 58, CollectedBy: "unknown", |
| 299 | }, |
| 300 | Stats2023{ |
| 301 | TeamNumber: "2314", MatchNumber: 5, SetNumber: 1, |
| 302 | CompLevel: "quals", StartingQuadrant: 3, LowCubesAuto: 1, |
| 303 | MiddleCubesAuto: 0, HighCubesAuto: 1, CubesDroppedAuto: 1, |
| 304 | LowConesAuto: 0, MiddleConesAuto: 1, HighConesAuto: 0, |
| 305 | ConesDroppedAuto: 0, LowCubes: 2, MiddleCubes: 0, |
| 306 | HighCubes: 1, CubesDropped: 0, LowCones: 0, |
| 307 | MiddleCones: 2, HighCones: 1, ConesDropped: 0, |
| 308 | AvgCycle: 34, CollectedBy: "simon", |
| 309 | }, |
| 310 | Stats2023{ |
| 311 | TeamNumber: "3242", MatchNumber: 5, SetNumber: 1, |
| 312 | CompLevel: "quals", StartingQuadrant: 1, LowCubesAuto: 0, |
| 313 | MiddleCubesAuto: 2, HighCubesAuto: 0, CubesDroppedAuto: 1, |
| 314 | LowConesAuto: 1, MiddleConesAuto: 0, HighConesAuto: 0, |
| 315 | ConesDroppedAuto: 1, LowCubes: 0, MiddleCubes: 2, |
| 316 | HighCubes: 0, CubesDropped: 0, LowCones: 2, |
| 317 | MiddleCones: 0, HighCones: 1, ConesDropped: 1, |
| 318 | AvgCycle: 50, CollectedBy: "eliza", |
| 319 | }, |
| 320 | Stats2023{ |
| 321 | TeamNumber: "1742", MatchNumber: 5, SetNumber: 1, |
| 322 | CompLevel: "quals", StartingQuadrant: 4, LowCubesAuto: 1, |
| 323 | MiddleCubesAuto: 1, HighCubesAuto: 0, CubesDroppedAuto: 0, |
| 324 | LowConesAuto: 0, MiddleConesAuto: 2, HighConesAuto: 0, |
| 325 | ConesDroppedAuto: 1, LowCubes: 0, MiddleCubes: 1, |
| 326 | HighCubes: 2, CubesDropped: 1, LowCones: 0, |
| 327 | MiddleCones: 2, HighCones: 1, ConesDropped: 1, |
| 328 | AvgCycle: 49, CollectedBy: "isaac", |
| 329 | }, |
| 330 | Stats2023{ |
| 331 | TeamNumber: "2454", MatchNumber: 5, SetNumber: 1, |
| 332 | CompLevel: "quals", StartingQuadrant: 1, LowCubesAuto: 0, |
| 333 | MiddleCubesAuto: 0, HighCubesAuto: 0, CubesDroppedAuto: 0, |
| 334 | LowConesAuto: 1, MiddleConesAuto: 1, HighConesAuto: 0, |
| 335 | ConesDroppedAuto: 1, LowCubes: 1, MiddleCubes: 2, |
| 336 | HighCubes: 0, CubesDropped: 0, LowCones: 1, |
| 337 | MiddleCones: 1, HighCones: 1, ConesDropped: 0, |
| 338 | AvgCycle: 70, CollectedBy: "sam", |
| 339 | }, |
| 340 | } |
| 341 | |
| 342 | correct := []Stats2023{ |
| 343 | Stats2023{ |
| 344 | TeamNumber: "3242", MatchNumber: 5, SetNumber: 1, |
| 345 | CompLevel: "quals", StartingQuadrant: 1, LowCubesAuto: 0, |
| 346 | MiddleCubesAuto: 2, HighCubesAuto: 0, CubesDroppedAuto: 1, |
| 347 | LowConesAuto: 1, MiddleConesAuto: 0, HighConesAuto: 0, |
| 348 | ConesDroppedAuto: 1, LowCubes: 0, MiddleCubes: 2, |
| 349 | HighCubes: 0, CubesDropped: 0, LowCones: 2, |
| 350 | MiddleCones: 0, HighCones: 1, ConesDropped: 1, |
| 351 | AvgCycle: 50, CollectedBy: "eliza", |
| 352 | }, |
| 353 | Stats2023{ |
| 354 | TeamNumber: "2454", MatchNumber: 5, SetNumber: 1, |
| 355 | CompLevel: "quals", StartingQuadrant: 1, LowCubesAuto: 0, |
| 356 | MiddleCubesAuto: 0, HighCubesAuto: 0, CubesDroppedAuto: 0, |
| 357 | LowConesAuto: 1, MiddleConesAuto: 1, HighConesAuto: 0, |
| 358 | ConesDroppedAuto: 1, LowCubes: 1, MiddleCubes: 2, |
| 359 | HighCubes: 0, CubesDropped: 0, LowCones: 1, |
| 360 | MiddleCones: 1, HighCones: 1, ConesDropped: 0, |
| 361 | AvgCycle: 70, CollectedBy: "sam", |
| 362 | }, |
| 363 | } |
| 364 | |
| 365 | originalMatches := []TeamMatch{ |
| 366 | TeamMatch{MatchNumber: 5, SetNumber: 1, CompLevel: "quals", |
| 367 | Alliance: "R", AlliancePosition: 1, TeamNumber: 1111}, |
| 368 | TeamMatch{MatchNumber: 5, SetNumber: 1, CompLevel: "quals", |
| 369 | Alliance: "B", AlliancePosition: 1, TeamNumber: 2314}, |
| 370 | TeamMatch{MatchNumber: 5, SetNumber: 1, CompLevel: "quals", |
| 371 | Alliance: "R", AlliancePosition: 3, TeamNumber: 1742}, |
| 372 | TeamMatch{MatchNumber: 5, SetNumber: 1, CompLevel: "quals", |
| 373 | Alliance: "B", AlliancePosition: 2, TeamNumber: 2454}, |
| 374 | TeamMatch{MatchNumber: 5, SetNumber: 1, CompLevel: "quals", |
| 375 | Alliance: "B", AlliancePosition: 3, TeamNumber: 3242}, |
| 376 | } |
| 377 | |
| 378 | // Matches for which we want to delete the stats. |
| 379 | matches := []TeamMatch{ |
| 380 | TeamMatch{MatchNumber: 5, SetNumber: 1, CompLevel: "quals", |
| 381 | TeamNumber: 1111}, |
| 382 | TeamMatch{MatchNumber: 5, SetNumber: 1, CompLevel: "quals", |
| 383 | TeamNumber: 2314}, |
| 384 | TeamMatch{MatchNumber: 5, SetNumber: 1, CompLevel: "quals", |
| 385 | TeamNumber: 1742}, |
| 386 | } |
| 387 | |
| 388 | for _, match := range originalMatches { |
| 389 | err := fixture.db.AddToMatch(match) |
| 390 | check(t, err, "Failed to add match") |
| 391 | fmt.Println("Match has been added : ", match.TeamNumber) |
| 392 | } |
| 393 | |
| 394 | for _, stat := range startingStats { |
| 395 | err := fixture.db.AddToStats2023(stat) |
| 396 | check(t, err, "Failed to add stat") |
| 397 | } |
| 398 | |
| 399 | for _, match := range matches { |
| 400 | err := fixture.db.DeleteFromStats(match.CompLevel, match.MatchNumber, match.SetNumber, strconv.Itoa(int(match.TeamNumber))) |
| 401 | check(t, err, "Failed to delete stat") |
| 402 | } |
| 403 | |
| 404 | got, err := fixture.db.ReturnStats2023() |
| 405 | check(t, err, "Failed ReturnStats()") |
| 406 | |
| 407 | if !reflect.DeepEqual(correct, got) { |
| 408 | t.Errorf("Got %#v,\nbut expected %#v.", got, correct) |
| 409 | } |
| 410 | } |
| 411 | |
Milo Lin | a72e200 | 2022-04-06 20:31:13 -0700 | [diff] [blame] | 412 | func TestQueryShiftDB(t *testing.T) { |
| 413 | fixture := createDatabase(t) |
| 414 | defer fixture.TearDown() |
| 415 | |
| 416 | testDatabase := []Shift{ |
| 417 | Shift{ |
| 418 | MatchNumber: 1, |
| 419 | R1scouter: "Bob1", R2scouter: "Bob2", R3scouter: "Bob3", B1scouter: "Alice1", B2scouter: "Alice2", B3scouter: "Alice3", |
| 420 | }, |
| 421 | Shift{ |
| 422 | MatchNumber: 2, |
| 423 | R1scouter: "Bob1", R2scouter: "Bob2", R3scouter: "Bob3", B1scouter: "Alice1", B2scouter: "Alice2", B3scouter: "Alice3", |
| 424 | }, |
| 425 | } |
| 426 | |
| 427 | for i := 0; i < len(testDatabase); i++ { |
| 428 | err := fixture.db.AddToShift(testDatabase[i]) |
| 429 | check(t, err, fmt.Sprint("Failed to add shift", i)) |
| 430 | } |
| 431 | |
| 432 | correct := []Shift{ |
| 433 | Shift{ |
| 434 | MatchNumber: 1, |
| 435 | R1scouter: "Bob1", R2scouter: "Bob2", R3scouter: "Bob3", B1scouter: "Alice1", B2scouter: "Alice2", B3scouter: "Alice3", |
| 436 | }, |
| 437 | } |
| 438 | |
| 439 | got, err := fixture.db.QueryAllShifts(1) |
| 440 | check(t, err, "Failed to query shift for match 1") |
| 441 | |
| 442 | if !reflect.DeepEqual(correct, got) { |
| 443 | t.Fatalf("Got %#v,\nbut expected %#v.", got, correct) |
| 444 | } |
| 445 | } |
| 446 | |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 447 | func TestQueryStatsDB(t *testing.T) { |
Philipp Schrader | 7365d32 | 2022-03-06 16:40:08 -0800 | [diff] [blame] | 448 | fixture := createDatabase(t) |
| 449 | defer fixture.TearDown() |
Philipp Schrader | 4953cc3 | 2022-02-25 18:09:02 -0800 | [diff] [blame] | 450 | |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 451 | testDatabase := []Stats{ |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 452 | Stats{ |
Philipp Schrader | 30b4a68 | 2022-04-16 14:36:17 -0700 | [diff] [blame] | 453 | TeamNumber: 1235, MatchNumber: 94, SetNumber: 2, CompLevel: "quals", |
Philipp Schrader | fee07e1 | 2022-03-17 22:19:47 -0700 | [diff] [blame] | 454 | StartingQuadrant: 1, |
| 455 | AutoBallPickedUp: [5]bool{false, false, false, false, false}, |
| 456 | ShotsMissed: 2, UpperGoalShots: 2, LowerGoalShots: 2, |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 457 | ShotsMissedAuto: 2, UpperGoalAuto: 2, LowerGoalAuto: 2, |
Philipp Schrader | fa45d74 | 2022-03-18 19:29:05 -0700 | [diff] [blame] | 458 | PlayedDefense: 2, DefenseReceivedScore: 1, Climbing: 2}, |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 459 | Stats{ |
Philipp Schrader | 30b4a68 | 2022-04-16 14:36:17 -0700 | [diff] [blame] | 460 | TeamNumber: 1234, MatchNumber: 94, SetNumber: 2, CompLevel: "quals", |
Philipp Schrader | fee07e1 | 2022-03-17 22:19:47 -0700 | [diff] [blame] | 461 | StartingQuadrant: 2, |
| 462 | AutoBallPickedUp: [5]bool{false, false, false, false, true}, |
| 463 | ShotsMissed: 4, UpperGoalShots: 4, LowerGoalShots: 4, |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 464 | ShotsMissedAuto: 4, UpperGoalAuto: 4, LowerGoalAuto: 4, |
Philipp Schrader | fa45d74 | 2022-03-18 19:29:05 -0700 | [diff] [blame] | 465 | PlayedDefense: 7, DefenseReceivedScore: 1, Climbing: 2, |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 466 | }, |
| 467 | Stats{ |
Philipp Schrader | 30b4a68 | 2022-04-16 14:36:17 -0700 | [diff] [blame] | 468 | TeamNumber: 1233, MatchNumber: 94, SetNumber: 2, CompLevel: "quals", |
Philipp Schrader | fee07e1 | 2022-03-17 22:19:47 -0700 | [diff] [blame] | 469 | StartingQuadrant: 3, |
| 470 | AutoBallPickedUp: [5]bool{false, false, false, false, false}, |
| 471 | ShotsMissed: 3, UpperGoalShots: 3, LowerGoalShots: 3, |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 472 | ShotsMissedAuto: 3, UpperGoalAuto: 3, LowerGoalAuto: 3, |
Philipp Schrader | fa45d74 | 2022-03-18 19:29:05 -0700 | [diff] [blame] | 473 | PlayedDefense: 3, DefenseReceivedScore: 0, Climbing: 3, |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 474 | }, |
| 475 | Stats{ |
Philipp Schrader | 30b4a68 | 2022-04-16 14:36:17 -0700 | [diff] [blame] | 476 | TeamNumber: 1232, MatchNumber: 94, SetNumber: 2, CompLevel: "quals", |
Philipp Schrader | fee07e1 | 2022-03-17 22:19:47 -0700 | [diff] [blame] | 477 | StartingQuadrant: 2, |
| 478 | AutoBallPickedUp: [5]bool{true, false, false, false, true}, |
| 479 | ShotsMissed: 5, UpperGoalShots: 5, LowerGoalShots: 5, |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 480 | ShotsMissedAuto: 5, UpperGoalAuto: 5, LowerGoalAuto: 5, |
Philipp Schrader | fa45d74 | 2022-03-18 19:29:05 -0700 | [diff] [blame] | 481 | PlayedDefense: 7, DefenseReceivedScore: 2, Climbing: 1, |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 482 | }, |
| 483 | Stats{ |
Philipp Schrader | 30b4a68 | 2022-04-16 14:36:17 -0700 | [diff] [blame] | 484 | TeamNumber: 1231, MatchNumber: 94, SetNumber: 2, CompLevel: "quals", |
Philipp Schrader | fee07e1 | 2022-03-17 22:19:47 -0700 | [diff] [blame] | 485 | StartingQuadrant: 3, |
| 486 | AutoBallPickedUp: [5]bool{false, false, true, false, false}, |
| 487 | ShotsMissed: 6, UpperGoalShots: 6, LowerGoalShots: 6, |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 488 | ShotsMissedAuto: 6, UpperGoalAuto: 6, LowerGoalAuto: 6, |
Philipp Schrader | fa45d74 | 2022-03-18 19:29:05 -0700 | [diff] [blame] | 489 | PlayedDefense: 7, DefenseReceivedScore: 3, Climbing: 1, |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 490 | }, |
| 491 | Stats{ |
Philipp Schrader | 30b4a68 | 2022-04-16 14:36:17 -0700 | [diff] [blame] | 492 | TeamNumber: 1239, MatchNumber: 94, SetNumber: 2, CompLevel: "quals", |
Philipp Schrader | fee07e1 | 2022-03-17 22:19:47 -0700 | [diff] [blame] | 493 | StartingQuadrant: 4, |
| 494 | AutoBallPickedUp: [5]bool{false, true, true, false, false}, |
| 495 | ShotsMissed: 7, UpperGoalShots: 7, LowerGoalShots: 7, |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 496 | ShotsMissedAuto: 7, UpperGoalAuto: 7, LowerGoalAuto: 3, |
Philipp Schrader | fa45d74 | 2022-03-18 19:29:05 -0700 | [diff] [blame] | 497 | PlayedDefense: 7, DefenseReceivedScore: 5, Climbing: 1, |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 498 | }, |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 499 | } |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 500 | |
Emily Markova | bf24c9e | 2023-02-08 20:31:11 -0800 | [diff] [blame] | 501 | matches := []TeamMatch{ |
| 502 | TeamMatch{MatchNumber: 94, SetNumber: 2, CompLevel: "quals", |
| 503 | Alliance: "R", AlliancePosition: 1, TeamNumber: 1235}, |
| 504 | TeamMatch{MatchNumber: 94, SetNumber: 2, CompLevel: "quals", |
| 505 | Alliance: "R", AlliancePosition: 2, TeamNumber: 1234}, |
| 506 | TeamMatch{MatchNumber: 94, SetNumber: 2, CompLevel: "quals", |
| 507 | Alliance: "R", AlliancePosition: 3, TeamNumber: 1233}, |
| 508 | TeamMatch{MatchNumber: 94, SetNumber: 2, CompLevel: "quals", |
| 509 | Alliance: "B", AlliancePosition: 1, TeamNumber: 1232}, |
| 510 | TeamMatch{MatchNumber: 94, SetNumber: 2, CompLevel: "quals", |
| 511 | Alliance: "B", AlliancePosition: 2, TeamNumber: 1231}, |
| 512 | TeamMatch{MatchNumber: 94, SetNumber: 2, CompLevel: "quals", |
| 513 | Alliance: "B", AlliancePosition: 3, TeamNumber: 1239}, |
| 514 | } |
| 515 | |
| 516 | for _, match := range matches { |
| 517 | err := fixture.db.AddToMatch(match) |
| 518 | check(t, err, "Failed to add match") |
| 519 | } |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 520 | |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 521 | for i := 0; i < len(testDatabase); i++ { |
Emily Markova | bf24c9e | 2023-02-08 20:31:11 -0800 | [diff] [blame] | 522 | err := fixture.db.AddToStats(testDatabase[i]) |
Philipp Schrader | fee07e1 | 2022-03-17 22:19:47 -0700 | [diff] [blame] | 523 | check(t, err, fmt.Sprint("Failed to add stats ", i)) |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 524 | } |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 525 | |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 526 | correct := []Stats{ |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 527 | Stats{ |
Philipp Schrader | 30b4a68 | 2022-04-16 14:36:17 -0700 | [diff] [blame] | 528 | TeamNumber: 1235, MatchNumber: 94, SetNumber: 2, CompLevel: "quals", |
Philipp Schrader | fee07e1 | 2022-03-17 22:19:47 -0700 | [diff] [blame] | 529 | StartingQuadrant: 1, |
| 530 | AutoBallPickedUp: [5]bool{false, false, false, false, false}, |
| 531 | ShotsMissed: 2, UpperGoalShots: 2, LowerGoalShots: 2, |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 532 | ShotsMissedAuto: 2, UpperGoalAuto: 2, LowerGoalAuto: 2, |
Philipp Schrader | fa45d74 | 2022-03-18 19:29:05 -0700 | [diff] [blame] | 533 | PlayedDefense: 2, DefenseReceivedScore: 1, Climbing: 2, |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 534 | }, |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 535 | } |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 536 | |
Philipp Schrader | 7365d32 | 2022-03-06 16:40:08 -0800 | [diff] [blame] | 537 | got, err := fixture.db.QueryStats(1235) |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 538 | check(t, err, "Failed QueryStats()") |
| 539 | |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 540 | if !reflect.DeepEqual(correct, got) { |
| 541 | t.Errorf("Got %#v,\nbut expected %#v.", got, correct) |
| 542 | } |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 543 | } |
| 544 | |
Yash Chainani | bcd1bb3 | 2022-04-02 17:10:24 -0700 | [diff] [blame] | 545 | func TestQueryRankingsDB(t *testing.T) { |
| 546 | fixture := createDatabase(t) |
| 547 | defer fixture.TearDown() |
| 548 | |
| 549 | testDatabase := []Ranking{ |
| 550 | Ranking{ |
| 551 | TeamNumber: 123, |
| 552 | Losses: 1, Wins: 7, Ties: 2, |
| 553 | Rank: 2, Dq: 0, |
| 554 | }, |
| 555 | Ranking{ |
| 556 | TeamNumber: 124, |
| 557 | Losses: 3, Wins: 4, Ties: 0, |
| 558 | Rank: 4, Dq: 2, |
| 559 | }, |
| 560 | Ranking{ |
| 561 | TeamNumber: 125, |
| 562 | Losses: 5, Wins: 2, Ties: 0, |
| 563 | Rank: 17, Dq: 0, |
| 564 | }, |
| 565 | Ranking{ |
| 566 | TeamNumber: 126, |
| 567 | Losses: 0, Wins: 7, Ties: 0, |
| 568 | Rank: 5, Dq: 0, |
| 569 | }, |
| 570 | } |
| 571 | |
| 572 | for i := 0; i < len(testDatabase); i++ { |
| 573 | err := fixture.db.AddOrUpdateRankings(testDatabase[i]) |
| 574 | check(t, err, fmt.Sprint("Failed to add rankings ", i)) |
| 575 | } |
| 576 | |
| 577 | correct := []Ranking{ |
| 578 | Ranking{ |
| 579 | TeamNumber: 126, |
| 580 | Losses: 0, Wins: 7, Ties: 0, |
| 581 | Rank: 5, Dq: 0, |
| 582 | }, |
| 583 | } |
| 584 | |
| 585 | got, err := fixture.db.QueryRankings(126) |
| 586 | check(t, err, "Failed QueryRankings()") |
| 587 | |
| 588 | if !reflect.DeepEqual(correct, got) { |
| 589 | t.Errorf("Got %#v,\nbut expected %#v.", got, correct) |
| 590 | } |
| 591 | } |
| 592 | |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 593 | func TestReturnMatchDB(t *testing.T) { |
Philipp Schrader | 7365d32 | 2022-03-06 16:40:08 -0800 | [diff] [blame] | 594 | fixture := createDatabase(t) |
| 595 | defer fixture.TearDown() |
Philipp Schrader | 4953cc3 | 2022-02-25 18:09:02 -0800 | [diff] [blame] | 596 | |
Emily Markova | bf24c9e | 2023-02-08 20:31:11 -0800 | [diff] [blame] | 597 | correct := []TeamMatch{ |
| 598 | TeamMatch{ |
| 599 | MatchNumber: 8, SetNumber: 1, CompLevel: "quals", Alliance: "R", AlliancePosition: 1, TeamNumber: 6835}, |
| 600 | TeamMatch{ |
| 601 | MatchNumber: 8, SetNumber: 1, CompLevel: "quals", Alliance: "R", AlliancePosition: 2, TeamNumber: 4834}, |
| 602 | TeamMatch{ |
| 603 | MatchNumber: 9, SetNumber: 1, CompLevel: "quals", Alliance: "B", AlliancePosition: 3, TeamNumber: 9824}, |
| 604 | TeamMatch{ |
| 605 | MatchNumber: 7, SetNumber: 2, CompLevel: "quals", Alliance: "B", AlliancePosition: 1, TeamNumber: 3732}, |
| 606 | TeamMatch{ |
| 607 | MatchNumber: 8, SetNumber: 1, CompLevel: "quals", Alliance: "B", AlliancePosition: 1, TeamNumber: 3732}, |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 608 | } |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 609 | |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 610 | for i := 0; i < len(correct); i++ { |
Philipp Schrader | 7365d32 | 2022-03-06 16:40:08 -0800 | [diff] [blame] | 611 | err := fixture.db.AddToMatch(correct[i]) |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 612 | check(t, err, fmt.Sprint("Failed to add match", i)) |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 613 | } |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 614 | |
Philipp Schrader | 7365d32 | 2022-03-06 16:40:08 -0800 | [diff] [blame] | 615 | got, err := fixture.db.ReturnMatches() |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 616 | check(t, err, "Failed ReturnMatches()") |
| 617 | |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 618 | if !reflect.DeepEqual(correct, got) { |
| 619 | t.Errorf("Got %#v,\nbut expected %#v.", got, correct) |
| 620 | } |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 621 | } |
| 622 | |
Philipp Schrader | fe58384 | 2022-04-08 19:47:07 -0700 | [diff] [blame] | 623 | func TestOverwriteNewMatchData(t *testing.T) { |
| 624 | fixture := createDatabase(t) |
| 625 | defer fixture.TearDown() |
| 626 | |
Emily Markova | bf24c9e | 2023-02-08 20:31:11 -0800 | [diff] [blame] | 627 | testDatabase := []TeamMatch{ |
| 628 | TeamMatch{ |
| 629 | MatchNumber: 9, SetNumber: 1, CompLevel: "quals", Alliance: "B", AlliancePosition: 3, TeamNumber: 4464}, |
| 630 | TeamMatch{ |
| 631 | MatchNumber: 8, SetNumber: 1, CompLevel: "quals", Alliance: "R", AlliancePosition: 2, TeamNumber: 2352}, |
| 632 | TeamMatch{ |
| 633 | MatchNumber: 9, SetNumber: 1, CompLevel: "quals", Alliance: "B", AlliancePosition: 3, TeamNumber: 6321}, |
Philipp Schrader | fe58384 | 2022-04-08 19:47:07 -0700 | [diff] [blame] | 634 | } |
| 635 | |
| 636 | for i := 0; i < len(testDatabase); i++ { |
| 637 | err := fixture.db.AddToMatch(testDatabase[i]) |
| 638 | check(t, err, fmt.Sprint("Failed to add match", i)) |
| 639 | } |
| 640 | |
Emily Markova | bf24c9e | 2023-02-08 20:31:11 -0800 | [diff] [blame] | 641 | correct := []TeamMatch{ |
| 642 | TeamMatch{ |
| 643 | MatchNumber: 8, SetNumber: 1, CompLevel: "quals", Alliance: "R", AlliancePosition: 2, TeamNumber: 2352}, |
| 644 | TeamMatch{ |
| 645 | MatchNumber: 9, SetNumber: 1, CompLevel: "quals", Alliance: "B", AlliancePosition: 3, TeamNumber: 6321}, |
Philipp Schrader | fe58384 | 2022-04-08 19:47:07 -0700 | [diff] [blame] | 646 | } |
| 647 | |
| 648 | got, err := fixture.db.ReturnMatches() |
| 649 | check(t, err, "Failed to get match list") |
| 650 | |
| 651 | if !reflect.DeepEqual(correct, got) { |
| 652 | t.Fatalf("Got %#v,\nbut expected %#v.", got, correct) |
| 653 | } |
| 654 | } |
| 655 | |
Milo Lin | a72e200 | 2022-04-06 20:31:13 -0700 | [diff] [blame] | 656 | func TestAddReturnShiftDB(t *testing.T) { |
| 657 | fixture := createDatabase(t) |
| 658 | defer fixture.TearDown() |
| 659 | |
| 660 | correct := []Shift{ |
| 661 | Shift{ |
| 662 | MatchNumber: 1, |
| 663 | R1scouter: "Bob1", R2scouter: "Bob2", R3scouter: "Bob3", B1scouter: "Alice1", B2scouter: "Alice2", B3scouter: "Alice3", |
| 664 | }, |
| 665 | Shift{ |
| 666 | MatchNumber: 2, |
| 667 | R1scouter: "Bob1", R2scouter: "Bob2", R3scouter: "Bob3", B1scouter: "Alice1", B2scouter: "Alice2", B3scouter: "Alice3", |
| 668 | }, |
| 669 | } |
| 670 | |
| 671 | for i := 0; i < len(correct); i++ { |
| 672 | err := fixture.db.AddToShift(correct[i]) |
| 673 | check(t, err, fmt.Sprint("Failed to add shift", i)) |
| 674 | } |
| 675 | |
| 676 | got, err := fixture.db.ReturnAllShifts() |
| 677 | check(t, err, "Failed ReturnAllShifts()") |
| 678 | |
| 679 | if !reflect.DeepEqual(correct, got) { |
| 680 | t.Errorf("Got %#v,\nbut expected %#v.", got, correct) |
| 681 | } |
| 682 | } |
| 683 | |
Yash Chainani | bcd1bb3 | 2022-04-02 17:10:24 -0700 | [diff] [blame] | 684 | func TestReturnRankingsDB(t *testing.T) { |
| 685 | fixture := createDatabase(t) |
| 686 | defer fixture.TearDown() |
| 687 | |
| 688 | correct := []Ranking{ |
| 689 | Ranking{ |
| 690 | TeamNumber: 123, |
| 691 | Losses: 1, Wins: 7, Ties: 2, |
| 692 | Rank: 2, Dq: 0, |
| 693 | }, |
| 694 | Ranking{ |
| 695 | TeamNumber: 124, |
| 696 | Losses: 3, Wins: 4, Ties: 0, |
| 697 | Rank: 4, Dq: 2, |
| 698 | }, |
| 699 | Ranking{ |
| 700 | TeamNumber: 125, |
| 701 | Losses: 5, Wins: 2, Ties: 0, |
| 702 | Rank: 17, Dq: 0, |
| 703 | }, |
| 704 | Ranking{ |
| 705 | TeamNumber: 126, |
| 706 | Losses: 0, Wins: 7, Ties: 0, |
| 707 | Rank: 5, Dq: 0, |
| 708 | }, |
| 709 | } |
| 710 | |
| 711 | for i := 0; i < len(correct); i++ { |
| 712 | err := fixture.db.AddOrUpdateRankings(correct[i]) |
| 713 | check(t, err, fmt.Sprint("Failed to add rankings", i)) |
| 714 | } |
| 715 | |
| 716 | got, err := fixture.db.ReturnRankings() |
| 717 | check(t, err, "Failed ReturnRankings()") |
| 718 | |
| 719 | if !reflect.DeepEqual(correct, got) { |
| 720 | t.Errorf("Got %#v,\nbut expected %#v.", got, correct) |
| 721 | } |
| 722 | } |
| 723 | |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 724 | func TestReturnStatsDB(t *testing.T) { |
Philipp Schrader | 7365d32 | 2022-03-06 16:40:08 -0800 | [diff] [blame] | 725 | fixture := createDatabase(t) |
| 726 | defer fixture.TearDown() |
Philipp Schrader | 4953cc3 | 2022-02-25 18:09:02 -0800 | [diff] [blame] | 727 | |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 728 | correct := []Stats{ |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 729 | Stats{ |
Philipp Schrader | 30b4a68 | 2022-04-16 14:36:17 -0700 | [diff] [blame] | 730 | TeamNumber: 1235, MatchNumber: 94, SetNumber: 1, CompLevel: "quals", |
Philipp Schrader | fee07e1 | 2022-03-17 22:19:47 -0700 | [diff] [blame] | 731 | StartingQuadrant: 1, |
| 732 | AutoBallPickedUp: [5]bool{false, false, false, false, false}, |
| 733 | ShotsMissed: 2, UpperGoalShots: 2, LowerGoalShots: 2, |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 734 | ShotsMissedAuto: 2, UpperGoalAuto: 2, LowerGoalAuto: 2, |
Philipp Schrader | fa45d74 | 2022-03-18 19:29:05 -0700 | [diff] [blame] | 735 | PlayedDefense: 2, DefenseReceivedScore: 3, Climbing: 2}, |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 736 | Stats{ |
Philipp Schrader | 30b4a68 | 2022-04-16 14:36:17 -0700 | [diff] [blame] | 737 | TeamNumber: 1236, MatchNumber: 94, SetNumber: 1, CompLevel: "quals", |
Philipp Schrader | fee07e1 | 2022-03-17 22:19:47 -0700 | [diff] [blame] | 738 | StartingQuadrant: 2, |
| 739 | AutoBallPickedUp: [5]bool{false, false, false, false, true}, |
| 740 | ShotsMissed: 4, UpperGoalShots: 4, LowerGoalShots: 4, |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 741 | ShotsMissedAuto: 4, UpperGoalAuto: 4, LowerGoalAuto: 4, |
Philipp Schrader | fa45d74 | 2022-03-18 19:29:05 -0700 | [diff] [blame] | 742 | PlayedDefense: 7, DefenseReceivedScore: 1, Climbing: 2, |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 743 | }, |
| 744 | Stats{ |
Philipp Schrader | 30b4a68 | 2022-04-16 14:36:17 -0700 | [diff] [blame] | 745 | TeamNumber: 1237, MatchNumber: 94, SetNumber: 1, CompLevel: "quals", |
Philipp Schrader | fee07e1 | 2022-03-17 22:19:47 -0700 | [diff] [blame] | 746 | StartingQuadrant: 3, |
| 747 | AutoBallPickedUp: [5]bool{false, false, false, false, false}, |
| 748 | ShotsMissed: 3, UpperGoalShots: 3, LowerGoalShots: 3, |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 749 | ShotsMissedAuto: 3, UpperGoalAuto: 3, LowerGoalAuto: 3, |
Philipp Schrader | fa45d74 | 2022-03-18 19:29:05 -0700 | [diff] [blame] | 750 | PlayedDefense: 3, DefenseReceivedScore: 0, Climbing: 3, |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 751 | }, |
| 752 | Stats{ |
Philipp Schrader | 30b4a68 | 2022-04-16 14:36:17 -0700 | [diff] [blame] | 753 | TeamNumber: 1238, MatchNumber: 94, SetNumber: 1, CompLevel: "quals", |
Philipp Schrader | fee07e1 | 2022-03-17 22:19:47 -0700 | [diff] [blame] | 754 | StartingQuadrant: 2, |
| 755 | AutoBallPickedUp: [5]bool{true, false, false, false, true}, |
| 756 | ShotsMissed: 5, UpperGoalShots: 5, LowerGoalShots: 5, |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 757 | ShotsMissedAuto: 5, UpperGoalAuto: 5, LowerGoalAuto: 5, |
Philipp Schrader | fa45d74 | 2022-03-18 19:29:05 -0700 | [diff] [blame] | 758 | PlayedDefense: 7, DefenseReceivedScore: 4, Climbing: 1, |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 759 | }, |
| 760 | Stats{ |
Philipp Schrader | 30b4a68 | 2022-04-16 14:36:17 -0700 | [diff] [blame] | 761 | TeamNumber: 1239, MatchNumber: 94, SetNumber: 1, CompLevel: "quals", |
Philipp Schrader | fee07e1 | 2022-03-17 22:19:47 -0700 | [diff] [blame] | 762 | StartingQuadrant: 3, |
| 763 | AutoBallPickedUp: [5]bool{false, false, true, false, false}, |
| 764 | ShotsMissed: 6, UpperGoalShots: 6, LowerGoalShots: 6, |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 765 | ShotsMissedAuto: 6, UpperGoalAuto: 6, LowerGoalAuto: 6, |
Philipp Schrader | fa45d74 | 2022-03-18 19:29:05 -0700 | [diff] [blame] | 766 | PlayedDefense: 7, DefenseReceivedScore: 4, Climbing: 1, |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 767 | }, |
| 768 | Stats{ |
Philipp Schrader | 30b4a68 | 2022-04-16 14:36:17 -0700 | [diff] [blame] | 769 | TeamNumber: 1233, MatchNumber: 94, SetNumber: 1, CompLevel: "quals", |
Philipp Schrader | fee07e1 | 2022-03-17 22:19:47 -0700 | [diff] [blame] | 770 | StartingQuadrant: 4, |
| 771 | AutoBallPickedUp: [5]bool{false, true, true, false, false}, |
| 772 | ShotsMissed: 7, UpperGoalShots: 7, LowerGoalShots: 7, |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 773 | ShotsMissedAuto: 7, UpperGoalAuto: 7, LowerGoalAuto: 3, |
Philipp Schrader | fa45d74 | 2022-03-18 19:29:05 -0700 | [diff] [blame] | 774 | PlayedDefense: 7, DefenseReceivedScore: 1, Climbing: 1, |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 775 | }, |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 776 | } |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 777 | |
Emily Markova | bf24c9e | 2023-02-08 20:31:11 -0800 | [diff] [blame] | 778 | matches := []TeamMatch{ |
| 779 | TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals", |
| 780 | Alliance: "R", AlliancePosition: 1, TeamNumber: 1235}, |
| 781 | TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals", |
| 782 | Alliance: "R", AlliancePosition: 2, TeamNumber: 1236}, |
| 783 | TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals", |
| 784 | Alliance: "R", AlliancePosition: 3, TeamNumber: 1237}, |
| 785 | TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals", |
| 786 | Alliance: "B", AlliancePosition: 1, TeamNumber: 1238}, |
| 787 | TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals", |
| 788 | Alliance: "B", AlliancePosition: 2, TeamNumber: 1239}, |
| 789 | TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals", |
| 790 | Alliance: "B", AlliancePosition: 3, TeamNumber: 1233}, |
| 791 | } |
| 792 | |
| 793 | for _, match := range matches { |
| 794 | err := fixture.db.AddToMatch(match) |
| 795 | check(t, err, "Failed to add match") |
| 796 | } |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 797 | |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 798 | for i := 0; i < len(correct); i++ { |
Emily Markova | bf24c9e | 2023-02-08 20:31:11 -0800 | [diff] [blame] | 799 | err := fixture.db.AddToStats(correct[i]) |
Philipp Schrader | fee07e1 | 2022-03-17 22:19:47 -0700 | [diff] [blame] | 800 | check(t, err, fmt.Sprint("Failed to add stats ", i)) |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 801 | } |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 802 | |
Philipp Schrader | 7365d32 | 2022-03-06 16:40:08 -0800 | [diff] [blame] | 803 | got, err := fixture.db.ReturnStats() |
Philipp Schrader | 83fc272 | 2022-03-10 21:59:20 -0800 | [diff] [blame] | 804 | check(t, err, "Failed ReturnStats()") |
| 805 | |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 806 | if !reflect.DeepEqual(correct, got) { |
| 807 | t.Errorf("Got %#v,\nbut expected %#v.", got, correct) |
| 808 | } |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 809 | } |
Alex Perry | 871eab9 | 2022-03-12 17:43:52 -0800 | [diff] [blame] | 810 | |
Sabina Leaver | 759090b | 2023-01-14 20:42:56 -0800 | [diff] [blame] | 811 | func TestReturnActionsDB(t *testing.T) { |
| 812 | fixture := createDatabase(t) |
| 813 | defer fixture.TearDown() |
| 814 | correct := []Action{ |
| 815 | Action{ |
| 816 | TeamNumber: "1235", MatchNumber: 94, SetNumber: 1, CompLevel: "quals", |
| 817 | CompletedAction: []byte(""), TimeStamp: 0000, CollectedBy: "", |
| 818 | }, |
| 819 | Action{ |
| 820 | TeamNumber: "1236", MatchNumber: 94, SetNumber: 1, CompLevel: "quals", |
| 821 | CompletedAction: []byte(""), TimeStamp: 0321, CollectedBy: "", |
| 822 | }, |
| 823 | Action{ |
| 824 | TeamNumber: "1237", MatchNumber: 94, SetNumber: 1, CompLevel: "quals", |
| 825 | CompletedAction: []byte(""), TimeStamp: 0222, CollectedBy: "", |
| 826 | }, |
| 827 | Action{ |
| 828 | TeamNumber: "1238", MatchNumber: 94, SetNumber: 1, CompLevel: "quals", |
| 829 | CompletedAction: []byte(""), TimeStamp: 0110, CollectedBy: "", |
| 830 | }, |
| 831 | Action{ |
| 832 | TeamNumber: "1239", MatchNumber: 94, SetNumber: 1, CompLevel: "quals", |
| 833 | CompletedAction: []byte(""), TimeStamp: 0004, CollectedBy: "", |
| 834 | }, |
| 835 | Action{ |
| 836 | TeamNumber: "1233", MatchNumber: 94, SetNumber: 1, CompLevel: "quals", |
| 837 | CompletedAction: []byte(""), TimeStamp: 0004, CollectedBy: "", |
| 838 | }, |
| 839 | } |
| 840 | |
Emily Markova | bf24c9e | 2023-02-08 20:31:11 -0800 | [diff] [blame] | 841 | matches := []TeamMatch{ |
| 842 | TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals", |
| 843 | Alliance: "R", AlliancePosition: 1, TeamNumber: 1235}, |
| 844 | TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals", |
| 845 | Alliance: "R", AlliancePosition: 2, TeamNumber: 1236}, |
| 846 | TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals", |
| 847 | Alliance: "R", AlliancePosition: 3, TeamNumber: 1237}, |
| 848 | TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals", |
| 849 | Alliance: "B", AlliancePosition: 1, TeamNumber: 1238}, |
| 850 | TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals", |
| 851 | Alliance: "B", AlliancePosition: 2, TeamNumber: 1239}, |
| 852 | TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals", |
| 853 | Alliance: "B", AlliancePosition: 3, TeamNumber: 1233}, |
| 854 | } |
| 855 | |
| 856 | for _, match := range matches { |
| 857 | err := fixture.db.AddToMatch(match) |
| 858 | check(t, err, "Failed to add match") |
| 859 | } |
Sabina Leaver | 759090b | 2023-01-14 20:42:56 -0800 | [diff] [blame] | 860 | |
| 861 | for i := 0; i < len(correct); i++ { |
Emily Markova | bf24c9e | 2023-02-08 20:31:11 -0800 | [diff] [blame] | 862 | err := fixture.db.AddAction(correct[i]) |
Sabina Leaver | 759090b | 2023-01-14 20:42:56 -0800 | [diff] [blame] | 863 | check(t, err, fmt.Sprint("Failed to add to actions ", i)) |
| 864 | } |
| 865 | |
| 866 | got, err := fixture.db.ReturnActions() |
| 867 | check(t, err, "Failed ReturnActions()") |
| 868 | |
| 869 | if !reflect.DeepEqual(correct, got) { |
| 870 | t.Errorf("Got %#v,\nbut expected %#v.", got, correct) |
| 871 | } |
| 872 | } |
| 873 | |
Yash Chainani | bcd1bb3 | 2022-04-02 17:10:24 -0700 | [diff] [blame] | 874 | func TestRankingsDbUpdate(t *testing.T) { |
| 875 | fixture := createDatabase(t) |
| 876 | defer fixture.TearDown() |
| 877 | |
| 878 | testDatabase := []Ranking{ |
| 879 | Ranking{ |
| 880 | TeamNumber: 123, |
| 881 | Losses: 1, Wins: 7, Ties: 2, |
| 882 | Rank: 2, Dq: 0, |
| 883 | }, |
| 884 | Ranking{ |
| 885 | TeamNumber: 124, |
| 886 | Losses: 3, Wins: 4, Ties: 0, |
| 887 | Rank: 4, Dq: 2, |
| 888 | }, |
| 889 | Ranking{ |
| 890 | TeamNumber: 125, |
| 891 | Losses: 5, Wins: 2, Ties: 0, |
| 892 | Rank: 17, Dq: 0, |
| 893 | }, |
| 894 | Ranking{ |
| 895 | TeamNumber: 126, |
| 896 | Losses: 0, Wins: 7, Ties: 0, |
| 897 | Rank: 5, Dq: 0, |
| 898 | }, |
| 899 | Ranking{ |
| 900 | TeamNumber: 125, |
| 901 | Losses: 2, Wins: 4, Ties: 1, |
| 902 | Rank: 5, Dq: 0, |
| 903 | }, |
| 904 | } |
| 905 | |
| 906 | for i := 0; i < len(testDatabase); i++ { |
| 907 | err := fixture.db.AddOrUpdateRankings(testDatabase[i]) |
| 908 | check(t, err, fmt.Sprint("Failed to add rankings ", i)) |
| 909 | } |
| 910 | |
| 911 | correct := []Ranking{ |
| 912 | Ranking{ |
| 913 | TeamNumber: 125, |
| 914 | Losses: 2, Wins: 4, Ties: 1, |
| 915 | Rank: 5, Dq: 0, |
| 916 | }, |
| 917 | } |
| 918 | |
| 919 | got, err := fixture.db.QueryRankings(125) |
| 920 | check(t, err, "Failed QueryRankings()") |
| 921 | |
Philipp Schrader | eecb896 | 2022-06-01 21:02:42 -0700 | [diff] [blame] | 922 | checkDeepEqual(t, correct, got) |
Yash Chainani | bcd1bb3 | 2022-04-02 17:10:24 -0700 | [diff] [blame] | 923 | } |
| 924 | |
Alex Perry | 871eab9 | 2022-03-12 17:43:52 -0800 | [diff] [blame] | 925 | func TestNotes(t *testing.T) { |
Philipp Schrader | 7365d32 | 2022-03-06 16:40:08 -0800 | [diff] [blame] | 926 | fixture := createDatabase(t) |
| 927 | defer fixture.TearDown() |
Alex Perry | 871eab9 | 2022-03-12 17:43:52 -0800 | [diff] [blame] | 928 | |
Philipp Schrader | eecb896 | 2022-06-01 21:02:42 -0700 | [diff] [blame] | 929 | expected := []string{"Note 1", "Note 3"} |
Alex Perry | 871eab9 | 2022-03-12 17:43:52 -0800 | [diff] [blame] | 930 | |
Filip Kujawa | f947cb4 | 2022-11-21 10:00:30 -0800 | [diff] [blame] | 931 | err := fixture.db.AddNotes(NotesData{TeamNumber: 1234, Notes: "Note 1", GoodDriving: true, BadDriving: false, SketchyClimb: false, SolidClimb: true, GoodDefense: false, BadDefense: true}) |
Alex Perry | 871eab9 | 2022-03-12 17:43:52 -0800 | [diff] [blame] | 932 | check(t, err, "Failed to add Note") |
Filip Kujawa | f947cb4 | 2022-11-21 10:00:30 -0800 | [diff] [blame] | 933 | err = fixture.db.AddNotes(NotesData{TeamNumber: 1235, Notes: "Note 2", GoodDriving: false, BadDriving: true, SketchyClimb: false, SolidClimb: true, GoodDefense: false, BadDefense: false}) |
Alex Perry | 871eab9 | 2022-03-12 17:43:52 -0800 | [diff] [blame] | 934 | check(t, err, "Failed to add Note") |
Filip Kujawa | f947cb4 | 2022-11-21 10:00:30 -0800 | [diff] [blame] | 935 | err = fixture.db.AddNotes(NotesData{TeamNumber: 1234, Notes: "Note 3", GoodDriving: true, BadDriving: false, SketchyClimb: false, SolidClimb: true, GoodDefense: true, BadDefense: false}) |
Alex Perry | 871eab9 | 2022-03-12 17:43:52 -0800 | [diff] [blame] | 936 | check(t, err, "Failed to add Note") |
| 937 | |
Philipp Schrader | 7365d32 | 2022-03-06 16:40:08 -0800 | [diff] [blame] | 938 | actual, err := fixture.db.QueryNotes(1234) |
Alex Perry | 871eab9 | 2022-03-12 17:43:52 -0800 | [diff] [blame] | 939 | check(t, err, "Failed to get Notes") |
| 940 | |
| 941 | if !reflect.DeepEqual(expected, actual) { |
| 942 | t.Errorf("Got %#v,\nbut expected %#v.", actual, expected) |
| 943 | } |
| 944 | } |
Filip Kujawa | 210a03b | 2022-11-24 14:41:11 -0800 | [diff] [blame] | 945 | |
| 946 | func TestDriverRanking(t *testing.T) { |
| 947 | fixture := createDatabase(t) |
| 948 | defer fixture.TearDown() |
| 949 | |
| 950 | expected := []DriverRankingData{ |
| 951 | {ID: 1, MatchNumber: 12, Rank1: 1234, Rank2: 1235, Rank3: 1236}, |
| 952 | {ID: 2, MatchNumber: 12, Rank1: 1236, Rank2: 1235, Rank3: 1234}, |
| 953 | } |
| 954 | |
| 955 | err := fixture.db.AddDriverRanking( |
| 956 | DriverRankingData{MatchNumber: 12, Rank1: 1234, Rank2: 1235, Rank3: 1236}, |
| 957 | ) |
| 958 | check(t, err, "Failed to add Driver Ranking") |
| 959 | err = fixture.db.AddDriverRanking( |
| 960 | DriverRankingData{MatchNumber: 12, Rank1: 1236, Rank2: 1235, Rank3: 1234}, |
| 961 | ) |
| 962 | check(t, err, "Failed to add Driver Ranking") |
| 963 | err = fixture.db.AddDriverRanking( |
| 964 | DriverRankingData{MatchNumber: 13, Rank1: 1235, Rank2: 1234, Rank3: 1236}, |
| 965 | ) |
| 966 | check(t, err, "Failed to add Driver Ranking") |
| 967 | |
| 968 | actual, err := fixture.db.QueryDriverRanking(12) |
| 969 | check(t, err, "Failed to get Driver Ranking") |
| 970 | |
| 971 | if !reflect.DeepEqual(expected, actual) { |
| 972 | t.Errorf("Got %#v,\nbut expected %#v.", actual, expected) |
| 973 | } |
| 974 | } |