package httpx import ( "net/http" "net/http/httptest" "testing" "github.com/gin-gonic/gin" "github.com/stretchr/testify/require" ) func TestErrorUsesStableEnvelope(t *testing.T) { gin.SetMode(gin.TestMode) recorder := httptest.NewRecorder() ctx, _ := gin.CreateTestContext(recorder) Error(ctx, http.StatusBadRequest, "invalid_request", "请求参数无效") require.Equal(t, http.StatusBadRequest, recorder.Code) require.JSONEq(t, `{"error":{"code":"invalid_request","message":"请求参数无效"}}`, recorder.Body.String()) require.True(t, ctx.IsAborted()) } func TestIdentityParamAcceptsUUIDV7(t *testing.T) { gin.SetMode(gin.TestMode) recorder := httptest.NewRecorder() ctx, _ := gin.CreateTestContext(recorder) ctx.Params = gin.Params{{Key: "projectId", Value: "018f0c9a-7b3c-7cc1-98c8-0242ac120002"}} identity, ok := IdentityParam(ctx, "projectId") require.True(t, ok) require.Equal(t, "018f0c9a-7b3c-7cc1-98c8-0242ac120002", identity) require.False(t, ctx.IsAborted()) } func TestIdentityParamRejectsNonUUIDV7(t *testing.T) { tests := []struct { name string value string }{ {name: "internal numeric ID", value: "42"}, {name: "UUID v4", value: "550e8400-e29b-41d4-a716-446655440000"}, {name: "UUID v7 with invalid variant", value: "018f0c9a-7b3c-7cc1-78c8-0242ac120002"}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { gin.SetMode(gin.TestMode) recorder := httptest.NewRecorder() ctx, _ := gin.CreateTestContext(recorder) ctx.Params = gin.Params{{Key: "projectId", Value: tt.value}} identity, ok := IdentityParam(ctx, "projectId") require.False(t, ok) require.Empty(t, identity) require.Equal(t, http.StatusBadRequest, recorder.Code) require.JSONEq(t, `{"error":{"code":"invalid_request","message":"请求参数无效"}}`, recorder.Body.String()) }) } }