blob: 6e3e8c312685c3a829a153093daa83dd9bc75c02 [file] [log] [blame]
Sabina Leaverc5fd2772022-01-29 17:00:23 -08001package db
2
3import (
Philipp Schrader4953cc32022-02-25 18:09:02 -08004 "os"
5 "path/filepath"
Sabina Leaverc5fd2772022-01-29 17:00:23 -08006 "reflect"
7 "testing"
8)
9
Philipp Schrader4953cc32022-02-25 18:09:02 -080010// Creates a database in TEST_TMPDIR so that we don't accidentally write it
11// into the runfiles directory.
12func 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 Leaverc5fd2772022-01-29 17:00:23 -080018 }
Philipp Schrader4953cc32022-02-25 18:09:02 -080019 return db
20}
21
22func TestAddToMatchDB(t *testing.T) {
23 db := createDatabase(t)
24 defer db.Delete()
25
Philipp Schrader1e6c0a92022-02-27 23:30:57 -080026 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 Leaverc5fd2772022-01-29 17:00:23 -080027 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 Leaverc5fd2772022-01-29 17:00:23 -080035}
36
37func TestAddToStatsDB(t *testing.T) {
Philipp Schrader4953cc32022-02-25 18:09:02 -080038 db := createDatabase(t)
39 defer db.Delete()
40
Sabina Leaverc5fd2772022-01-29 17:00:23 -080041 correct := []Stats{
Philipp Schrader80ccb662022-03-01 21:47:30 -080042 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 Leaverc5fd2772022-01-29 17:00:23 -080048 }
Philipp Schrader30005e42022-03-06 13:53:58 -080049 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 Leaverc5fd2772022-01-29 17:00:23 -080053 for i := 0; i < len(correct); i++ {
Philipp Schrader30005e42022-03-06 13:53:58 -080054 if err := db.AddToStats(correct[i]); err != nil {
55 t.Fatal("Failed to add stats to DB: ", err)
56 }
Sabina Leaverc5fd2772022-01-29 17:00:23 -080057 }
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 Leaverc5fd2772022-01-29 17:00:23 -080065}
66
67func TestQueryMatchDB(t *testing.T) {
Philipp Schrader4953cc32022-02-25 18:09:02 -080068 db := createDatabase(t)
69 defer db.Delete()
Sabina Leaverc5fd2772022-01-29 17:00:23 -080070
71 testDatabase := []Match{
Philipp Schrader1e6c0a92022-02-27 23:30:57 -080072 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 Leaverc5fd2772022-01-29 17:00:23 -080076 }
77
78 for i := 0; i < len(testDatabase); i++ {
79 db.AddToMatch(testDatabase[i])
80 }
81
82 correct := []Match{
Philipp Schrader1e6c0a92022-02-27 23:30:57 -080083 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 Leaverc5fd2772022-01-29 17:00:23 -080085 }
86
87 got, error_ := db.QueryMatches(538)
Philipp Schrader4953cc32022-02-25 18:09:02 -080088 if error_ != nil {
89 t.Fatal("Failed to query matches for 538: ", error_)
90 }
Sabina Leaverc5fd2772022-01-29 17:00:23 -080091 if !reflect.DeepEqual(correct, got) {
92 t.Fatalf("Got %#v,\nbut expected %#v.", got, correct)
93 }
Sabina Leaverc5fd2772022-01-29 17:00:23 -080094}
95
96func TestQueryStatsDB(t *testing.T) {
Philipp Schrader4953cc32022-02-25 18:09:02 -080097 db := createDatabase(t)
98 defer db.Delete()
99
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800100 testDatabase := []Stats{
Philipp Schrader80ccb662022-03-01 21:47:30 -0800101 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 Leaverc5fd2772022-01-29 17:00:23 -0800107 }
Philipp Schrader1e6c0a92022-02-27 23:30:57 -0800108 db.AddToMatch(Match{MatchNumber: 94, Round: 1, CompLevel: "quals", R1: 1235, R2: 1234, R3: 1233, B1: 1232, B2: 1231, B3: 1239})
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800109 for i := 0; i < len(testDatabase); i++ {
110 db.AddToStats(testDatabase[i])
111 }
112 correct := []Stats{
Philipp Schrader80ccb662022-03-01 21:47:30 -0800113 Stats{TeamNumber: 1235, MatchNumber: 94, ShotsMissed: 2, UpperGoalShots: 2, LowerGoalShots: 2, ShotsMissedAuto: 2, UpperGoalAuto: 2, LowerGoalAuto: 2, PlayedDefense: 2, Climbing: 2},
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800114 }
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 Leaverc5fd2772022-01-29 17:00:23 -0800122}
123
124func TestReturnMatchDB(t *testing.T) {
Philipp Schrader4953cc32022-02-25 18:09:02 -0800125 db := createDatabase(t)
126 defer db.Delete()
127
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800128 correct := []Match{
Philipp Schrader1e6c0a92022-02-27 23:30:57 -0800129 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 Leaverc5fd2772022-01-29 17:00:23 -0800134 }
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 Leaverc5fd2772022-01-29 17:00:23 -0800145}
146
147func TestReturnStatsDB(t *testing.T) {
Philipp Schrader4953cc32022-02-25 18:09:02 -0800148 db := createDatabase(t)
149 defer db.Delete()
150
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800151 correct := []Stats{
Philipp Schrader80ccb662022-03-01 21:47:30 -0800152 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 Leaverc5fd2772022-01-29 17:00:23 -0800158 }
Philipp Schrader1e6c0a92022-02-27 23:30:57 -0800159 db.AddToMatch(Match{MatchNumber: 94, Round: 1, CompLevel: "quals", R1: 1235, R2: 1236, R3: 1237, B1: 1238, B2: 1239, B3: 1233})
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800160 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 Leaverc5fd2772022-01-29 17:00:23 -0800170}