92 lines
2.3 KiB
Go
92 lines
2.3 KiB
Go
package swagger
|
|
|
|
import (
|
|
"net/http"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
apiSpec "github.com/zeromicro/go-zero/tools/goctl/api/spec"
|
|
)
|
|
|
|
func TestIsPostJson(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
method string
|
|
hasJson bool
|
|
expected bool
|
|
}{
|
|
{"POST with JSON", http.MethodPost, true, true},
|
|
{"POST without JSON", http.MethodPost, false, false},
|
|
{"GET with JSON", http.MethodGet, true, false},
|
|
{"PUT with JSON", http.MethodPut, true, false},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
testStruct := createTestStruct("TestStruct", tt.hasJson)
|
|
_, result := isPostJson(testingContext(t), tt.method, testStruct)
|
|
assert.Equal(t, tt.expected, result)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestParametersFromType(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
method string
|
|
useDefinitions bool
|
|
hasJson bool
|
|
expectedCount int
|
|
expectedBody bool
|
|
}{
|
|
{"POST JSON with definitions", http.MethodPost, true, true, 1, true},
|
|
{"POST JSON without definitions", http.MethodPost, false, true, 1, true},
|
|
{"GET with form", http.MethodGet, false, false, 1, false},
|
|
{"POST with form", http.MethodPost, false, false, 1, false},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
ctx := Context{UseDefinitions: tt.useDefinitions}
|
|
testStruct := createTestStruct("TestStruct", tt.hasJson)
|
|
params := parametersFromType(ctx, tt.method, testStruct)
|
|
|
|
assert.Equal(t, tt.expectedCount, len(params))
|
|
if tt.expectedBody {
|
|
assert.Equal(t, paramsInBody, params[0].In)
|
|
} else if len(params) > 0 {
|
|
assert.NotEqual(t, paramsInBody, params[0].In)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestParametersFromType_EdgeCases(t *testing.T) {
|
|
ctx := testingContext(t)
|
|
|
|
params := parametersFromType(ctx, http.MethodPost, nil)
|
|
assert.Empty(t, params)
|
|
|
|
primitiveType := apiSpec.PrimitiveType{RawName: "string"}
|
|
params = parametersFromType(ctx, http.MethodPost, primitiveType)
|
|
assert.Empty(t, params)
|
|
}
|
|
|
|
func createTestStruct(name string, hasJson bool) apiSpec.DefineStruct {
|
|
tag := `form:"username"`
|
|
if hasJson {
|
|
tag = `json:"username"`
|
|
}
|
|
|
|
return apiSpec.DefineStruct{
|
|
RawName: name,
|
|
Members: []apiSpec.Member{
|
|
{
|
|
Name: "Username",
|
|
Type: apiSpec.PrimitiveType{RawName: "string"},
|
|
Tag: tag,
|
|
},
|
|
},
|
|
}
|
|
}
|