Files
galaxy-game/integration/admin_engine_versions_test.go
2026-05-06 10:14:55 +03:00

55 lines
2.0 KiB
Go

package integration_test
import (
"context"
"net/http"
"testing"
"time"
"galaxy/integration/testenv"
)
// TestAdminEngineVersionsCRUD covers the engine-version registry: a
// single admin creates, updates, disables a version. A user attempting
// the same endpoint with X-User-ID is rejected (Basic Auth required).
func TestAdminEngineVersionsCRUD(t *testing.T) {
plat := testenv.Bootstrap(t, testenv.BootstrapOptions{})
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
defer cancel()
admin := testenv.NewBackendAdminClient(plat.Backend.HTTPURL, plat.Backend.AdminUser, plat.Backend.AdminPassword)
raw, resp, err := admin.Do(ctx, http.MethodPost, "/api/v1/admin/engine-versions", map[string]any{
"version": "v1.0.0",
"image_ref": "galaxy/game:integration",
"enabled": true,
})
if err != nil || resp.StatusCode/100 != 2 {
t.Fatalf("create version: err=%v status=%d body=%s", err, resp.StatusCode, string(raw))
}
// Update image_ref + enabled flag.
raw, resp, err = admin.Do(ctx, http.MethodPatch, "/api/v1/admin/engine-versions/v1.0.0", map[string]any{
"image_ref": "galaxy/game:integration",
"enabled": false,
})
if err != nil || resp.StatusCode != http.StatusOK {
t.Fatalf("update version: err=%v status=%d body=%s", err, resp.StatusCode, string(raw))
}
// Disable explicitly through the dedicated endpoint.
raw, resp, err = admin.Do(ctx, http.MethodPost, "/api/v1/admin/engine-versions/v1.0.0/disable", nil)
if err != nil || resp.StatusCode != http.StatusOK {
t.Fatalf("disable version: err=%v status=%d body=%s", err, resp.StatusCode, string(raw))
}
// A regular user surface must not have access to this admin endpoint.
noAuth := testenv.NewBackendAdminClient(plat.Backend.HTTPURL, "wrong", "wrong")
raw, resp, err = noAuth.Do(ctx, http.MethodGet, "/api/v1/admin/engine-versions", nil)
if err != nil {
t.Fatalf("unauth call: %v", err)
}
if resp.StatusCode != http.StatusUnauthorized {
t.Fatalf("unauth status = %d body=%s, want 401", resp.StatusCode, string(raw))
}
}