Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 1 | package db |
| 2 | |
| 3 | import ( |
Philipp Schrader | 4953cc3 | 2022-02-25 18:09:02 -0800 | [diff] [blame] | 4 | "os" |
| 5 | "path/filepath" |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 6 | "reflect" |
| 7 | "testing" |
| 8 | ) |
| 9 | |
Philipp Schrader | 4953cc3 | 2022-02-25 18:09:02 -0800 | [diff] [blame] | 10 | // Creates a database in TEST_TMPDIR so that we don't accidentally write it |
| 11 | // into the runfiles directory. |
| 12 | func createDatabase(t *testing.T) *Database { |
| 13 | // Get the path to our temporary writable directory. |
| 14 | testTmpdir := os.Getenv("TEST_TMPDIR") |
| 15 | db, err := NewDatabase(filepath.Join(testTmpdir, "scouting.db")) |
| 16 | if err != nil { |
| 17 | t.Fatal("Failed to create a new database: ", err) |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 18 | } |
Philipp Schrader | 4953cc3 | 2022-02-25 18:09:02 -0800 | [diff] [blame] | 19 | return db |
| 20 | } |
| 21 | |
| 22 | func TestAddToMatchDB(t *testing.T) { |
| 23 | db := createDatabase(t) |
| 24 | defer db.Delete() |
| 25 | |
Philipp Schrader | 1e6c0a9 | 2022-02-27 23:30:57 -0800 | [diff] [blame] | 26 | correct := []Match{Match{MatchNumber: 7, Round: 1, CompLevel: "quals", R1: 9999, R2: 1000, R3: 777, B1: 0000, B2: 4321, B3: 1234, r1ID: 1, r2ID: 2, r3ID: 3, b1ID: 4, b2ID: 5, b3ID: 6}} |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 27 | db.AddToMatch(correct[0]) |
| 28 | got, error_ := db.ReturnMatches() |
| 29 | if error_ != nil { |
| 30 | t.Fatalf(error_.Error()) |
| 31 | } |
| 32 | if !reflect.DeepEqual(correct, got) { |
| 33 | t.Fatalf("Got %#v,\nbut expected %#v.", got, correct) |
| 34 | } |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 35 | } |
| 36 | |
| 37 | func TestAddToStatsDB(t *testing.T) { |
Philipp Schrader | 4953cc3 | 2022-02-25 18:09:02 -0800 | [diff] [blame] | 38 | db := createDatabase(t) |
| 39 | defer db.Delete() |
| 40 | |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 41 | correct := []Stats{ |
Philipp Schrader | 80ccb66 | 2022-03-01 21:47:30 -0800 | [diff] [blame] | 42 | Stats{TeamNumber: 1236, MatchNumber: 7, ShotsMissed: 9, UpperGoalShots: 5, LowerGoalShots: 4, ShotsMissedAuto: 3, UpperGoalAuto: 2, LowerGoalAuto: 1, PlayedDefense: 2, Climbing: 3}, |
| 43 | Stats{TeamNumber: 1001, MatchNumber: 7, ShotsMissed: 6, UpperGoalShots: 9, LowerGoalShots: 9, ShotsMissedAuto: 0, UpperGoalAuto: 0, LowerGoalAuto: 0, PlayedDefense: 0, Climbing: 0}, |
| 44 | Stats{TeamNumber: 777, MatchNumber: 7, ShotsMissed: 5, UpperGoalShots: 7, LowerGoalShots: 12, ShotsMissedAuto: 0, UpperGoalAuto: 4, LowerGoalAuto: 0, PlayedDefense: 0, Climbing: 0}, |
| 45 | Stats{TeamNumber: 1000, MatchNumber: 7, ShotsMissed: 12, UpperGoalShots: 6, LowerGoalShots: 10, ShotsMissedAuto: 0, UpperGoalAuto: 7, LowerGoalAuto: 0, PlayedDefense: 0, Climbing: 0}, |
| 46 | Stats{TeamNumber: 4321, MatchNumber: 7, ShotsMissed: 14, UpperGoalShots: 12, LowerGoalShots: 3, ShotsMissedAuto: 0, UpperGoalAuto: 7, LowerGoalAuto: 0, PlayedDefense: 0, Climbing: 0}, |
| 47 | Stats{TeamNumber: 1234, MatchNumber: 7, ShotsMissed: 3, UpperGoalShots: 4, LowerGoalShots: 0, ShotsMissedAuto: 0, UpperGoalAuto: 9, LowerGoalAuto: 0, PlayedDefense: 0, Climbing: 0}, |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 48 | } |
Philipp Schrader | 30005e4 | 2022-03-06 13:53:58 -0800 | [diff] [blame] | 49 | err := db.AddToMatch(Match{MatchNumber: 7, Round: 1, CompLevel: "quals", R1: 1236, R2: 1001, R3: 777, B1: 1000, B2: 4321, B3: 1234, r1ID: 1, r2ID: 2, r3ID: 3, b1ID: 4, b2ID: 5, b3ID: 6}) |
| 50 | if err != nil { |
| 51 | t.Fatal("Failed to add match: ", err) |
| 52 | } |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 53 | for i := 0; i < len(correct); i++ { |
Philipp Schrader | 30005e4 | 2022-03-06 13:53:58 -0800 | [diff] [blame] | 54 | if err := db.AddToStats(correct[i]); err != nil { |
| 55 | t.Fatal("Failed to add stats to DB: ", err) |
| 56 | } |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 57 | } |
| 58 | got, error_ := db.ReturnStats() |
| 59 | if error_ != nil { |
| 60 | t.Fatalf(error_.Error()) |
| 61 | } |
| 62 | if !reflect.DeepEqual(correct, got) { |
| 63 | t.Errorf("Got %#v,\nbut expected %#v.", got, correct) |
| 64 | } |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 65 | } |
| 66 | |
| 67 | func TestQueryMatchDB(t *testing.T) { |
Philipp Schrader | 4953cc3 | 2022-02-25 18:09:02 -0800 | [diff] [blame] | 68 | db := createDatabase(t) |
| 69 | defer db.Delete() |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 70 | |
| 71 | testDatabase := []Match{ |
Philipp Schrader | 1e6c0a9 | 2022-02-27 23:30:57 -0800 | [diff] [blame] | 72 | Match{MatchNumber: 2, Round: 1, CompLevel: "quals", R1: 251, R2: 169, R3: 286, B1: 253, B2: 538, B3: 149}, |
| 73 | Match{MatchNumber: 4, Round: 1, CompLevel: "quals", R1: 198, R2: 135, R3: 777, B1: 999, B2: 434, B3: 698}, |
| 74 | Match{MatchNumber: 3, Round: 1, CompLevel: "quals", R1: 147, R2: 421, R3: 538, B1: 126, B2: 448, B3: 262}, |
| 75 | Match{MatchNumber: 6, Round: 1, CompLevel: "quals", R1: 191, R2: 132, R3: 773, B1: 994, B2: 435, B3: 696}, |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 76 | } |
| 77 | |
| 78 | for i := 0; i < len(testDatabase); i++ { |
| 79 | db.AddToMatch(testDatabase[i]) |
| 80 | } |
| 81 | |
| 82 | correct := []Match{ |
Philipp Schrader | 1e6c0a9 | 2022-02-27 23:30:57 -0800 | [diff] [blame] | 83 | Match{MatchNumber: 2, Round: 1, CompLevel: "quals", R1: 251, R2: 169, R3: 286, B1: 253, B2: 538, B3: 149, r1ID: 1, r2ID: 2, r3ID: 3, b1ID: 4, b2ID: 5, b3ID: 6}, |
| 84 | Match{MatchNumber: 3, Round: 1, CompLevel: "quals", R1: 147, R2: 421, R3: 538, B1: 126, B2: 448, B3: 262, r1ID: 13, r2ID: 14, r3ID: 15, b1ID: 16, b2ID: 17, b3ID: 18}, |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 85 | } |
| 86 | |
| 87 | got, error_ := db.QueryMatches(538) |
Philipp Schrader | 4953cc3 | 2022-02-25 18:09:02 -0800 | [diff] [blame] | 88 | if error_ != nil { |
| 89 | t.Fatal("Failed to query matches for 538: ", error_) |
| 90 | } |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 91 | if !reflect.DeepEqual(correct, got) { |
| 92 | t.Fatalf("Got %#v,\nbut expected %#v.", got, correct) |
| 93 | } |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 94 | } |
| 95 | |
| 96 | func TestQueryStatsDB(t *testing.T) { |
Philipp Schrader | 4953cc3 | 2022-02-25 18:09:02 -0800 | [diff] [blame] | 97 | db := createDatabase(t) |
| 98 | defer db.Delete() |
| 99 | |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 100 | testDatabase := []Stats{ |
Philipp Schrader | 80ccb66 | 2022-03-01 21:47:30 -0800 | [diff] [blame] | 101 | Stats{TeamNumber: 1235, MatchNumber: 94, ShotsMissed: 2, UpperGoalShots: 2, LowerGoalShots: 2, ShotsMissedAuto: 2, UpperGoalAuto: 2, LowerGoalAuto: 2, PlayedDefense: 2, Climbing: 2}, |
| 102 | Stats{TeamNumber: 1234, MatchNumber: 94, ShotsMissed: 4, UpperGoalShots: 4, LowerGoalShots: 4, ShotsMissedAuto: 4, UpperGoalAuto: 4, LowerGoalAuto: 4, PlayedDefense: 7, Climbing: 2}, |
| 103 | Stats{TeamNumber: 1233, MatchNumber: 94, ShotsMissed: 3, UpperGoalShots: 3, LowerGoalShots: 3, ShotsMissedAuto: 3, UpperGoalAuto: 3, LowerGoalAuto: 3, PlayedDefense: 3, Climbing: 3}, |
| 104 | Stats{TeamNumber: 1232, MatchNumber: 94, ShotsMissed: 5, UpperGoalShots: 5, LowerGoalShots: 5, ShotsMissedAuto: 5, UpperGoalAuto: 5, LowerGoalAuto: 5, PlayedDefense: 7, Climbing: 1}, |
| 105 | Stats{TeamNumber: 1231, MatchNumber: 94, ShotsMissed: 6, UpperGoalShots: 6, LowerGoalShots: 6, ShotsMissedAuto: 6, UpperGoalAuto: 6, LowerGoalAuto: 6, PlayedDefense: 7, Climbing: 1}, |
| 106 | Stats{TeamNumber: 1239, MatchNumber: 94, ShotsMissed: 7, UpperGoalShots: 7, LowerGoalShots: 7, ShotsMissedAuto: 7, UpperGoalAuto: 7, LowerGoalAuto: 3, PlayedDefense: 7, Climbing: 1}, |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 107 | } |
Philipp Schrader | 1e6c0a9 | 2022-02-27 23:30:57 -0800 | [diff] [blame] | 108 | db.AddToMatch(Match{MatchNumber: 94, Round: 1, CompLevel: "quals", R1: 1235, R2: 1234, R3: 1233, B1: 1232, B2: 1231, B3: 1239}) |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 109 | for i := 0; i < len(testDatabase); i++ { |
| 110 | db.AddToStats(testDatabase[i]) |
| 111 | } |
| 112 | correct := []Stats{ |
Philipp Schrader | 80ccb66 | 2022-03-01 21:47:30 -0800 | [diff] [blame] | 113 | Stats{TeamNumber: 1235, MatchNumber: 94, ShotsMissed: 2, UpperGoalShots: 2, LowerGoalShots: 2, ShotsMissedAuto: 2, UpperGoalAuto: 2, LowerGoalAuto: 2, PlayedDefense: 2, Climbing: 2}, |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 114 | } |
| 115 | got, error_ := db.QueryStats(1235) |
| 116 | if error_ != nil { |
| 117 | t.Fatalf(error_.Error()) |
| 118 | } |
| 119 | if !reflect.DeepEqual(correct, got) { |
| 120 | t.Errorf("Got %#v,\nbut expected %#v.", got, correct) |
| 121 | } |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 122 | } |
| 123 | |
| 124 | func TestReturnMatchDB(t *testing.T) { |
Philipp Schrader | 4953cc3 | 2022-02-25 18:09:02 -0800 | [diff] [blame] | 125 | db := createDatabase(t) |
| 126 | defer db.Delete() |
| 127 | |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 128 | correct := []Match{ |
Philipp Schrader | 1e6c0a9 | 2022-02-27 23:30:57 -0800 | [diff] [blame] | 129 | Match{MatchNumber: 2, Round: 1, CompLevel: "quals", R1: 251, R2: 169, R3: 286, B1: 253, B2: 538, B3: 149, r1ID: 1, r2ID: 2, r3ID: 3, b1ID: 4, b2ID: 5, b3ID: 6}, |
| 130 | Match{MatchNumber: 3, Round: 1, CompLevel: "quals", R1: 147, R2: 421, R3: 538, B1: 126, B2: 448, B3: 262, r1ID: 7, r2ID: 8, r3ID: 9, b1ID: 10, b2ID: 11, b3ID: 12}, |
| 131 | Match{MatchNumber: 4, Round: 1, CompLevel: "quals", R1: 251, R2: 169, R3: 286, B1: 653, B2: 538, B3: 149, r1ID: 13, r2ID: 14, r3ID: 15, b1ID: 16, b2ID: 17, b3ID: 18}, |
| 132 | Match{MatchNumber: 5, Round: 1, CompLevel: "quals", R1: 198, R2: 1421, R3: 538, B1: 26, B2: 448, B3: 262, r1ID: 19, r2ID: 20, r3ID: 21, b1ID: 22, b2ID: 23, b3ID: 24}, |
| 133 | Match{MatchNumber: 6, Round: 1, CompLevel: "quals", R1: 251, R2: 188, R3: 286, B1: 555, B2: 538, B3: 149, r1ID: 25, r2ID: 26, r3ID: 27, b1ID: 28, b2ID: 29, b3ID: 30}, |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 134 | } |
| 135 | for i := 0; i < len(correct); i++ { |
| 136 | db.AddToMatch(correct[i]) |
| 137 | } |
| 138 | got, error_ := db.ReturnMatches() |
| 139 | if error_ != nil { |
| 140 | t.Fatalf(error_.Error()) |
| 141 | } |
| 142 | if !reflect.DeepEqual(correct, got) { |
| 143 | t.Errorf("Got %#v,\nbut expected %#v.", got, correct) |
| 144 | } |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 145 | } |
| 146 | |
| 147 | func TestReturnStatsDB(t *testing.T) { |
Philipp Schrader | 4953cc3 | 2022-02-25 18:09:02 -0800 | [diff] [blame] | 148 | db := createDatabase(t) |
| 149 | defer db.Delete() |
| 150 | |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 151 | correct := []Stats{ |
Philipp Schrader | 80ccb66 | 2022-03-01 21:47:30 -0800 | [diff] [blame] | 152 | Stats{TeamNumber: 1235, MatchNumber: 94, ShotsMissed: 2, UpperGoalShots: 2, LowerGoalShots: 2, ShotsMissedAuto: 2, UpperGoalAuto: 2, LowerGoalAuto: 2, PlayedDefense: 2, Climbing: 2}, |
| 153 | Stats{TeamNumber: 1236, MatchNumber: 94, ShotsMissed: 4, UpperGoalShots: 4, LowerGoalShots: 4, ShotsMissedAuto: 4, UpperGoalAuto: 4, LowerGoalAuto: 4, PlayedDefense: 7, Climbing: 2}, |
| 154 | Stats{TeamNumber: 1237, MatchNumber: 94, ShotsMissed: 3, UpperGoalShots: 3, LowerGoalShots: 3, ShotsMissedAuto: 3, UpperGoalAuto: 3, LowerGoalAuto: 3, PlayedDefense: 3, Climbing: 3}, |
| 155 | Stats{TeamNumber: 1238, MatchNumber: 94, ShotsMissed: 5, UpperGoalShots: 5, LowerGoalShots: 5, ShotsMissedAuto: 5, UpperGoalAuto: 5, LowerGoalAuto: 5, PlayedDefense: 7, Climbing: 1}, |
| 156 | Stats{TeamNumber: 1239, MatchNumber: 94, ShotsMissed: 6, UpperGoalShots: 6, LowerGoalShots: 6, ShotsMissedAuto: 6, UpperGoalAuto: 6, LowerGoalAuto: 6, PlayedDefense: 7, Climbing: 1}, |
| 157 | Stats{TeamNumber: 1233, MatchNumber: 94, ShotsMissed: 7, UpperGoalShots: 7, LowerGoalShots: 7, ShotsMissedAuto: 7, UpperGoalAuto: 7, LowerGoalAuto: 3, PlayedDefense: 7, Climbing: 1}, |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 158 | } |
Philipp Schrader | 1e6c0a9 | 2022-02-27 23:30:57 -0800 | [diff] [blame] | 159 | db.AddToMatch(Match{MatchNumber: 94, Round: 1, CompLevel: "quals", R1: 1235, R2: 1236, R3: 1237, B1: 1238, B2: 1239, B3: 1233}) |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 160 | for i := 0; i < len(correct); i++ { |
| 161 | db.AddToStats(correct[i]) |
| 162 | } |
| 163 | got, error_ := db.ReturnStats() |
| 164 | if error_ != nil { |
| 165 | t.Fatalf(error_.Error()) |
| 166 | } |
| 167 | if !reflect.DeepEqual(correct, got) { |
| 168 | t.Errorf("Got %#v,\nbut expected %#v.", got, correct) |
| 169 | } |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 170 | } |