mirror of
https://github.com/Team254/cheesy-arena-lite.git
synced 2026-03-09 13:46:44 -04:00
Add tests for realtime score API
This commit is contained in:
122
web/scores_test.go
Normal file
122
web/scores_test.go
Normal file
@@ -0,0 +1,122 @@
|
||||
// Copyright 2020 Team 254. All Rights Reserved.
|
||||
// Author: kenschenke@gmail.com (Ken Schenke)
|
||||
|
||||
package web
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"github.com/Team254/cheesy-arena/field"
|
||||
"github.com/Team254/cheesy-arena/game"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestGetScores(t *testing.T) {
|
||||
web := setupTestWeb(t)
|
||||
|
||||
score1 := game.TestScore1()
|
||||
score2 := game.TestScore2()
|
||||
web.arena.RedScore.AutoPoints = score1.AutoPoints
|
||||
web.arena.RedScore.TeleopPoints = score1.TeleopPoints
|
||||
web.arena.RedScore.EndgamePoints = score1.EndgamePoints
|
||||
web.arena.BlueScore.AutoPoints = score2.AutoPoints
|
||||
web.arena.BlueScore.TeleopPoints = score2.TeleopPoints
|
||||
web.arena.BlueScore.EndgamePoints = score2.EndgamePoints
|
||||
|
||||
recorder := web.getHttpResponse("/api/scores")
|
||||
assert.Equal(t, 200, recorder.Code)
|
||||
|
||||
var reqScores jsonScore
|
||||
json.Unmarshal(recorder.Body.Bytes(), &reqScores)
|
||||
assert.Equal(t, score1.AutoPoints, reqScores.Red.Auto)
|
||||
assert.Equal(t, score1.TeleopPoints, reqScores.Red.Teleop)
|
||||
assert.Equal(t, score1.EndgamePoints, reqScores.Red.Endgame)
|
||||
assert.Equal(t, score2.AutoPoints, reqScores.Blue.Auto)
|
||||
assert.Equal(t, score2.TeleopPoints, reqScores.Blue.Teleop)
|
||||
assert.Equal(t, score2.EndgamePoints, reqScores.Blue.Endgame)
|
||||
}
|
||||
|
||||
func TestPatchScores(t *testing.T) {
|
||||
web := setupTestWeb(t)
|
||||
var recorder *httptest.ResponseRecorder
|
||||
|
||||
web.arena.MatchState = field.PreMatch
|
||||
recorder = web.patchHttpResponse("/api/scores", "{}")
|
||||
assert.Equal(t, 200, recorder.Code)
|
||||
assert.Equal(t, recorder.Body.String(), "Score cannot be updated in this match state")
|
||||
|
||||
score1 := game.TestScore1()
|
||||
score2 := game.TestScore2()
|
||||
web.arena.RedScore.AutoPoints = score1.AutoPoints
|
||||
web.arena.RedScore.TeleopPoints = score1.TeleopPoints
|
||||
web.arena.RedScore.EndgamePoints = score1.EndgamePoints
|
||||
web.arena.BlueScore.AutoPoints = score2.AutoPoints
|
||||
web.arena.BlueScore.TeleopPoints = score2.TeleopPoints
|
||||
web.arena.BlueScore.EndgamePoints = score2.EndgamePoints
|
||||
|
||||
web.arena.MatchState = field.PostMatch
|
||||
recorder = web.patchHttpResponse("/api/scores",
|
||||
"{\"red\":{\"auto\":5,\"teleop\":10,\"endgame\":15}}")
|
||||
assert.Equal(t, 200, recorder.Code)
|
||||
|
||||
assert.Equal(t, score1.AutoPoints + 5, web.arena.RedScore.AutoPoints)
|
||||
assert.Equal(t, score1.TeleopPoints + 10, web.arena.RedScore.TeleopPoints)
|
||||
assert.Equal(t, score1.EndgamePoints + 15, web.arena.RedScore.EndgamePoints)
|
||||
assert.Equal(t, score2.AutoPoints, web.arena.BlueScore.AutoPoints)
|
||||
assert.Equal(t, score2.TeleopPoints, web.arena.BlueScore.TeleopPoints)
|
||||
assert.Equal(t, score2.EndgamePoints, web.arena.BlueScore.EndgamePoints)
|
||||
|
||||
recorder = web.patchHttpResponse("/api/scores",
|
||||
"{\"blue\":{\"auto\":-5,\"teleop\":-10,\"endgame\":-15}}")
|
||||
assert.Equal(t, 200, recorder.Code)
|
||||
|
||||
assert.Equal(t, score1.AutoPoints + 5, web.arena.RedScore.AutoPoints)
|
||||
assert.Equal(t, score1.TeleopPoints + 10, web.arena.RedScore.TeleopPoints)
|
||||
assert.Equal(t, score1.EndgamePoints + 15, web.arena.RedScore.EndgamePoints)
|
||||
assert.Equal(t, score2.AutoPoints - 5, web.arena.BlueScore.AutoPoints)
|
||||
assert.Equal(t, score2.TeleopPoints - 10, web.arena.BlueScore.TeleopPoints)
|
||||
assert.Equal(t, score2.EndgamePoints - 15, web.arena.BlueScore.EndgamePoints)
|
||||
}
|
||||
|
||||
func TestPutScores(t *testing.T) {
|
||||
web := setupTestWeb(t)
|
||||
var recorder *httptest.ResponseRecorder
|
||||
|
||||
web.arena.MatchState = field.PreMatch
|
||||
recorder = web.putHttpResponse("/api/scores", "{}")
|
||||
assert.Equal(t, 200, recorder.Code)
|
||||
assert.Equal(t, recorder.Body.String(), "Score cannot be updated in this match state")
|
||||
|
||||
score1 := game.TestScore1()
|
||||
score2 := game.TestScore2()
|
||||
web.arena.RedScore.AutoPoints = score1.AutoPoints
|
||||
web.arena.RedScore.TeleopPoints = score1.TeleopPoints
|
||||
web.arena.RedScore.EndgamePoints = score1.EndgamePoints
|
||||
web.arena.BlueScore.AutoPoints = score2.AutoPoints
|
||||
web.arena.BlueScore.TeleopPoints = score2.TeleopPoints
|
||||
web.arena.BlueScore.EndgamePoints = score2.EndgamePoints
|
||||
|
||||
web.arena.MatchState = field.PostMatch
|
||||
recorder = web.putHttpResponse("/api/scores",
|
||||
"{\"red\":{\"auto\":5,\"teleop\":10,\"endgame\":15}}")
|
||||
assert.Equal(t, 200, recorder.Code)
|
||||
|
||||
assert.Equal(t, 5, web.arena.RedScore.AutoPoints)
|
||||
assert.Equal(t, 10, web.arena.RedScore.TeleopPoints)
|
||||
assert.Equal(t, 15, web.arena.RedScore.EndgamePoints)
|
||||
assert.Equal(t, 0, web.arena.BlueScore.AutoPoints)
|
||||
assert.Equal(t, 0, web.arena.BlueScore.TeleopPoints)
|
||||
assert.Equal(t, 0, web.arena.BlueScore.EndgamePoints)
|
||||
|
||||
recorder = web.putHttpResponse("/api/scores",
|
||||
"{\"blue\":{\"auto\":5,\"teleop\":10,\"endgame\":15}}")
|
||||
assert.Equal(t, 200, recorder.Code)
|
||||
|
||||
assert.Equal(t, 0, web.arena.RedScore.AutoPoints)
|
||||
assert.Equal(t, 0, web.arena.RedScore.TeleopPoints)
|
||||
assert.Equal(t, 0, web.arena.RedScore.EndgamePoints)
|
||||
assert.Equal(t, 5, web.arena.BlueScore.AutoPoints)
|
||||
assert.Equal(t, 10, web.arena.BlueScore.TeleopPoints)
|
||||
assert.Equal(t, 15, web.arena.BlueScore.EndgamePoints)
|
||||
}
|
||||
@@ -40,6 +40,14 @@ func (web *Web) getHttpResponseWithHeaders(path string, headers map[string]strin
|
||||
return recorder
|
||||
}
|
||||
|
||||
func (web *Web) patchHttpResponse(path string, body string) *httptest.ResponseRecorder {
|
||||
recorder := httptest.NewRecorder()
|
||||
req, _ := http.NewRequest("PATCH", path, strings.NewReader(body))
|
||||
req.Header.Set("Content-Type", "text/plain")
|
||||
web.newHandler().ServeHTTP(recorder, req)
|
||||
return recorder
|
||||
}
|
||||
|
||||
func (web *Web) postHttpResponse(path string, body string) *httptest.ResponseRecorder {
|
||||
recorder := httptest.NewRecorder()
|
||||
req, _ := http.NewRequest("POST", path, strings.NewReader(body))
|
||||
@@ -48,6 +56,14 @@ func (web *Web) postHttpResponse(path string, body string) *httptest.ResponseRec
|
||||
return recorder
|
||||
}
|
||||
|
||||
func (web *Web) putHttpResponse(path string, body string) *httptest.ResponseRecorder {
|
||||
recorder := httptest.NewRecorder()
|
||||
req, _ := http.NewRequest("PUT", path, strings.NewReader(body))
|
||||
req.Header.Set("Content-Type", "text/plain")
|
||||
web.newHandler().ServeHTTP(recorder, req)
|
||||
return recorder
|
||||
}
|
||||
|
||||
// Starts a real local HTTP server that can be used by more sophisticated tests.
|
||||
func (web *Web) startTestServer() (*httptest.Server, string) {
|
||||
server := httptest.NewServer(web.newHandler())
|
||||
|
||||
Reference in New Issue
Block a user