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,
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
}
|