64 lines
1.6 KiB
Go
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())
|
|
})
|
|
}
|
|
}
|