85 lines
1.9 KiB
Go
85 lines
1.9 KiB
Go
package game_test
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/iliadenisov/galaxy/internal/controller"
|
|
|
|
"github.com/iliadenisov/galaxy/internal/game"
|
|
mg "github.com/iliadenisov/galaxy/internal/model/game"
|
|
"github.com/iliadenisov/galaxy/internal/util"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
const (
|
|
testRaceCount = 20
|
|
unknownRaceName = "Race_RIP"
|
|
)
|
|
|
|
func raceNum(i int) string {
|
|
return fmt.Sprintf("race_%02d", i)
|
|
}
|
|
|
|
func TestComposeGame(t *testing.T) {
|
|
g(t, func(p func(*controller.Param), g func() *mg.Game) {
|
|
_, err := game.GenerateGame(p, []string{"r1", "r2"})
|
|
assert.Error(t, err)
|
|
assert.ErrorContains(t, err, "state for turn 0 already saved")
|
|
})
|
|
}
|
|
|
|
func g(t *testing.T, f func(p func(*controller.Param), g func() *mg.Game)) {
|
|
root, cleanup := util.CreateWorkDir(t)
|
|
defer cleanup()
|
|
races := make([]string, testRaceCount)
|
|
for i := range testRaceCount {
|
|
races[i] = raceNum(i)
|
|
}
|
|
p := func(p *controller.Param) { p.StoragePath = root }
|
|
_, err := game.GenerateGame(p, races)
|
|
if err != nil {
|
|
assert.FailNow(t, "g: ComposeGame", err)
|
|
return
|
|
}
|
|
g := func() *mg.Game {
|
|
g, err := game.LoadState(p)
|
|
if err != nil {
|
|
assert.FailNow(t, "g: LoadState", err)
|
|
return nil
|
|
}
|
|
return g
|
|
}
|
|
f(p, g)
|
|
}
|
|
|
|
func c(t *testing.T, f func(p func(*controller.Param), g func() *controller.Controller)) {
|
|
root, cleanup := util.CreateWorkDir(t)
|
|
defer cleanup()
|
|
races := make([]string, testRaceCount)
|
|
for i := range testRaceCount {
|
|
races[i] = raceNum(i)
|
|
}
|
|
p := func(p *controller.Param) { p.StoragePath = root }
|
|
_, err := game.GenerateGame(p, races)
|
|
if err != nil {
|
|
assert.FailNow(t, "c: GenerateGame", err)
|
|
return
|
|
}
|
|
g := func() *controller.Controller {
|
|
c, err := controller.NewController(p)
|
|
if err != nil {
|
|
assert.FailNow(t, "c: NewController", err)
|
|
return nil
|
|
}
|
|
g, err := game.LoadState(p)
|
|
if err != nil {
|
|
assert.FailNow(t, "c: LoadState", err)
|
|
return nil
|
|
}
|
|
c.Cache = controller.NewCache(g)
|
|
return c
|
|
}
|
|
f(p, g)
|
|
}
|