mirror of
https://github.com/Team254/cheesy-arena-lite.git
synced 2026-03-09 05:36:45 -04:00
128 lines
4.8 KiB
Go
128 lines
4.8 KiB
Go
// Copyright 2014 Team 254. All Rights Reserved.
|
|
// Author: pat@patfairbank.com (Patrick Fairbank)
|
|
|
|
package web
|
|
|
|
import (
|
|
"bytes"
|
|
"github.com/Team254/cheesy-arena-lite/game"
|
|
"github.com/Team254/cheesy-arena-lite/model"
|
|
"github.com/Team254/cheesy-arena-lite/tournament"
|
|
"github.com/stretchr/testify/assert"
|
|
"io"
|
|
"mime/multipart"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
)
|
|
|
|
func TestSetupSettings(t *testing.T) {
|
|
web := setupTestWeb(t)
|
|
|
|
// Check the default setting values.
|
|
recorder := web.getHttpResponse("/setup/settings")
|
|
assert.Equal(t, 200, recorder.Code)
|
|
assert.Contains(t, recorder.Body.String(), "Untitled Event")
|
|
assert.Contains(t, recorder.Body.String(), "8")
|
|
assert.NotContains(t, recorder.Body.String(), "tbaPublishingEnabled\" checked")
|
|
|
|
// Change the settings and check the response.
|
|
recorder = web.postHttpResponse("/setup/settings", "name=Chezy Champs&code=CC&elimType=single&numElimAlliances=16&"+
|
|
"tbaPublishingEnabled=on&tbaEventCode=2014cc&tbaSecretId=secretId&tbaSecret=tbasec")
|
|
assert.Equal(t, 303, recorder.Code)
|
|
recorder = web.getHttpResponse("/setup/settings")
|
|
assert.Contains(t, recorder.Body.String(), "Chezy Champs")
|
|
assert.Contains(t, recorder.Body.String(), "16")
|
|
assert.Contains(t, recorder.Body.String(), "tbaPublishingEnabled\" checked")
|
|
assert.Contains(t, recorder.Body.String(), "2014cc")
|
|
assert.Contains(t, recorder.Body.String(), "secretId")
|
|
assert.Contains(t, recorder.Body.String(), "tbasec")
|
|
}
|
|
|
|
func TestSetupSettingsDoubleElimination(t *testing.T) {
|
|
web := setupTestWeb(t)
|
|
|
|
recorder := web.postHttpResponse("/setup/settings", "elimType=double&numElimAlliances=3")
|
|
assert.Equal(t, 303, recorder.Code)
|
|
assert.Equal(t, "double", web.arena.EventSettings.ElimType)
|
|
assert.Equal(t, 8, web.arena.EventSettings.NumElimAlliances)
|
|
}
|
|
|
|
func TestSetupSettingsInvalidValues(t *testing.T) {
|
|
web := setupTestWeb(t)
|
|
|
|
// Invalid number of alliances.
|
|
recorder := web.postHttpResponse("/setup/settings", "numAlliances=1")
|
|
assert.Contains(t, recorder.Body.String(), "must be between 2 and 16")
|
|
}
|
|
|
|
func TestSetupSettingsClearDb(t *testing.T) {
|
|
web := setupTestWeb(t)
|
|
|
|
assert.Nil(t, web.arena.Database.CreateTeam(&model.Team{Id: 254}))
|
|
assert.Nil(t, web.arena.Database.CreateMatch(&model.Match{Type: "qualification"}))
|
|
assert.Nil(t, web.arena.Database.CreateMatchResult(new(model.MatchResult)))
|
|
assert.Nil(t, web.arena.Database.CreateRanking(&game.Ranking{TeamId: 254}))
|
|
assert.Nil(t, web.arena.Database.CreateAlliance(&model.Alliance{Id: 1}))
|
|
recorder := web.postHttpResponse("/setup/db/clear", "")
|
|
assert.Equal(t, 303, recorder.Code)
|
|
|
|
teams, _ := web.arena.Database.GetAllTeams()
|
|
assert.NotEmpty(t, teams)
|
|
matches, _ := web.arena.Database.GetMatchesByType("qualification")
|
|
assert.Empty(t, matches)
|
|
rankings, _ := web.arena.Database.GetAllRankings()
|
|
assert.Empty(t, rankings)
|
|
tournament.CalculateRankings(web.arena.Database, false)
|
|
assert.Empty(t, rankings)
|
|
alliances, _ := web.arena.Database.GetAllAlliances()
|
|
assert.Empty(t, alliances)
|
|
assert.Empty(t, web.arena.AllianceSelectionAlliances)
|
|
}
|
|
|
|
func TestSetupSettingsBackupRestoreDb(t *testing.T) {
|
|
web := setupTestWeb(t)
|
|
|
|
// Modify a parameter so that we know when the database has been restored.
|
|
web.arena.EventSettings.Name = "Chezy Champs"
|
|
assert.Nil(t, web.arena.Database.UpdateEventSettings(web.arena.EventSettings))
|
|
|
|
// Back up the database.
|
|
recorder := web.getHttpResponse("/setup/db/save")
|
|
assert.Equal(t, 200, recorder.Code)
|
|
assert.Equal(t, "application/octet-stream", recorder.HeaderMap["Content-Type"][0])
|
|
backupBody := recorder.Body
|
|
|
|
// Wipe the database to reset the defaults.
|
|
web = setupTestWeb(t)
|
|
assert.NotEqual(t, "Chezy Champs", web.arena.EventSettings.Name)
|
|
|
|
// Check restoring with a missing file.
|
|
recorder = web.postHttpResponse("/setup/db/restore", "")
|
|
assert.Contains(t, recorder.Body.String(), "No database backup file was specified")
|
|
assert.NotEqual(t, "Chezy Champs", web.arena.EventSettings.Name)
|
|
|
|
// Check restoring with a corrupt file.
|
|
recorder = web.postFileHttpResponse("/setup/db/restore", "databaseFile",
|
|
bytes.NewBufferString("invalid"))
|
|
assert.Contains(t, recorder.Body.String(), "Could not read uploaded database backup file")
|
|
assert.NotEqual(t, "Chezy Champs", web.arena.EventSettings.Name)
|
|
|
|
// Check restoring with the backup retrieved before.
|
|
recorder = web.postFileHttpResponse("/setup/db/restore", "databaseFile", backupBody)
|
|
assert.Equal(t, "Chezy Champs", web.arena.EventSettings.Name)
|
|
}
|
|
|
|
func (web *Web) postFileHttpResponse(path string, paramName string, file *bytes.Buffer) *httptest.ResponseRecorder {
|
|
body := new(bytes.Buffer)
|
|
writer := multipart.NewWriter(body)
|
|
part, _ := writer.CreateFormFile(paramName, "file.ext")
|
|
io.Copy(part, file)
|
|
writer.Close()
|
|
recorder := httptest.NewRecorder()
|
|
req, _ := http.NewRequest("POST", path, body)
|
|
req.Header.Set("Content-Type", writer.FormDataContentType())
|
|
web.newHandler().ServeHTTP(recorder, req)
|
|
return recorder
|
|
}
|