63 lines
1.8 KiB
Go
63 lines
1.8 KiB
Go
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())
|
|
})
|
|
}
|
|
}
|