blob: aa23c7606d5850aa717b8be70a6114f4476c0d95 [file] [log] [blame]
Yash Chainani87d06442022-04-16 20:59:47 -07001package rankings
2
3import (
4 "github.com/frc971/971-Robot-Code/scouting/db"
5 "github.com/frc971/971-Robot-Code/scouting/webserver/server"
6 "net/http"
7 "reflect"
8 "testing"
9 "time"
10)
11
12type MockDatabase struct {
13 rankings []db.Ranking
14}
15
16func (database *MockDatabase) AddOrUpdateRankings(data db.Ranking) error {
17 database.rankings = append(database.rankings, data)
18 return nil
19}
20
21func ServeRankings(h http.Handler) http.Handler {
22 fn := func(w http.ResponseWriter, r *http.Request) {
23 r.URL.Path = "scraping/test_data/2016_nytr_rankings.json"
24
25 h.ServeHTTP(w, r)
26 }
27
28 return http.HandlerFunc(fn)
29}
30
31func TestGetRankings(t *testing.T) {
32 database := MockDatabase{}
Yash Chainani37261d42022-04-19 16:21:27 -070033 scraper := RankingScraper{}
Yash Chainani87d06442022-04-16 20:59:47 -070034 tbaServer := server.NewScoutingServer()
35 tbaServer.Handle("/", ServeRankings(http.FileServer(http.Dir("../../"))))
36 tbaServer.Start(8000)
37 defer tbaServer.Stop()
38
Yash Chainani37261d42022-04-19 16:21:27 -070039 scraper.Start(&database, 0, "", "scouting_test_config.json")
Yash Chainani87d06442022-04-16 20:59:47 -070040 defer scraper.Stop()
41
42 for {
43 if len(database.rankings) > 0 {
44 break
45 }
46
47 time.Sleep(time.Second)
48 }
49
50 beginningThreeExpected := []db.Ranking{
51 {TeamNumber: 359, Losses: 1, Wins: 11, Ties: 0, Rank: 1, Dq: 0},
52 {TeamNumber: 5254, Losses: 1, Wins: 11, Ties: 0, Rank: 2, Dq: 0},
53 {TeamNumber: 3990, Losses: 1, Wins: 11, Ties: 0, Rank: 3, Dq: 0},
54 }
55
56 endThreeExpected := []db.Ranking{
57 {TeamNumber: 5943, Losses: 10, Wins: 2, Ties: 0, Rank: 34, Dq: 0},
58 {TeamNumber: 4203, Losses: 10, Wins: 2, Ties: 0, Rank: 35, Dq: 0},
59 {TeamNumber: 5149, Losses: 10, Wins: 2, Ties: 0, Rank: 36, Dq: 0},
60 }
61
62 if !reflect.DeepEqual(beginningThreeExpected, database.rankings[0:3]) {
63 t.Fatal("Got %#v, but expected %#v.", database.rankings[0:3], beginningThreeExpected)
64 }
65
66 if !reflect.DeepEqual(endThreeExpected, database.rankings[33:]) {
67 t.Fatal("Got %#v, but expected %#v.", database.rankings[33:], beginningThreeExpected)
68 }
69}