Files
galaxy-game/server/internal/controller/generate_game_test.go
T
Ilia Denisov 8f982278d2 support multi-module (#4)
* add multimodule
* re-package modules
2026-02-22 08:57:19 +02:00

70 lines
1.8 KiB
Go

package controller_test
import (
"fmt"
"path/filepath"
"strings"
"testing"
"galaxy/util"
"github.com/google/uuid"
"github.com/iliadenisov/galaxy/server/internal/controller"
"github.com/iliadenisov/galaxy/server/internal/model/game"
"github.com/iliadenisov/galaxy/server/internal/repo"
"github.com/stretchr/testify/assert"
)
func TestNewGame(t *testing.T) {
root, cleanup := util.CreateWorkDir(t)
defer cleanup()
r, err := repo.NewFileRepo(root)
assert.NoError(t, err)
players := 20
races := make([]string, players)
for i := range players {
races[i] = fmt.Sprintf("race_%02d", i)
}
assert.NoError(t, r.Lock())
gameID, err := controller.NewGame(r, races)
assert.NoError(t, err)
assert.FileExists(t, filepath.Join(root, "state.json"))
assert.FileExists(t, filepath.Join(root, "0000/state.json"))
g, err := r.LoadState()
assert.NoError(t, err)
assert.Equal(t, gameID, g.ID)
assert.Equal(t, uint(0), g.Turn)
assert.Equal(t, players, len(g.Race))
for r := range g.Race {
assert.NotEqual(t, uuid.Nil, g.Race[r].ID)
assert.Equal(t, players-1, len(g.Race[r].Relations))
assert.Equal(t, uint(10), g.Race[r].TTL)
for i := range g.Race[r].Relations {
assert.NotEqual(t, uuid.Nil, g.Race[r].Relations[i].RaceID)
if g.Race[r].Relations[i].RaceID == g.Race[r].ID {
assert.Fail(t, "race relation with itself")
}
assert.Equal(t, game.RelationWar, g.Race[r].Relations[i].Relation)
}
}
numShuffled := false
for i := range g.Map.Planet {
p := &g.Map.Planet[i]
if strings.HasPrefix(p.Name, "HW") || strings.HasPrefix(p.Name, "DW") {
assert.True(t, p.Owned())
assert.NotNil(t, p.Owner)
assert.NotEqual(t, uuid.Nil, *p.Owner)
}
numShuffled = numShuffled || p.Number != uint(i)
}
assert.True(t, numShuffled)
assert.NoError(t, r.Release())
}