blob: 39f12e3cf223ab14762cd8e4b6d120842b50050a [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
Sabina Leaverc5fd2772022-01-29 17:00:23 -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}}
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 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{
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 Leaverc5fd2772022-01-29 17:00:23 -080060}
61
62func TestQueryMatchDB(t *testing.T) {
Philipp Schrader4953cc32022-02-25 18:09:02 -080063 db := createDatabase(t)
64 defer db.Delete()
Sabina Leaverc5fd2772022-01-29 17:00:23 -080065
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 Schrader4953cc32022-02-25 18:09:02 -080083 if error_ != nil {
84 t.Fatal("Failed to query matches for 538: ", error_)
85 }
Sabina Leaverc5fd2772022-01-29 17:00:23 -080086 if !reflect.DeepEqual(correct, got) {
87 t.Fatalf("Got %#v,\nbut expected %#v.", got, correct)
88 }
Sabina Leaverc5fd2772022-01-29 17:00:23 -080089}
90
91func TestQueryStatsDB(t *testing.T) {
Philipp Schrader4953cc32022-02-25 18:09:02 -080092 db := createDatabase(t)
93 defer db.Delete()
94
Sabina Leaverc5fd2772022-01-29 17:00:23 -080095 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 Leaverc5fd2772022-01-29 17:00:23 -0800117}
118
119func TestReturnMatchDB(t *testing.T) {
Philipp Schrader4953cc32022-02-25 18:09:02 -0800120 db := createDatabase(t)
121 defer db.Delete()
122
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800123 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 Leaverc5fd2772022-01-29 17:00:23 -0800140}
141
142func TestReturnStatsDB(t *testing.T) {
Philipp Schrader4953cc32022-02-25 18:09:02 -0800143 db := createDatabase(t)
144 defer db.Delete()
145
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800146 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 Leaverc5fd2772022-01-29 17:00:23 -0800165}