Files
cheesy-arena-lite/setup_alliance_selection_test.go

257 lines
9.2 KiB
Go
Raw Normal View History

2014-06-10 21:45:40 -07:00
// Copyright 2014 Team 254. All Rights Reserved.
// Author: pat@patfairbank.com (Patrick Fairbank)
package main
import (
"github.com/stretchr/testify/assert"
"testing"
)
func TestSetupAllianceSelection(t *testing.T) {
clearDb()
defer clearDb()
var err error
db, err = OpenDatabase(testDbPath)
assert.Nil(t, err)
defer db.Close()
cachedAlliances = [][]*AllianceTeam{}
cachedRankedTeams = []*RankedTeam{}
eventSettings, _ = db.GetEventSettings()
eventSettings.NumElimAlliances = 15
eventSettings.SelectionRound3Order = "L"
for i := 1; i <= 10; i++ {
db.CreateRanking(&Ranking{TeamId: 100 + i, Rank: i})
}
// Check that there are no alliance placeholders to start.
recorder := getHttpResponse("/setup/alliance_selection")
assert.Equal(t, 200, recorder.Code)
assert.NotContains(t, recorder.Body.String(), "Captain")
assert.NotContains(t, recorder.Body.String(), ">110<")
// Start the alliance selection.
recorder = postHttpResponse("/setup/alliance_selection/start", "")
assert.Equal(t, 302, recorder.Code)
if assert.Equal(t, 15, len(cachedAlliances)) {
assert.Equal(t, 4, len(cachedAlliances[0]))
}
recorder = getHttpResponse("/setup/alliance_selection")
assert.Contains(t, recorder.Body.String(), "Captain")
assert.Contains(t, recorder.Body.String(), ">110<")
// Reset the alliance selection.
recorder = postHttpResponse("/setup/alliance_selection/reset", "")
assert.Equal(t, 302, recorder.Code)
assert.NotContains(t, recorder.Body.String(), "Captain")
assert.NotContains(t, recorder.Body.String(), ">110<")
eventSettings.NumElimAlliances = 3
eventSettings.SelectionRound3Order = ""
recorder = postHttpResponse("/setup/alliance_selection/start", "")
assert.Equal(t, 302, recorder.Code)
if assert.Equal(t, 3, len(cachedAlliances)) {
assert.Equal(t, 3, len(cachedAlliances[0]))
}
// Update one team at a time.
recorder = postHttpResponse("/setup/alliance_selection", "selection0_0=110")
assert.Equal(t, 302, recorder.Code)
assert.Equal(t, 110, cachedAlliances[0][0].TeamId)
recorder = getHttpResponse("/setup/alliance_selection")
assert.Contains(t, recorder.Body.String(), "\"110\"")
assert.NotContains(t, recorder.Body.String(), ">110<")
// Update multiple teams at a time.
recorder = postHttpResponse("/setup/alliance_selection", "selection0_0=101&selection0_1=102&selection1_0=103")
assert.Equal(t, 302, recorder.Code)
assert.Equal(t, 101, cachedAlliances[0][0].TeamId)
assert.Equal(t, 102, cachedAlliances[0][1].TeamId)
assert.Equal(t, 103, cachedAlliances[1][0].TeamId)
recorder = getHttpResponse("/setup/alliance_selection")
assert.Contains(t, recorder.Body.String(), ">110<")
// Update remainder of teams.
recorder = postHttpResponse("/setup/alliance_selection", "selection0_0=101&selection0_1=102&"+
"selection0_2=103&selection1_0=104&selection1_1=105&selection1_2=106&selection2_0=107&selection2_1=108&"+
"selection2_2=109")
assert.Equal(t, 302, recorder.Code)
recorder = getHttpResponse("/setup/alliance_selection")
assert.Contains(t, recorder.Body.String(), ">110<")
// Finalize alliance selection.
2014-07-30 22:55:14 -07:00
recorder = postHttpResponse("/setup/alliance_selection/finalize", "startTime=2014-01-01 01:00:00 PM")
2014-06-10 21:45:40 -07:00
assert.Equal(t, 302, recorder.Code)
alliances, err := db.GetAllAlliances()
assert.Nil(t, err)
if assert.Equal(t, 3, len(alliances)) {
assert.Equal(t, 101, alliances[0][0].TeamId)
assert.Equal(t, 105, alliances[1][1].TeamId)
assert.Equal(t, 109, alliances[2][2].TeamId)
}
matches, err := db.GetMatchesByType("elimination")
assert.Nil(t, err)
assert.Equal(t, 6, len(matches))
}
func TestSetupAllianceSelectionErrors(t *testing.T) {
clearDb()
defer clearDb()
var err error
db, err = OpenDatabase(testDbPath)
assert.Nil(t, err)
defer db.Close()
cachedAlliances = [][]*AllianceTeam{}
cachedRankedTeams = []*RankedTeam{}
eventSettings, _ = db.GetEventSettings()
eventSettings.NumElimAlliances = 2
for i := 1; i <= 6; i++ {
db.CreateRanking(&Ranking{TeamId: 100 + i, Rank: i})
}
// Start an alliance selection that is already underway.
recorder := postHttpResponse("/setup/alliance_selection/start", "")
assert.Equal(t, 302, recorder.Code)
recorder = postHttpResponse("/setup/alliance_selection/start", "")
assert.Equal(t, 200, recorder.Code)
assert.Contains(t, recorder.Body.String(), "already in progress")
// Select invalid teams.
recorder = postHttpResponse("/setup/alliance_selection", "selection0_0=asdf")
assert.Equal(t, 200, recorder.Code)
assert.Contains(t, recorder.Body.String(), "Invalid team number")
recorder = postHttpResponse("/setup/alliance_selection", "selection0_0=100")
assert.Equal(t, 200, recorder.Code)
assert.Contains(t, recorder.Body.String(), "not present at this event")
recorder = postHttpResponse("/setup/alliance_selection", "selection0_0=101&selection1_1=101")
assert.Equal(t, 200, recorder.Code)
assert.Contains(t, recorder.Body.String(), "already part of an alliance")
// Finalize early and without required parameters.
recorder = postHttpResponse("/setup/alliance_selection/finalize",
"startTime=2014-01-01 01:00:00 PM&matchSpacingSec=360")
assert.Equal(t, 200, recorder.Code)
assert.Contains(t, recorder.Body.String(), "until all spots have been filled")
recorder = postHttpResponse("/setup/alliance_selection", "selection0_0=101&selection0_1=102&"+
"selection0_2=103&selection1_0=104&selection1_1=105&selection1_2=106")
assert.Equal(t, 302, recorder.Code)
2014-07-30 22:55:14 -07:00
recorder = postHttpResponse("/setup/alliance_selection/finalize", "startTime=asdf")
2014-06-10 21:45:40 -07:00
assert.Equal(t, 200, recorder.Code)
assert.Contains(t, recorder.Body.String(), "valid start time")
recorder = postHttpResponse("/setup/alliance_selection/finalize",
2014-07-30 22:55:14 -07:00
"startTime=2014-01-01 01:00:00 PM")
2014-06-10 21:45:40 -07:00
assert.Equal(t, 302, recorder.Code)
// Do other things after finalization.
2014-07-30 22:55:14 -07:00
recorder = postHttpResponse("/setup/alliance_selection/finalize", "startTime=2014-01-01 01:00:00 PM")
2014-06-10 21:45:40 -07:00
assert.Equal(t, 200, recorder.Code)
assert.Contains(t, recorder.Body.String(), "already been finalized")
recorder = postHttpResponse("/setup/alliance_selection/reset", "")
assert.Equal(t, 200, recorder.Code)
assert.Contains(t, recorder.Body.String(), "already been finalized")
recorder = postHttpResponse("/setup/alliance_selection", "selection0_0=asdf")
assert.Equal(t, 200, recorder.Code)
assert.Contains(t, recorder.Body.String(), "already been finalized")
cachedAlliances = [][]*AllianceTeam{}
cachedRankedTeams = []*RankedTeam{}
recorder = postHttpResponse("/setup/alliance_selection/start", "")
assert.Equal(t, 200, recorder.Code)
assert.Contains(t, recorder.Body.String(), "already been finalized")
}
func TestSetupAllianceSelectionAutofocus(t *testing.T) {
clearDb()
defer clearDb()
var err error
db, err = OpenDatabase(testDbPath)
assert.Nil(t, err)
defer db.Close()
cachedAlliances = [][]*AllianceTeam{}
cachedRankedTeams = []*RankedTeam{}
eventSettings, _ = db.GetEventSettings()
eventSettings.NumElimAlliances = 2
// Straight draft.
eventSettings.SelectionRound2Order = "F"
eventSettings.SelectionRound3Order = "F"
recorder := postHttpResponse("/setup/alliance_selection/start", "")
assert.Equal(t, 302, recorder.Code)
i, j := determineNextCell()
assert.Equal(t, 0, i)
assert.Equal(t, 0, j)
cachedAlliances[0][0].TeamId = 1
i, j = determineNextCell()
assert.Equal(t, 0, i)
assert.Equal(t, 1, j)
cachedAlliances[0][1].TeamId = 2
i, j = determineNextCell()
assert.Equal(t, 1, i)
assert.Equal(t, 0, j)
cachedAlliances[1][0].TeamId = 3
i, j = determineNextCell()
assert.Equal(t, 1, i)
assert.Equal(t, 1, j)
cachedAlliances[1][1].TeamId = 4
i, j = determineNextCell()
assert.Equal(t, 0, i)
assert.Equal(t, 2, j)
cachedAlliances[0][2].TeamId = 5
i, j = determineNextCell()
assert.Equal(t, 1, i)
assert.Equal(t, 2, j)
cachedAlliances[1][2].TeamId = 6
i, j = determineNextCell()
assert.Equal(t, 0, i)
assert.Equal(t, 3, j)
cachedAlliances[0][3].TeamId = 7
i, j = determineNextCell()
assert.Equal(t, 1, i)
assert.Equal(t, 3, j)
cachedAlliances[1][3].TeamId = 8
i, j = determineNextCell()
assert.Equal(t, -1, i)
assert.Equal(t, -1, j)
// Double-serpentine draft.
eventSettings.SelectionRound2Order = "L"
eventSettings.SelectionRound3Order = "L"
recorder = postHttpResponse("/setup/alliance_selection/reset", "")
assert.Equal(t, 302, recorder.Code)
recorder = postHttpResponse("/setup/alliance_selection/start", "")
assert.Equal(t, 302, recorder.Code)
i, j = determineNextCell()
assert.Equal(t, 0, i)
assert.Equal(t, 0, j)
cachedAlliances[0][0].TeamId = 1
i, j = determineNextCell()
assert.Equal(t, 0, i)
assert.Equal(t, 1, j)
cachedAlliances[0][1].TeamId = 2
i, j = determineNextCell()
assert.Equal(t, 1, i)
assert.Equal(t, 0, j)
cachedAlliances[1][0].TeamId = 3
i, j = determineNextCell()
assert.Equal(t, 1, i)
assert.Equal(t, 1, j)
cachedAlliances[1][1].TeamId = 4
i, j = determineNextCell()
assert.Equal(t, 1, i)
assert.Equal(t, 2, j)
cachedAlliances[1][2].TeamId = 5
i, j = determineNextCell()
assert.Equal(t, 0, i)
assert.Equal(t, 2, j)
cachedAlliances[0][2].TeamId = 6
i, j = determineNextCell()
assert.Equal(t, 1, i)
assert.Equal(t, 3, j)
cachedAlliances[1][3].TeamId = 7
i, j = determineNextCell()
assert.Equal(t, 0, i)
assert.Equal(t, 3, j)
cachedAlliances[0][3].TeamId = 8
i, j = determineNextCell()
assert.Equal(t, -1, i)
assert.Equal(t, -1, j)
}