Files
cheesy-arena-lite/web/setup_teams_test.go

219 lines
7.1 KiB
Go
Raw Permalink Normal View History

2014-06-05 23:09:03 -07:00
// Copyright 2014 Team 254. All Rights Reserved.
// Author: pat@patfairbank.com (Patrick Fairbank)
package web
2014-06-05 23:09:03 -07:00
import (
"fmt"
2021-05-16 11:00:29 -07:00
"github.com/Team254/cheesy-arena-lite/model"
2014-06-05 23:09:03 -07:00
"github.com/stretchr/testify/assert"
"net/http"
"net/http/httptest"
"strings"
2014-06-05 23:09:03 -07:00
"testing"
)
func TestSetupTeams(t *testing.T) {
web := setupTestWeb(t)
2014-06-05 23:09:03 -07:00
// Check that there are no teams to start.
recorder := web.getHttpResponse("/setup/teams")
2014-06-05 23:09:03 -07:00
assert.Equal(t, 200, recorder.Code)
assert.Contains(t, recorder.Body.String(), "0 teams")
// Mock the URL to download team info from.
2015-08-22 15:40:16 -07:00
teamInfoBody := `{
"website": "http://www.team254.com",
"name": "NASA Ames Research Center",
2017-09-03 23:17:32 -07:00
"city": "San Jose",
2015-08-22 15:40:16 -07:00
"rookie_year": 1999,
2017-09-03 23:17:32 -07:00
"state_prov": "CA",
2015-08-22 15:40:16 -07:00
"team_number": 254,
"location": "San Jose, CA, USA",
"key": "frc254",
2017-09-03 23:17:32 -07:00
"country": "USA",
2015-08-22 15:40:16 -07:00
"nickname": "The Cheesy Poofs"
}`
2017-09-03 23:17:32 -07:00
teamRobotsBody := `[
{
"team_key": "frc33",
"name": "Buzz 22",
"key": "frc33_2017",
"year": 2017
}
2017-09-03 23:17:32 -07:00
]`
2015-08-22 15:40:16 -07:00
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
}]`
eventBody := `{ "name": "Championship" }`
tbaServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
2017-09-03 23:17:32 -07:00
if strings.Contains(r.RequestURI, "robots") {
fmt.Fprintln(w, teamRobotsBody)
2017-09-03 23:17:32 -07:00
} else if strings.Contains(r.RequestURI, "awards") {
fmt.Fprintln(w, teamAwardsBody)
} else if strings.Contains(r.RequestURI, "team") {
fmt.Fprintln(w, teamInfoBody)
} else if strings.Contains(r.RequestURI, "event") {
fmt.Fprintln(w, eventBody)
} else {
http.Error(w, "Unexpected request during test", 500)
}
}))
defer tbaServer.Close()
web.arena.TbaClient.BaseUrl = tbaServer.URL
2014-06-05 23:09:03 -07:00
// Add some teams.
recorder = web.postHttpResponse("/setup/teams", "teamNumbers=254\r\nnotateam\r\n1114\r\n")
assert.Equal(t, 303, recorder.Code)
recorder = web.getHttpResponse("/setup/teams")
2014-06-05 23:09:03 -07:00
assert.Contains(t, recorder.Body.String(), "2 teams")
assert.Contains(t, recorder.Body.String(), "The Cheesy Poofs")
assert.Contains(t, recorder.Body.String(), "1114")
// Add another team.
recorder = web.postHttpResponse("/setup/teams", "teamNumbers=33")
assert.Equal(t, 303, recorder.Code)
recorder = web.getHttpResponse("/setup/teams")
2014-06-05 23:09:03 -07:00
assert.Contains(t, recorder.Body.String(), "3 teams")
assert.Contains(t, recorder.Body.String(), "33")
// Edit a team.
recorder = web.getHttpResponse("/setup/teams/254/edit")
2014-06-05 23:09:03 -07:00
assert.Equal(t, 200, recorder.Code)
assert.Contains(t, recorder.Body.String(), "The Cheesy Poofs")
recorder = web.postHttpResponse("/setup/teams/254/edit", "nickname=Teh Chezy Pofs")
assert.Equal(t, 303, recorder.Code)
recorder = web.getHttpResponse("/setup/teams")
2014-06-05 23:09:03 -07:00
assert.Contains(t, recorder.Body.String(), "Teh Chezy Pofs")
// Re-download team info from TBA.
recorder = web.getHttpResponse("/setup/teams/refresh")
assert.Equal(t, 303, recorder.Code)
recorder = web.getHttpResponse("/setup/teams")
assert.Contains(t, recorder.Body.String(), "The Cheesy Poofs")
assert.NotContains(t, recorder.Body.String(), "Teh Chezy Pofs")
2014-06-05 23:09:03 -07:00
// Delete a team.
recorder = web.postHttpResponse("/setup/teams/1114/delete", "")
assert.Equal(t, 303, recorder.Code)
recorder = web.getHttpResponse("/setup/teams")
2014-06-05 23:09:03 -07:00
assert.Contains(t, recorder.Body.String(), "2 teams")
// Test clearing all teams.
recorder = web.postHttpResponse("/setup/teams/clear", "")
assert.Equal(t, 303, recorder.Code)
recorder = web.getHttpResponse("/setup/teams")
2014-06-05 23:09:03 -07:00
assert.Contains(t, recorder.Body.String(), "0 teams")
}
func TestSetupTeamsDisallowModification(t *testing.T) {
web := setupTestWeb(t)
web.arena.Database.CreateTeam(&model.Team{Id: 254, Nickname: "The Cheesy Poofs"})
web.arena.Database.CreateMatch(&model.Match{Type: "qualification"})
2014-06-05 23:09:03 -07:00
// Disallow adding teams.
recorder := web.postHttpResponse("/setup/teams", "teamNumbers=33")
2014-06-05 23:09:03 -07:00
assert.Contains(t, recorder.Body.String(), "can't modify")
assert.Contains(t, recorder.Body.String(), "1 teams")
assert.Contains(t, recorder.Body.String(), "The Cheesy Poofs")
// Disallow deleting team.
recorder = web.postHttpResponse("/setup/teams/254/delete", "")
2014-06-05 23:09:03 -07:00
assert.Contains(t, recorder.Body.String(), "can't modify")
assert.Contains(t, recorder.Body.String(), "1 teams")
assert.Contains(t, recorder.Body.String(), "The Cheesy Poofs")
// Disallow clearing all teams.
recorder = web.postHttpResponse("/setup/teams/clear", "")
2014-06-05 23:09:03 -07:00
assert.Contains(t, recorder.Body.String(), "can't modify")
assert.Contains(t, recorder.Body.String(), "1 teams")
assert.Contains(t, recorder.Body.String(), "The Cheesy Poofs")
// Allow editing a team.
recorder = web.postHttpResponse("/setup/teams/254/edit", "nickname=Teh Chezy Pofs")
assert.Equal(t, 303, recorder.Code)
recorder = web.getHttpResponse("/setup/teams")
2014-06-05 23:09:03 -07:00
assert.NotContains(t, recorder.Body.String(), "can't modify")
assert.Contains(t, recorder.Body.String(), "1 teams")
assert.Contains(t, recorder.Body.String(), "Teh Chezy Pofs")
}
func TestSetupTeamsBadReqest(t *testing.T) {
web := setupTestWeb(t)
2014-06-05 23:09:03 -07:00
recorder := web.getHttpResponse("/setup/teams/254/edit")
2014-06-05 23:09:03 -07:00
assert.Equal(t, 400, recorder.Code)
assert.Contains(t, recorder.Body.String(), "No such team")
recorder = web.postHttpResponse("/setup/teams/254/edit", "")
2014-06-05 23:09:03 -07:00
assert.Equal(t, 400, recorder.Code)
assert.Contains(t, recorder.Body.String(), "No such team")
recorder = web.postHttpResponse("/setup/teams/254/delete", "")
2014-06-05 23:09:03 -07:00
assert.Equal(t, 400, recorder.Code)
assert.Contains(t, recorder.Body.String(), "No such team")
}
func TestSetupTeamsWpaKeys(t *testing.T) {
web := setupTestWeb(t)
web.arena.EventSettings.NetworkSecurityEnabled = true
team1 := &model.Team{Id: 254, WpaKey: "aaaaaaaa"}
team2 := &model.Team{Id: 1114}
web.arena.Database.CreateTeam(team1)
web.arena.Database.CreateTeam(team2)
recorder := web.getHttpResponse("/setup/teams/generate_wpa_keys?all=false")
assert.Equal(t, 303, recorder.Code)
team1, _ = web.arena.Database.GetTeamById(254)
team2, _ = web.arena.Database.GetTeamById(1114)
assert.Equal(t, "aaaaaaaa", team1.WpaKey)
assert.Equal(t, 8, len(team2.WpaKey))
recorder = web.getHttpResponse("/setup/teams/generate_wpa_keys?all=true")
assert.Equal(t, 303, recorder.Code)
team1, _ = web.arena.Database.GetTeamById(254)
team3, _ := web.arena.Database.GetTeamById(1114)
assert.NotEqual(t, "aaaaaaaa", team1.WpaKey)
assert.Equal(t, 8, len(team1.WpaKey))
assert.NotEqual(t, team2.WpaKey, team3.WpaKey)
assert.Equal(t, 8, len(team3.WpaKey))
// Disallow invalid manual WPA keys.
recorder = web.postHttpResponse("/setup/teams/254/edit", "wpa_key=1234567")
assert.Equal(t, 500, recorder.Code)
assert.Contains(t, recorder.Body.String(), "WPA key must be between 8 and 63 characters")
}
2014-09-05 22:17:12 -07:00
func TestSetupTeamsPublish(t *testing.T) {
web := setupTestWeb(t)
web.arena.TbaClient.BaseUrl = "fakeurl"
web.arena.EventSettings.TbaPublishingEnabled = true
2014-09-05 22:17:12 -07:00
recorder := web.postHttpResponse("/setup/teams/publish", "")
2014-09-05 22:17:12 -07:00
assert.Equal(t, 500, recorder.Code)
assert.Contains(t, recorder.Body.String(), "Failed to publish teams")
}