blob: 748bcf87116f49dbd4b2eb2e9383fe4ca90f882b [file] [log] [blame]
Yash Chainani87d06442022-04-16 20:59:47 -07001package rankings
2
3import (
Yash Chainani87d06442022-04-16 20:59:47 -07004 "net/http"
5 "reflect"
Philipp Schraderc49eaf72023-02-26 16:56:52 -08006 "strings"
Yash Chainani87d06442022-04-16 20:59:47 -07007 "testing"
8 "time"
Philipp Schradera9a79392023-03-25 13:28:31 -07009
10 "github.com/frc971/971-Robot-Code/scouting/background_task"
11 "github.com/frc971/971-Robot-Code/scouting/db"
12 "github.com/frc971/971-Robot-Code/scouting/webserver/server"
Yash Chainani87d06442022-04-16 20:59:47 -070013)
14
15type MockDatabase struct {
16 rankings []db.Ranking
17}
18
19func (database *MockDatabase) AddOrUpdateRankings(data db.Ranking) error {
20 database.rankings = append(database.rankings, data)
21 return nil
22}
23
Philipp Schraderc49eaf72023-02-26 16:56:52 -080024func ServeRankings(t *testing.T, h http.Handler) http.Handler {
Yash Chainani87d06442022-04-16 20:59:47 -070025 fn := func(w http.ResponseWriter, r *http.Request) {
Philipp Schraderc49eaf72023-02-26 16:56:52 -080026 // Make sure that the rankings are requested properly.
27 if !strings.HasSuffix(r.URL.Path, "/2016nytr/rankings") {
28 t.Error("Got unexpected URL: ", r.URL.Path)
29 }
30
Yash Chainani87d06442022-04-16 20:59:47 -070031 r.URL.Path = "scraping/test_data/2016_nytr_rankings.json"
32
33 h.ServeHTTP(w, r)
34 }
35
36 return http.HandlerFunc(fn)
37}
38
39func TestGetRankings(t *testing.T) {
40 database := MockDatabase{}
Philipp Schrader3f0e36f2023-03-25 13:49:41 -070041 scraper := background_task.New(time.Minute)
Yash Chainani87d06442022-04-16 20:59:47 -070042 tbaServer := server.NewScoutingServer()
Philipp Schraderc49eaf72023-02-26 16:56:52 -080043 tbaServer.Handle("/", ServeRankings(t, http.FileServer(http.Dir("../../"))))
Yash Chainani87d06442022-04-16 20:59:47 -070044 tbaServer.Start(8000)
45 defer tbaServer.Stop()
46
Philipp Schraderc49eaf72023-02-26 16:56:52 -080047 scraper.Start(func() {
48 GetRankings(&database, 0, "", "scouting_test_config.json")
49 })
Yash Chainani87d06442022-04-16 20:59:47 -070050 defer scraper.Stop()
51
52 for {
53 if len(database.rankings) > 0 {
54 break
55 }
56
57 time.Sleep(time.Second)
58 }
59
60 beginningThreeExpected := []db.Ranking{
Emily Markovae68b7632023-12-30 14:17:55 -080061 {TeamNumber: "359", Losses: 1, Wins: 11, Ties: 0, Rank: 1, Dq: 0},
62 {TeamNumber: "5254", Losses: 1, Wins: 11, Ties: 0, Rank: 2, Dq: 0},
63 {TeamNumber: "3990", Losses: 1, Wins: 11, Ties: 0, Rank: 3, Dq: 0},
Yash Chainani87d06442022-04-16 20:59:47 -070064 }
65
66 endThreeExpected := []db.Ranking{
Emily Markovae68b7632023-12-30 14:17:55 -080067 {TeamNumber: "5943", Losses: 10, Wins: 2, Ties: 0, Rank: 34, Dq: 0},
68 {TeamNumber: "4203", Losses: 10, Wins: 2, Ties: 0, Rank: 35, Dq: 0},
69 {TeamNumber: "5149", Losses: 10, Wins: 2, Ties: 0, Rank: 36, Dq: 0},
Yash Chainani87d06442022-04-16 20:59:47 -070070 }
71
72 if !reflect.DeepEqual(beginningThreeExpected, database.rankings[0:3]) {
73 t.Fatal("Got %#v, but expected %#v.", database.rankings[0:3], beginningThreeExpected)
74 }
75
76 if !reflect.DeepEqual(endThreeExpected, database.rankings[33:]) {
77 t.Fatal("Got %#v, but expected %#v.", database.rankings[33:], beginningThreeExpected)
78 }
79}