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 | |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -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}} |
| 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{ |
| 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}, |
| 48 | } |
| 49 | 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 | for i := 0; i < len(correct); i++ { |
| 51 | db.AddToStats(correct[i]) |
| 52 | } |
| 53 | got, error_ := db.ReturnStats() |
| 54 | if error_ != nil { |
| 55 | t.Fatalf(error_.Error()) |
| 56 | } |
| 57 | if !reflect.DeepEqual(correct, got) { |
| 58 | t.Errorf("Got %#v,\nbut expected %#v.", got, correct) |
| 59 | } |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 60 | } |
| 61 | |
| 62 | func TestQueryMatchDB(t *testing.T) { |
Philipp Schrader | 4953cc3 | 2022-02-25 18:09:02 -0800 | [diff] [blame^] | 63 | db := createDatabase(t) |
| 64 | defer db.Delete() |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 65 | |
| 66 | testDatabase := []Match{ |
| 67 | Match{matchNumber: 2, round: 1, compLevel: "quals", r1: 251, r2: 169, r3: 286, b1: 253, b2: 538, b3: 149}, |
| 68 | Match{matchNumber: 4, round: 1, compLevel: "quals", r1: 198, r2: 135, r3: 777, b1: 999, b2: 434, b3: 698}, |
| 69 | Match{matchNumber: 3, round: 1, compLevel: "quals", r1: 147, r2: 421, r3: 538, b1: 126, b2: 448, b3: 262}, |
| 70 | Match{matchNumber: 6, round: 1, compLevel: "quals", r1: 191, r2: 132, r3: 773, b1: 994, b2: 435, b3: 696}, |
| 71 | } |
| 72 | |
| 73 | for i := 0; i < len(testDatabase); i++ { |
| 74 | db.AddToMatch(testDatabase[i]) |
| 75 | } |
| 76 | |
| 77 | correct := []Match{ |
| 78 | 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}, |
| 79 | 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}, |
| 80 | } |
| 81 | |
| 82 | got, error_ := db.QueryMatches(538) |
Philipp Schrader | 4953cc3 | 2022-02-25 18:09:02 -0800 | [diff] [blame^] | 83 | if error_ != nil { |
| 84 | t.Fatal("Failed to query matches for 538: ", error_) |
| 85 | } |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 86 | if !reflect.DeepEqual(correct, got) { |
| 87 | t.Fatalf("Got %#v,\nbut expected %#v.", got, correct) |
| 88 | } |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 89 | } |
| 90 | |
| 91 | func TestQueryStatsDB(t *testing.T) { |
Philipp Schrader | 4953cc3 | 2022-02-25 18:09:02 -0800 | [diff] [blame^] | 92 | db := createDatabase(t) |
| 93 | defer db.Delete() |
| 94 | |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 95 | testDatabase := []Stats{ |
| 96 | Stats{teamNumber: 1235, matchNumber: 94, shotsMissed: 2, upperGoalShots: 2, lowerGoalShots: 2, shotsMissedAuto: 2, upperGoalAuto: 2, lowerGoalAuto: 2, playedDefense: 2, climbing: 2}, |
| 97 | Stats{teamNumber: 1234, matchNumber: 94, shotsMissed: 4, upperGoalShots: 4, lowerGoalShots: 4, shotsMissedAuto: 4, upperGoalAuto: 4, lowerGoalAuto: 4, playedDefense: 7, climbing: 2}, |
| 98 | Stats{teamNumber: 1233, matchNumber: 94, shotsMissed: 3, upperGoalShots: 3, lowerGoalShots: 3, shotsMissedAuto: 3, upperGoalAuto: 3, lowerGoalAuto: 3, playedDefense: 3, climbing: 3}, |
| 99 | Stats{teamNumber: 1232, matchNumber: 94, shotsMissed: 5, upperGoalShots: 5, lowerGoalShots: 5, shotsMissedAuto: 5, upperGoalAuto: 5, lowerGoalAuto: 5, playedDefense: 7, climbing: 1}, |
| 100 | Stats{teamNumber: 1231, matchNumber: 94, shotsMissed: 6, upperGoalShots: 6, lowerGoalShots: 6, shotsMissedAuto: 6, upperGoalAuto: 6, lowerGoalAuto: 6, playedDefense: 7, climbing: 1}, |
| 101 | Stats{teamNumber: 1239, matchNumber: 94, shotsMissed: 7, upperGoalShots: 7, lowerGoalShots: 7, shotsMissedAuto: 7, upperGoalAuto: 7, lowerGoalAuto: 3, playedDefense: 7, climbing: 1}, |
| 102 | } |
| 103 | db.AddToMatch(Match{matchNumber: 94, round: 1, compLevel: "quals", r1: 1235, r2: 1234, r3: 1233, b1: 1232, b2: 1231, b3: 1239}) |
| 104 | for i := 0; i < len(testDatabase); i++ { |
| 105 | db.AddToStats(testDatabase[i]) |
| 106 | } |
| 107 | correct := []Stats{ |
| 108 | Stats{teamNumber: 1235, matchNumber: 94, shotsMissed: 2, upperGoalShots: 2, lowerGoalShots: 2, shotsMissedAuto: 2, upperGoalAuto: 2, lowerGoalAuto: 2, playedDefense: 2, climbing: 2}, |
| 109 | } |
| 110 | got, error_ := db.QueryStats(1235) |
| 111 | if error_ != nil { |
| 112 | t.Fatalf(error_.Error()) |
| 113 | } |
| 114 | if !reflect.DeepEqual(correct, got) { |
| 115 | t.Errorf("Got %#v,\nbut expected %#v.", got, correct) |
| 116 | } |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 117 | } |
| 118 | |
| 119 | func TestReturnMatchDB(t *testing.T) { |
Philipp Schrader | 4953cc3 | 2022-02-25 18:09:02 -0800 | [diff] [blame^] | 120 | db := createDatabase(t) |
| 121 | defer db.Delete() |
| 122 | |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 123 | correct := []Match{ |
| 124 | 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}, |
| 125 | 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}, |
| 126 | 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}, |
| 127 | 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}, |
| 128 | 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}, |
| 129 | } |
| 130 | for i := 0; i < len(correct); i++ { |
| 131 | db.AddToMatch(correct[i]) |
| 132 | } |
| 133 | got, error_ := db.ReturnMatches() |
| 134 | if error_ != nil { |
| 135 | t.Fatalf(error_.Error()) |
| 136 | } |
| 137 | if !reflect.DeepEqual(correct, got) { |
| 138 | t.Errorf("Got %#v,\nbut expected %#v.", got, correct) |
| 139 | } |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 140 | } |
| 141 | |
| 142 | func TestReturnStatsDB(t *testing.T) { |
Philipp Schrader | 4953cc3 | 2022-02-25 18:09:02 -0800 | [diff] [blame^] | 143 | db := createDatabase(t) |
| 144 | defer db.Delete() |
| 145 | |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 146 | correct := []Stats{ |
| 147 | Stats{teamNumber: 1235, matchNumber: 94, shotsMissed: 2, upperGoalShots: 2, lowerGoalShots: 2, shotsMissedAuto: 2, upperGoalAuto: 2, lowerGoalAuto: 2, playedDefense: 2, climbing: 2}, |
| 148 | Stats{teamNumber: 1236, matchNumber: 94, shotsMissed: 4, upperGoalShots: 4, lowerGoalShots: 4, shotsMissedAuto: 4, upperGoalAuto: 4, lowerGoalAuto: 4, playedDefense: 7, climbing: 2}, |
| 149 | Stats{teamNumber: 1237, matchNumber: 94, shotsMissed: 3, upperGoalShots: 3, lowerGoalShots: 3, shotsMissedAuto: 3, upperGoalAuto: 3, lowerGoalAuto: 3, playedDefense: 3, climbing: 3}, |
| 150 | Stats{teamNumber: 1238, matchNumber: 94, shotsMissed: 5, upperGoalShots: 5, lowerGoalShots: 5, shotsMissedAuto: 5, upperGoalAuto: 5, lowerGoalAuto: 5, playedDefense: 7, climbing: 1}, |
| 151 | Stats{teamNumber: 1239, matchNumber: 94, shotsMissed: 6, upperGoalShots: 6, lowerGoalShots: 6, shotsMissedAuto: 6, upperGoalAuto: 6, lowerGoalAuto: 6, playedDefense: 7, climbing: 1}, |
| 152 | Stats{teamNumber: 1233, matchNumber: 94, shotsMissed: 7, upperGoalShots: 7, lowerGoalShots: 7, shotsMissedAuto: 7, upperGoalAuto: 7, lowerGoalAuto: 3, playedDefense: 7, climbing: 1}, |
| 153 | } |
| 154 | db.AddToMatch(Match{matchNumber: 94, round: 1, compLevel: "quals", r1: 1235, r2: 1236, r3: 1237, b1: 1238, b2: 1239, b3: 1233}) |
| 155 | for i := 0; i < len(correct); i++ { |
| 156 | db.AddToStats(correct[i]) |
| 157 | } |
| 158 | got, error_ := db.ReturnStats() |
| 159 | if error_ != nil { |
| 160 | t.Fatalf(error_.Error()) |
| 161 | } |
| 162 | if !reflect.DeepEqual(correct, got) { |
| 163 | t.Errorf("Got %#v,\nbut expected %#v.", got, correct) |
| 164 | } |
Sabina Leaver | c5fd277 | 2022-01-29 17:00:23 -0800 | [diff] [blame] | 165 | } |