Files
cheesy-arena-lite/field/event_status_test.go
2022-08-21 14:52:54 -07:00

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)
}