moth/cmd/mothd/state_test.go

71 lines
1.5 KiB
Go

package main
import (
"bytes"
"github.com/spf13/afero"
"os"
"testing"
)
func TestState(t *testing.T) {
fs := new(afero.MemMapFs)
mustExist := func(path string) {
_, err := fs.Stat(path)
if os.IsNotExist(err) {
t.Errorf("File %s does not exist", path)
}
}
s := NewState(fs)
s.Cleanup()
pl := s.PointsLog()
if len(pl) != 0 {
t.Errorf("Empty points log is not empty")
}
mustExist("initialized")
mustExist("enabled")
mustExist("hours")
teamidsBuf, err := afero.ReadFile(fs, "teamids.txt")
if err != nil {
t.Errorf("Reading teamids.txt: %v", err)
}
teamids := bytes.Split(teamidsBuf, []byte("\n"))
if (len(teamids) != 101) || (len(teamids[100]) > 0) {
t.Errorf("There weren't 100 teamids, there were %d", len(teamids))
}
teamId := string(teamids[0])
if err := s.SetTeamName("bad team ID", "bad team name"); err == nil {
t.Errorf("Setting bad team ID didn't raise an error")
}
if err := s.SetTeamName(teamId, "My Team"); err != nil {
t.Errorf("Setting team name: %v", err)
}
category := "poot"
points := 3928
s.AwardPoints(teamId, category, points)
s.Cleanup()
pl = s.PointsLog()
if len(pl) != 1 {
t.Errorf("After awarding points, points log has length %d", len(pl))
} else if (pl[0].TeamId != teamId) || (pl[0].Category != category) || (pl[0].Points != points) {
t.Errorf("Incorrect logged award %v", pl)
}
fs.Remove("initialized")
s.Cleanup()
pl = s.PointsLog()
if len(pl) != 0 {
t.Errorf("After reinitialization, points log has length %d", len(pl))
}
}