test UserGameServer unstarted state has all empty players
parent
1e4198b291
commit
f3f70e10f4
|
|
@ -77,6 +77,14 @@ func (games Games) UserName(ctx context.Context, id string) (string, error) {
|
||||||
return result, err
|
return result, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (a Assignment) Empty() bool {
|
||||||
|
return len(a.Public) == 0 && len(a.Private) == 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s PlayerState) Empty() bool {
|
||||||
|
return len(s.Kills) == 0 && s.KillWords.Empty()
|
||||||
|
}
|
||||||
|
|
||||||
func (s PlayerState) Points() int {
|
func (s PlayerState) Points() int {
|
||||||
points := 0
|
points := 0
|
||||||
for _, kill := range s.Kills {
|
for _, kill := range s.Kills {
|
||||||
|
|
@ -378,6 +386,10 @@ func (games Games) CreateEventAssignmentRotation(ctx context.Context, id string,
|
||||||
return games.createEvent(ctx, id, event)
|
return games.createEvent(ctx, id, event)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (words KillWords) Empty() bool {
|
||||||
|
return words.Global == (KillWord{}) && words.Assigned.IsZero() && words.Assignee == "" && words.Assignment.Empty()
|
||||||
|
}
|
||||||
|
|
||||||
func (words KillWords) Privates() []KillWord {
|
func (words KillWords) Privates() []KillWord {
|
||||||
a := slices.Clone(words.Assignment.Private)
|
a := slices.Clone(words.Assignment.Private)
|
||||||
slices.SortFunc(a, func(a, b KillWord) int {
|
slices.SortFunc(a, func(a, b KillWord) int {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,54 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestUserGameServer(t *testing.T) {
|
||||||
|
ctx := context.Background()
|
||||||
|
games := newTestGames(t)
|
||||||
|
|
||||||
|
gid, err := games.CreateGame(ctx, "g1")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
pids := []string{}
|
||||||
|
for i := 0; i < 4; i++ {
|
||||||
|
pid := fmt.Sprintf("p%d", i+1)
|
||||||
|
if err := games.CreateEventPlayerJoin(ctx, gid, pid, "player "+pid); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
pids = append(pids, pid)
|
||||||
|
}
|
||||||
|
|
||||||
|
ugs, err := NewUserGameServer(ctx, Session{ID: "p1"}, games)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
t.Run("unstarted", func(t *testing.T) {
|
||||||
|
state, err := ugs.State(ctx)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if state.Started {
|
||||||
|
t.Error("started after player joins only")
|
||||||
|
}
|
||||||
|
|
||||||
|
if !state.Completed.IsZero() {
|
||||||
|
t.Error("completed after player joins only")
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, pid := range pids {
|
||||||
|
if p, ok := state.Players[pid]; !ok {
|
||||||
|
t.Error("self not in players")
|
||||||
|
} else if !p.Empty() {
|
||||||
|
t.Error(pid, p)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue