feat: gamemaster
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
package ports
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"galaxy/gamemaster/internal/domain/engineversion"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
// fixedNow returns a stable wall-clock used by the input-validation
|
||||
// fixtures. Adapters use the value verbatim to refresh the `updated_at`
|
||||
// column.
|
||||
func fixedNow() time.Time {
|
||||
return time.Date(2026, time.April, 27, 12, 0, 0, 0, time.UTC)
|
||||
}
|
||||
|
||||
func TestUpdateEngineVersionInputValidateHappy(t *testing.T) {
|
||||
imageRef := "ghcr.io/galaxy/game:v1.2.4"
|
||||
input := UpdateEngineVersionInput{
|
||||
Version: "v1.2.3",
|
||||
ImageRef: &imageRef,
|
||||
Now: fixedNow(),
|
||||
}
|
||||
require.NoError(t, input.Validate())
|
||||
}
|
||||
|
||||
func TestUpdateEngineVersionInputValidateAcceptsStatusOnly(t *testing.T) {
|
||||
status := engineversion.StatusDeprecated
|
||||
input := UpdateEngineVersionInput{
|
||||
Version: "v1.2.3",
|
||||
Status: &status,
|
||||
Now: fixedNow(),
|
||||
}
|
||||
assert.NoError(t, input.Validate())
|
||||
}
|
||||
|
||||
func TestUpdateEngineVersionInputValidateAcceptsOptionsOnly(t *testing.T) {
|
||||
options := []byte(`{"max_planets":120}`)
|
||||
input := UpdateEngineVersionInput{
|
||||
Version: "v1.2.3",
|
||||
Options: &options,
|
||||
Now: fixedNow(),
|
||||
}
|
||||
assert.NoError(t, input.Validate())
|
||||
}
|
||||
|
||||
func TestUpdateEngineVersionInputValidateRejects(t *testing.T) {
|
||||
emptyImage := ""
|
||||
imageRef := "ghcr.io/galaxy/game:v1.2.4"
|
||||
unknownStatus := engineversion.Status("exotic")
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
input UpdateEngineVersionInput
|
||||
}{
|
||||
{
|
||||
name: "empty version",
|
||||
input: UpdateEngineVersionInput{
|
||||
Version: "",
|
||||
ImageRef: &imageRef,
|
||||
Now: fixedNow(),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "no fields set",
|
||||
input: UpdateEngineVersionInput{Version: "v1.2.3", Now: fixedNow()},
|
||||
},
|
||||
{
|
||||
name: "empty image ref pointer",
|
||||
input: UpdateEngineVersionInput{
|
||||
Version: "v1.2.3",
|
||||
ImageRef: &emptyImage,
|
||||
Now: fixedNow(),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "unknown status pointer",
|
||||
input: UpdateEngineVersionInput{
|
||||
Version: "v1.2.3",
|
||||
Status: &unknownStatus,
|
||||
Now: fixedNow(),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "zero now",
|
||||
input: UpdateEngineVersionInput{
|
||||
Version: "v1.2.3",
|
||||
ImageRef: &imageRef,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
assert.Error(t, tt.input.Validate())
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user