blob: 8460dd788b0e412a62784032bb621cf253fc71c3 [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 Schrader1e6c0a92022-02-27 23:30:57 -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 Schrader1e6c0a92022-02-27 23:30:57 -080049 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})
Sabina Leaverc5fd2772022-01-29 17:00:23 -080050 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{
Philipp Schrader1e6c0a92022-02-27 23:30:57 -080067 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},
Sabina Leaverc5fd2772022-01-29 17:00:23 -080071 }
72
73 for i := 0; i < len(testDatabase); i++ {
74 db.AddToMatch(testDatabase[i])
75 }
76
77 correct := []Match{
Philipp Schrader1e6c0a92022-02-27 23:30:57 -080078 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},
Sabina Leaverc5fd2772022-01-29 17:00:23 -080080 }
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{
Philipp Schrader1e6c0a92022-02-27 23:30:57 -080096 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},
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800102 }
Philipp Schrader1e6c0a92022-02-27 23:30:57 -0800103 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 -0800104 for i := 0; i < len(testDatabase); i++ {
105 db.AddToStats(testDatabase[i])
106 }
107 correct := []Stats{
Philipp Schrader1e6c0a92022-02-27 23:30:57 -0800108 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 -0800109 }
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{
Philipp Schrader1e6c0a92022-02-27 23:30:57 -0800124 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},
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800129 }
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{
Philipp Schrader1e6c0a92022-02-27 23:30:57 -0800147 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},
Sabina Leaverc5fd2772022-01-29 17:00:23 -0800153 }
Philipp Schrader1e6c0a92022-02-27 23:30:57 -0800154 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 -0800155 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}