From 6ff087546d678c5d7f486edd52fad6b089eaf2d5 Mon Sep 17 00:00:00 2001 From: Patrick Fairbank Date: Sat, 22 Aug 2015 15:40:16 -0700 Subject: [PATCH] Fixed broken tests. --- alliance_station_display.go | 4 ++-- referee_display_test.go | 9 +++---- setup_teams.go | 12 ++++++---- setup_teams_test.go | 47 +++++++++++++++++++++++++++++++++---- tba.go | 39 ++++++++++++++++++------------ 5 files changed, 80 insertions(+), 31 deletions(-) diff --git a/alliance_station_display.go b/alliance_station_display.go index 084c961..0915e28 100644 --- a/alliance_station_display.go +++ b/alliance_station_display.go @@ -95,7 +95,7 @@ func AllianceStationDisplayWebsocketHandler(w http.ResponseWriter, r *http.Reque data = struct { AllianceStation string Teams map[string]*Team - Rankings map[string]*Ranking + Rankings map[string]*Ranking }{station, map[string]*Team{"R1": mainArena.AllianceStations["R1"].team, "R2": mainArena.AllianceStations["R2"].team, "R3": mainArena.AllianceStations["R3"].team, "B1": mainArena.AllianceStations["B1"].team, "B2": mainArena.AllianceStations["B2"].team, @@ -143,7 +143,7 @@ func AllianceStationDisplayWebsocketHandler(w http.ResponseWriter, r *http.Reque message = struct { AllianceStation string Teams map[string]*Team - Rankings map[string]*Ranking + Rankings map[string]*Ranking }{station, map[string]*Team{"R1": mainArena.AllianceStations["R1"].team, "R2": mainArena.AllianceStations["R2"].team, "R3": mainArena.AllianceStations["R3"].team, "B1": mainArena.AllianceStations["B1"].team, "B2": mainArena.AllianceStations["B2"].team, diff --git a/referee_display_test.go b/referee_display_test.go index 93b3116..00623d9 100644 --- a/referee_display_test.go +++ b/referee_display_test.go @@ -113,16 +113,13 @@ func TestRefereeDisplayWebsocket(t *testing.T) { mainArena.MatchState = POST_MATCH ws.Write("signalReset", nil) time.Sleep(time.Millisecond * 10) - assert.True(t, mainArena.redRealtimeScore.FieldReset) - assert.True(t, mainArena.blueRealtimeScore.FieldReset) + assert.Equal(t, "fieldReset", mainArena.allianceStationDisplayScreen) assert.False(t, mainArena.redRealtimeScore.FoulsCommitted) assert.False(t, mainArena.blueRealtimeScore.FoulsCommitted) - mainArena.redRealtimeScore.FieldReset = false - mainArena.blueRealtimeScore.FieldReset = false + mainArena.allianceStationDisplayScreen = "logo" ws.Write("commitMatch", nil) readWebsocketType(t, ws, "reload") - assert.True(t, mainArena.redRealtimeScore.FieldReset) - assert.True(t, mainArena.blueRealtimeScore.FieldReset) + assert.Equal(t, "fieldReset", mainArena.allianceStationDisplayScreen) assert.True(t, mainArena.redRealtimeScore.FoulsCommitted) assert.True(t, mainArena.blueRealtimeScore.FoulsCommitted) diff --git a/setup_teams.go b/setup_teams.go index fb84b55..1d0b884 100644 --- a/setup_teams.go +++ b/setup_teams.go @@ -19,8 +19,6 @@ import ( const wpaKeyLength = 8 -var officialTeamInfoUrl = "http://www.thebluealliance.com/api/v2/team/" - // Shows the team list. func TeamsGetHandler(w http.ResponseWriter, r *http.Request) { renderTeams(w, r, false) @@ -236,7 +234,10 @@ func getOfficialTeamInfo(teamId int) (*Team, error) { // If team info download is enabled, download the current teams data (caching isn't easy with the new paging system in the api) if eventSettings.TBADownloadEnabled { - var tbaTeam *TbaTeam = getTeamFromTba(teamId) + tbaTeam, err := getTeamFromTba(teamId) + if err != nil { + return nil, err + } // Check if the result is valid. If a team is not found, just return a basic team if tbaTeam == nil { @@ -246,7 +247,10 @@ func getOfficialTeamInfo(teamId int) (*Team, error) { var recentAwards []TbaAward if eventSettings.TBAAwardsDownloadEnabled { - recentAwards = getTeamAwardsFromTba(teamId) + recentAwards, err = getTeamAwardsFromTba(teamId) + if err != nil { + return nil, err + } } var accomplishmentsBuffer bytes.Buffer diff --git a/setup_teams_test.go b/setup_teams_test.go index 14764bf..5a3395c 100644 --- a/setup_teams_test.go +++ b/setup_teams_test.go @@ -26,14 +26,53 @@ func TestSetupTeams(t *testing.T) { assert.Contains(t, recorder.Body.String(), "0 teams") // Mock the URL to download team info from. - teamInfoBody := "
\nID_team\tteam_number\tteam_name\tteam_name_short\tteam_city\tteam_stateprov\t" +
-		"team_country\tteam_nickname team_rookieyear robot_name\n1\t254\tNASA\tChezy\tThe Cheesy Poofs\t" +
-		"San Jose\tCA\tUSA\t1999\tBarrage\n
" + teamInfoBody := `{ + "website": "http://www.team254.com", + "name": "NASA Ames Research Center", + "locality": "San Jose", + "rookie_year": 1999, + "region": "CA", + "team_number": 254, + "location": "San Jose, CA, USA", + "key": "frc254", + "country_name": "USA", + "nickname": "The Cheesy Poofs" + }` teamInfoServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, teamInfoBody) })) defer teamInfoServer.Close() - officialTeamInfoUrl = teamInfoServer.URL + tbaTeamBaseUrl = teamInfoServer.URL + + teamAwardsBody := `[{ + "event_key": "2014cmp", + "award_type": 1, + "name": "Championship Winners", + "recipient_list": [ + { + "team_number": 254, + "awardee": null + }, + { + "team_number": 2848, + "awardee": null + }, + { + "team_number": 469, + "awardee": null + }, + { + "team_number": 74, + "awardee": null + } + ], + "year": 2014 + }]` + teamAwardsServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + fmt.Fprintln(w, teamAwardsBody) + })) + defer teamAwardsServer.Close() + tbaTeamAwardsBaseUrl = teamAwardsServer.URL // Add some teams. recorder = postHttpResponse("/setup/teams", "teamNumbers=254\r\nnotateam\r\n1114\r\n") diff --git a/tba.go b/tba.go index 380bc6d..7add9c7 100644 --- a/tba.go +++ b/tba.go @@ -15,7 +15,10 @@ import ( "strconv" ) +// Distinct endpoints are necessary for testing. var tbaBaseUrl = "http://www.thebluealliance.com" +var tbaTeamBaseUrl = tbaBaseUrl +var tbaTeamAwardsBaseUrl = tbaBaseUrl // MODELS @@ -71,38 +74,44 @@ type TbaAward struct { } // DATA RETRIEVAL -func getTeamFromTba(teamNumber int) *TbaTeam { - url := fmt.Sprint("/api/v2/team/", string(getTbaTeam(teamNumber))) - resp, _ := getTbaRequest(url) +func getTeamFromTba(teamNumber int) (*TbaTeam, error) { + url := fmt.Sprintf("%s/api/v2/team/%s", tbaTeamBaseUrl, getTbaTeam(teamNumber)) + resp, err := getTbaRequest(url) + if err != nil { + return nil, err + } // Get the response and handle errors defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { - return nil + return nil, err } var teamData TbaTeam - json.Unmarshal(body, &teamData) + err = json.Unmarshal(body, &teamData) - return &teamData + return &teamData, err } -func getTeamAwardsFromTba(teamNumber int) []TbaAward { - url := fmt.Sprint("/api/v2/team/", string(getTbaTeam(teamNumber)), "/history/awards") - resp, _ := getTbaRequest(url) +func getTeamAwardsFromTba(teamNumber int) ([]TbaAward, error) { + url := fmt.Sprintf("%s/api/v2/team/%s/history/awards", tbaTeamAwardsBaseUrl, getTbaTeam(teamNumber)) + resp, err := getTbaRequest(url) + if err != nil { + return nil, err + } // Get the response and handle errors defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { - return nil + return nil, err } var awardData []TbaAward - json.Unmarshal(body, &awardData) + err = json.Unmarshal(body, &awardData) - return awardData + return awardData, err } // PUBLISHING @@ -212,7 +221,7 @@ func PublishRankings() error { } // Build a JSON object of TBA-format rankings. - breakdowns := []string{"QS", "Assist", "Auto", "T&C", "G&F", "wins", "losses", "ties"} + breakdowns := []string{"QA", "Coopertition", "Auto", "Container", "Tote", "Litter"} tbaRankings := make([]TbaRanking, len(rankings)) for i, ranking := range rankings { tbaRankings[i] = TbaRanking{getTbaTeam(ranking.TeamId), ranking.Rank, ranking.QualificationAverage, @@ -290,10 +299,10 @@ func postTbaRequest(resource string, body []byte) (*http.Response, error) { } // Sends a GET request to the TBA API -func getTbaRequest(path string) (*http.Response, error) { +func getTbaRequest(url string) (*http.Response, error) { // Make an HTTP GET request with the TBA auth headers client := &http.Client{} - req, err := http.NewRequest("GET", fmt.Sprint(tbaBaseUrl, path), nil) + req, err := http.NewRequest("GET", url, nil) if err != nil { return nil, err }