Files
galaxy-game/gamemaster/internal/domain/engineversion/model_test.go
T
2026-05-03 07:59:03 +02:00

64 lines
1.6 KiB
Go

package engineversion
import (
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func validVersion() EngineVersion {
created := time.Date(2026, 4, 27, 12, 0, 0, 0, time.UTC)
return EngineVersion{
Version: "v1.2.3",
ImageRef: "ghcr.io/galaxy/game:v1.2.3",
Options: []byte(`{"max_planets":120}`),
Status: StatusActive,
CreatedAt: created,
UpdatedAt: created,
}
}
func TestStatusIsKnown(t *testing.T) {
for _, status := range AllStatuses() {
assert.True(t, status.IsKnown(), "want known: %q", status)
}
assert.False(t, Status("retired").IsKnown())
assert.False(t, Status("").IsKnown())
}
func TestEngineVersionValidateHappy(t *testing.T) {
require.NoError(t, validVersion().Validate())
}
func TestEngineVersionValidateAcceptsEmptyOptions(t *testing.T) {
record := validVersion()
record.Options = nil
assert.NoError(t, record.Validate())
}
func TestEngineVersionValidateRejects(t *testing.T) {
tests := []struct {
name string
mutate func(*EngineVersion)
}{
{"empty version", func(v *EngineVersion) { v.Version = "" }},
{"empty image ref", func(v *EngineVersion) { v.ImageRef = "" }},
{"unknown status", func(v *EngineVersion) { v.Status = "exotic" }},
{"zero created at", func(v *EngineVersion) { v.CreatedAt = time.Time{} }},
{"zero updated at", func(v *EngineVersion) { v.UpdatedAt = time.Time{} }},
{"updated before created", func(v *EngineVersion) {
v.UpdatedAt = v.CreatedAt.Add(-time.Minute)
}},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
record := validVersion()
tt.mutate(&record)
assert.Error(t, record.Validate())
})
}
}