mirror of
https://github.com/Team254/cheesy-arena-lite.git
synced 2026-03-09 05:36:45 -04:00
128 lines
5.6 KiB
Go
128 lines
5.6 KiB
Go
// Copyright 2020 Team 254. All Rights Reserved.
|
|
// Author: pat@patfairbank.com (Patrick Fairbank)
|
|
|
|
package field
|
|
|
|
import (
|
|
"github.com/Team254/cheesy-arena-lite/game"
|
|
"github.com/Team254/cheesy-arena-lite/model"
|
|
"github.com/stretchr/testify/assert"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestCycleTime(t *testing.T) {
|
|
arena := setupTestArena(t)
|
|
|
|
assert.Equal(t, "", arena.EventStatus.CycleTime)
|
|
arena.updateCycleTime(time.Time{})
|
|
assert.Equal(t, "", arena.EventStatus.CycleTime)
|
|
arena.updateCycleTime(time.Now().Add(-125 * time.Second))
|
|
assert.Equal(t, "", arena.EventStatus.CycleTime)
|
|
arena.updateCycleTime(time.Now())
|
|
assert.Equal(t, "2:05", arena.EventStatus.CycleTime)
|
|
arena.updateCycleTime(time.Now().Add(3456 * time.Second))
|
|
assert.Equal(t, "57:36", arena.EventStatus.CycleTime)
|
|
arena.updateCycleTime(time.Now().Add(5 * time.Hour))
|
|
assert.Equal(t, "4:02:24", arena.EventStatus.CycleTime)
|
|
arena.updateCycleTime(time.Now().Add(123*time.Hour + 1256*time.Second))
|
|
assert.Equal(t, "118:20:56", arena.EventStatus.CycleTime)
|
|
}
|
|
|
|
func TestEarlyLateMessage(t *testing.T) {
|
|
arena := setupTestArena(t)
|
|
|
|
arena.LoadTestMatch()
|
|
assert.Equal(t, "", arena.getEarlyLateMessage())
|
|
|
|
arena.Database.CreateMatch(&model.Match{Type: "qualification", DisplayName: "1"})
|
|
arena.Database.CreateMatch(&model.Match{Type: "qualification", DisplayName: "2"})
|
|
matches, _ := arena.Database.GetMatchesByType("qualification")
|
|
assert.Equal(t, 2, len(matches))
|
|
|
|
setMatch(arena.Database, &matches[0], time.Now().Add(300*time.Second), time.Time{}, false)
|
|
arena.CurrentMatch = &matches[0]
|
|
arena.MatchState = PreMatch
|
|
assert.Equal(t, "Event is running on schedule", arena.getEarlyLateMessage())
|
|
|
|
setMatch(arena.Database, &matches[0], time.Now().Add(60*time.Second), time.Time{}, false)
|
|
assert.Equal(t, "Event is running on schedule", arena.getEarlyLateMessage())
|
|
|
|
setMatch(arena.Database, &matches[0], time.Now().Add(-60*time.Second), time.Time{}, false)
|
|
assert.Equal(t, "Event is running on schedule", arena.getEarlyLateMessage())
|
|
|
|
setMatch(arena.Database, &matches[0], time.Now().Add(-120*time.Second), time.Time{}, false)
|
|
assert.Equal(t, "Event is running on schedule", arena.getEarlyLateMessage())
|
|
|
|
setMatch(arena.Database, &matches[0], time.Now().Add(-180*time.Second), time.Time{}, false)
|
|
assert.Equal(t, "Event is running 3 minutes late", arena.getEarlyLateMessage())
|
|
|
|
setMatch(arena.Database, &matches[0], time.Now().Add(181*time.Second), time.Now(), false)
|
|
arena.MatchState = AutoPeriod
|
|
assert.Equal(t, "Event is running 3 minutes early", arena.getEarlyLateMessage())
|
|
|
|
setMatch(arena.Database, &matches[0], time.Now().Add(-300*time.Second), time.Now().Add(-601*time.Second), false)
|
|
setMatch(arena.Database, &matches[1], time.Now().Add(481*time.Second), time.Time{}, false)
|
|
arena.MatchState = PostMatch
|
|
assert.Equal(t, "Event is running 5 minutes early", arena.getEarlyLateMessage())
|
|
|
|
setMatch(arena.Database, &matches[1], time.Now().Add(181*time.Second), time.Time{}, false)
|
|
assert.Equal(t, "Event is running 3 minutes early", arena.getEarlyLateMessage())
|
|
|
|
setMatch(arena.Database, &matches[1], time.Now().Add(-60*time.Second), time.Time{}, false)
|
|
assert.Equal(t, "Event is running on schedule", arena.getEarlyLateMessage())
|
|
|
|
setMatch(arena.Database, &matches[1], time.Now().Add(-180*time.Second), time.Time{}, false)
|
|
assert.Equal(t, "Event is running 3 minutes late", arena.getEarlyLateMessage())
|
|
|
|
setMatch(arena.Database, &matches[0], time.Now().Add(-300*time.Second), time.Now().Add(-601*time.Second), true)
|
|
assert.Equal(t, "", arena.getEarlyLateMessage())
|
|
|
|
setMatch(arena.Database, &matches[1], time.Now().Add(900*time.Second), time.Time{}, false)
|
|
arena.CurrentMatch = &matches[1]
|
|
arena.MatchState = PreMatch
|
|
assert.Equal(t, "Event is running on schedule", arena.getEarlyLateMessage())
|
|
|
|
setMatch(arena.Database, &matches[1], time.Now().Add(899*time.Second), time.Time{}, false)
|
|
assert.Equal(t, "Event is running 5 minutes early", arena.getEarlyLateMessage())
|
|
|
|
setMatch(arena.Database, &matches[1], time.Now().Add(60*time.Second), time.Time{}, false)
|
|
assert.Equal(t, "Event is running on schedule", arena.getEarlyLateMessage())
|
|
|
|
setMatch(arena.Database, &matches[1], time.Now().Add(-120*time.Second), time.Time{}, false)
|
|
assert.Equal(t, "Event is running on schedule", arena.getEarlyLateMessage())
|
|
|
|
setMatch(arena.Database, &matches[1], time.Now().Add(-180*time.Second), time.Time{}, false)
|
|
assert.Equal(t, "Event is running 3 minutes late", arena.getEarlyLateMessage())
|
|
|
|
setMatch(arena.Database, &matches[1], time.Now().Add(-180*time.Second), time.Now().Add(-541*time.Second), false)
|
|
arena.MatchState = TeleopPeriod
|
|
assert.Equal(t, "Event is running 6 minutes early", arena.getEarlyLateMessage())
|
|
|
|
setMatch(arena.Database, &matches[1], time.Now(), time.Now().Add(481*time.Second), false)
|
|
arena.MatchState = PostMatch
|
|
assert.Equal(t, "Event is running 8 minutes late", arena.getEarlyLateMessage())
|
|
|
|
setMatch(arena.Database, &matches[1], time.Now(), time.Now().Add(481*time.Second), true)
|
|
assert.Equal(t, "", arena.getEarlyLateMessage())
|
|
|
|
// Check other match types.
|
|
arena.MatchState = PreMatch
|
|
arena.CurrentMatch = &model.Match{Type: "practice", Time: time.Now().Add(-181 * time.Second)}
|
|
assert.Equal(t, "Event is running 3 minutes late", arena.getEarlyLateMessage())
|
|
|
|
arena.CurrentMatch = &model.Match{Type: "elimination", Time: time.Now().Add(-181 * time.Second)}
|
|
assert.Equal(t, "", arena.getEarlyLateMessage())
|
|
}
|
|
|
|
func setMatch(database *model.Database, match *model.Match, matchTime time.Time, startedAt time.Time, isComplete bool) {
|
|
match.Time = matchTime
|
|
match.StartedAt = startedAt
|
|
if isComplete {
|
|
match.Status = game.TieMatch
|
|
} else {
|
|
match.Status = game.MatchNotPlayed
|
|
}
|
|
_ = database.UpdateMatch(match)
|
|
}
|