2021-10-02 18:54:06 +08:00
|
|
|
|
// Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
|
|
|
|
|
//
|
|
|
|
|
// This Source Code Form is subject to the terms of the MIT License.
|
|
|
|
|
// If a copy of the MIT was not distributed with this file,
|
|
|
|
|
// You can obtain one at https://github.com/gogf/gf.
|
|
|
|
|
|
2021-10-02 14:52:28 +08:00
|
|
|
|
package goai_test
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
2021-10-06 19:52:19 +08:00
|
|
|
|
"fmt"
|
2021-11-13 23:34:16 +08:00
|
|
|
|
"testing"
|
|
|
|
|
|
2021-10-25 21:06:24 +08:00
|
|
|
|
"github.com/gogf/gf/v2/frame/g"
|
2021-10-11 21:41:56 +08:00
|
|
|
|
"github.com/gogf/gf/v2/protocol/goai"
|
|
|
|
|
"github.com/gogf/gf/v2/test/gtest"
|
|
|
|
|
"github.com/gogf/gf/v2/util/gmeta"
|
2021-10-02 14:52:28 +08:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func Test_Basic(t *testing.T) {
|
|
|
|
|
type CommonReq struct {
|
2021-10-02 18:54:06 +08:00
|
|
|
|
AppId int64 `json:"appId" v:"required" in:"cookie" description:"应用Id"`
|
|
|
|
|
ResourceId string `json:"resourceId" in:"query" description:"资源Id"`
|
2021-10-02 14:52:28 +08:00
|
|
|
|
}
|
|
|
|
|
type SetSpecInfo struct {
|
|
|
|
|
StorageType string `v:"required|in:CLOUD_PREMIUM,CLOUD_SSD,CLOUD_HSSD" description:"StorageType"`
|
|
|
|
|
Shards int32 `description:"shards 分片数"`
|
|
|
|
|
Params []string `description:"默认参数(json 串-ClickHouseParams)"`
|
|
|
|
|
}
|
|
|
|
|
type CreateResourceReq struct {
|
|
|
|
|
CommonReq
|
|
|
|
|
gmeta.Meta `path:"/CreateResourceReq" method:"POST" tags:"default"`
|
|
|
|
|
Name string `description:"实例名称"`
|
|
|
|
|
Product string `description:"业务类型"`
|
|
|
|
|
Region string `v:"required" description:"区域"`
|
|
|
|
|
SetMap map[string]*SetSpecInfo `v:"required" description:"配置Map"`
|
|
|
|
|
SetSlice []SetSpecInfo `v:"required" description:"配置Slice"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
|
var (
|
2021-10-02 18:54:06 +08:00
|
|
|
|
err error
|
|
|
|
|
oai = goai.New()
|
2021-10-02 14:52:28 +08:00
|
|
|
|
req = new(CreateResourceReq)
|
|
|
|
|
)
|
2021-10-02 18:54:06 +08:00
|
|
|
|
err = oai.Add(goai.AddInput{
|
2021-10-02 14:52:28 +08:00
|
|
|
|
Object: req,
|
|
|
|
|
})
|
2021-10-02 18:54:06 +08:00
|
|
|
|
t.AssertNil(err)
|
|
|
|
|
// Schema asserts.
|
2022-03-07 19:46:05 +08:00
|
|
|
|
t.Assert(len(oai.Components.Schemas.Map()), 2)
|
|
|
|
|
t.Assert(oai.Components.Schemas.Get(`github.com.gogf.gf.v2.protocol.goai_test.CreateResourceReq`).Value.Type, goai.TypeObject)
|
|
|
|
|
t.Assert(len(oai.Components.Schemas.Get(`github.com.gogf.gf.v2.protocol.goai_test.CreateResourceReq`).Value.Properties.Map()), 7)
|
2022-03-28 16:40:43 +08:00
|
|
|
|
t.Assert(oai.Components.Schemas.Get(`github.com.gogf.gf.v2.protocol.goai_test.CreateResourceReq`).Value.Properties.Get(`appId`).Value.Type, goai.TypeInteger)
|
2022-03-07 19:46:05 +08:00
|
|
|
|
t.Assert(oai.Components.Schemas.Get(`github.com.gogf.gf.v2.protocol.goai_test.CreateResourceReq`).Value.Properties.Get(`resourceId`).Value.Type, goai.TypeString)
|
|
|
|
|
|
|
|
|
|
t.Assert(len(oai.Components.Schemas.Get(`github.com.gogf.gf.v2.protocol.goai_test.SetSpecInfo`).Value.Properties.Map()), 3)
|
|
|
|
|
t.Assert(oai.Components.Schemas.Get(`github.com.gogf.gf.v2.protocol.goai_test.SetSpecInfo`).Value.Properties.Get(`Params`).Value.Type, goai.TypeArray)
|
2021-10-02 14:52:28 +08:00
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestOpenApiV3_Add(t *testing.T) {
|
|
|
|
|
type CommonReq struct {
|
2021-10-02 18:54:06 +08:00
|
|
|
|
AppId int64 `json:"appId" v:"required" in:"path" description:"应用Id"`
|
|
|
|
|
ResourceId string `json:"resourceId" in:"query" description:"资源Id"`
|
2021-10-02 14:52:28 +08:00
|
|
|
|
}
|
|
|
|
|
type SetSpecInfo struct {
|
|
|
|
|
StorageType string `v:"required|in:CLOUD_PREMIUM,CLOUD_SSD,CLOUD_HSSD" description:"StorageType"`
|
|
|
|
|
Shards int32 `description:"shards 分片数"`
|
|
|
|
|
Params []string `description:"默认参数(json 串-ClickHouseParams)"`
|
|
|
|
|
}
|
|
|
|
|
type CreateResourceReq struct {
|
|
|
|
|
CommonReq
|
|
|
|
|
gmeta.Meta `path:"/CreateResourceReq" method:"POST" tags:"default"`
|
|
|
|
|
Name string `description:"实例名称"`
|
|
|
|
|
Product string `description:"业务类型"`
|
|
|
|
|
Region string `v:"required" description:"区域"`
|
|
|
|
|
SetMap map[string]*SetSpecInfo `v:"required" description:"配置Map"`
|
|
|
|
|
SetSlice []SetSpecInfo `v:"required" description:"配置Slice"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type CreateResourceRes struct {
|
2021-10-02 15:07:47 +08:00
|
|
|
|
gmeta.Meta `description:"Demo Response Struct"`
|
|
|
|
|
FlowId int64 `description:"创建实例流程id"`
|
2021-10-02 14:52:28 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
f := func(ctx context.Context, req *CreateResourceReq) (res *CreateResourceRes, err error) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
2021-10-02 18:54:06 +08:00
|
|
|
|
var (
|
|
|
|
|
err error
|
|
|
|
|
oai = goai.New()
|
|
|
|
|
)
|
|
|
|
|
err = oai.Add(goai.AddInput{
|
|
|
|
|
Path: "/test1/{appId}",
|
|
|
|
|
Method: goai.HttpMethodPut,
|
2021-10-02 14:52:28 +08:00
|
|
|
|
Object: f,
|
|
|
|
|
})
|
2021-10-02 18:54:06 +08:00
|
|
|
|
t.AssertNil(err)
|
|
|
|
|
|
|
|
|
|
err = oai.Add(goai.AddInput{
|
2021-10-08 14:44:10 +08:00
|
|
|
|
Path: "/test1/{appId}",
|
2021-10-02 18:54:06 +08:00
|
|
|
|
Method: goai.HttpMethodPost,
|
|
|
|
|
Object: f,
|
|
|
|
|
})
|
|
|
|
|
t.AssertNil(err)
|
2021-11-13 23:34:16 +08:00
|
|
|
|
// fmt.Println(oai.String())
|
2021-10-02 18:54:06 +08:00
|
|
|
|
// Schema asserts.
|
2022-03-07 19:46:05 +08:00
|
|
|
|
t.Assert(len(oai.Components.Schemas.Map()), 3)
|
|
|
|
|
t.Assert(oai.Components.Schemas.Get(`github.com.gogf.gf.v2.protocol.goai_test.CreateResourceReq`).Value.Type, goai.TypeObject)
|
|
|
|
|
t.Assert(len(oai.Components.Schemas.Get(`github.com.gogf.gf.v2.protocol.goai_test.CreateResourceReq`).Value.Properties.Map()), 7)
|
2022-03-28 16:40:43 +08:00
|
|
|
|
t.Assert(oai.Components.Schemas.Get(`github.com.gogf.gf.v2.protocol.goai_test.CreateResourceReq`).Value.Properties.Get(`appId`).Value.Type, goai.TypeInteger)
|
2022-03-07 19:46:05 +08:00
|
|
|
|
t.Assert(oai.Components.Schemas.Get(`github.com.gogf.gf.v2.protocol.goai_test.CreateResourceReq`).Value.Properties.Get(`resourceId`).Value.Type, goai.TypeString)
|
2021-10-02 18:54:06 +08:00
|
|
|
|
|
2022-03-07 19:46:05 +08:00
|
|
|
|
t.Assert(len(oai.Components.Schemas.Get(`github.com.gogf.gf.v2.protocol.goai_test.SetSpecInfo`).Value.Properties.Map()), 3)
|
|
|
|
|
t.Assert(oai.Components.Schemas.Get(`github.com.gogf.gf.v2.protocol.goai_test.SetSpecInfo`).Value.Properties.Get(`Params`).Value.Type, goai.TypeArray)
|
2021-10-02 18:54:06 +08:00
|
|
|
|
|
|
|
|
|
// Paths.
|
2022-03-24 21:56:37 +08:00
|
|
|
|
t.Assert(len(oai.Paths), 1)
|
|
|
|
|
t.AssertNE(oai.Paths[`/test1/{appId}`].Put, nil)
|
|
|
|
|
t.Assert(len(oai.Paths[`/test1/{appId}`].Put.Tags), 1)
|
|
|
|
|
t.Assert(len(oai.Paths[`/test1/{appId}`].Put.Parameters), 2)
|
|
|
|
|
t.AssertNE(oai.Paths[`/test1/{appId}`].Post, nil)
|
|
|
|
|
t.Assert(len(oai.Paths[`/test1/{appId}`].Post.Tags), 1)
|
|
|
|
|
t.Assert(len(oai.Paths[`/test1/{appId}`].Post.Parameters), 2)
|
2021-10-02 14:52:28 +08:00
|
|
|
|
})
|
|
|
|
|
}
|
2021-10-06 14:45:29 +08:00
|
|
|
|
|
|
|
|
|
func TestOpenApiV3_Add_Recursive(t *testing.T) {
|
|
|
|
|
type CategoryTreeItem struct {
|
|
|
|
|
Id uint `json:"id"`
|
|
|
|
|
ParentId uint `json:"parent_id"`
|
|
|
|
|
Items []*CategoryTreeItem `json:"items,omitempty"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type CategoryGetTreeReq struct {
|
|
|
|
|
gmeta.Meta `path:"/category-get-tree" method:"GET" tags:"default"`
|
|
|
|
|
ContentType string `in:"query"`
|
|
|
|
|
}
|
|
|
|
|
type CategoryGetTreeRes struct {
|
|
|
|
|
List []*CategoryTreeItem
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
f := func(ctx context.Context, req *CategoryGetTreeReq) (res *CategoryGetTreeRes, err error) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
|
var (
|
|
|
|
|
err error
|
|
|
|
|
oai = goai.New()
|
|
|
|
|
)
|
|
|
|
|
err = oai.Add(goai.AddInput{
|
|
|
|
|
Path: "/tree",
|
|
|
|
|
Object: f,
|
|
|
|
|
})
|
|
|
|
|
t.AssertNil(err)
|
|
|
|
|
// Schema asserts.
|
2022-03-07 19:46:05 +08:00
|
|
|
|
t.Assert(len(oai.Components.Schemas.Map()), 3)
|
|
|
|
|
t.Assert(oai.Components.Schemas.Get(`github.com.gogf.gf.v2.protocol.goai_test.CategoryTreeItem`).Value.Type, goai.TypeObject)
|
|
|
|
|
t.Assert(len(oai.Components.Schemas.Get(`github.com.gogf.gf.v2.protocol.goai_test.CategoryTreeItem`).Value.Properties.Map()), 3)
|
2021-10-06 14:45:29 +08:00
|
|
|
|
})
|
|
|
|
|
}
|
2021-10-06 19:52:19 +08:00
|
|
|
|
|
|
|
|
|
func TestOpenApiV3_Add_EmptyReqAndRes(t *testing.T) {
|
|
|
|
|
type CaptchaIndexReq struct {
|
2021-10-11 20:39:13 +08:00
|
|
|
|
gmeta.Meta `method:"PUT" summary:"获取默认的验证码" description:"注意直接返回的是图片二进制内容" tags:"前台-验证码"`
|
2021-10-06 19:52:19 +08:00
|
|
|
|
}
|
|
|
|
|
type CaptchaIndexRes struct {
|
|
|
|
|
gmeta.Meta `mime:"png" description:"验证码二进制内容" `
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
f := func(ctx context.Context, req *CaptchaIndexReq) (res *CaptchaIndexRes, err error) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
|
var (
|
|
|
|
|
err error
|
|
|
|
|
oai = goai.New()
|
|
|
|
|
)
|
|
|
|
|
err = oai.Add(goai.AddInput{
|
|
|
|
|
Path: "/tree",
|
|
|
|
|
Object: f,
|
|
|
|
|
})
|
|
|
|
|
t.AssertNil(err)
|
|
|
|
|
// Schema asserts.
|
|
|
|
|
fmt.Println(oai.String())
|
|
|
|
|
})
|
|
|
|
|
}
|
2021-10-08 21:16:47 +08:00
|
|
|
|
|
2021-10-27 15:33:29 +08:00
|
|
|
|
func TestOpenApiV3_Add_AutoDetectIn(t *testing.T) {
|
|
|
|
|
type Req struct {
|
|
|
|
|
gmeta.Meta `method:"get" tags:"default"`
|
|
|
|
|
Name string
|
|
|
|
|
Product string
|
|
|
|
|
Region string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type Res struct {
|
|
|
|
|
gmeta.Meta `description:"Demo Response Struct"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
f := func(ctx context.Context, req *Req) (res *Res, err error) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
|
var (
|
|
|
|
|
err error
|
|
|
|
|
oai = goai.New()
|
|
|
|
|
path = `/test/{product}/{name}`
|
|
|
|
|
)
|
|
|
|
|
err = oai.Add(goai.AddInput{
|
|
|
|
|
Path: path,
|
|
|
|
|
Method: goai.HttpMethodGet,
|
|
|
|
|
Object: f,
|
|
|
|
|
})
|
|
|
|
|
t.AssertNil(err)
|
|
|
|
|
|
|
|
|
|
fmt.Println(oai.String())
|
|
|
|
|
|
2022-03-07 19:46:05 +08:00
|
|
|
|
t.Assert(len(oai.Components.Schemas.Map()), 2)
|
2022-03-24 21:56:37 +08:00
|
|
|
|
t.Assert(len(oai.Paths), 1)
|
|
|
|
|
t.AssertNE(oai.Paths[path].Get, nil)
|
|
|
|
|
t.Assert(len(oai.Paths[path].Get.Parameters), 3)
|
|
|
|
|
t.Assert(oai.Paths[path].Get.Parameters[0].Value.Name, `Name`)
|
|
|
|
|
t.Assert(oai.Paths[path].Get.Parameters[0].Value.In, goai.ParameterInPath)
|
|
|
|
|
t.Assert(oai.Paths[path].Get.Parameters[1].Value.Name, `Product`)
|
|
|
|
|
t.Assert(oai.Paths[path].Get.Parameters[1].Value.In, goai.ParameterInPath)
|
|
|
|
|
t.Assert(oai.Paths[path].Get.Parameters[2].Value.Name, `Region`)
|
|
|
|
|
t.Assert(oai.Paths[path].Get.Parameters[2].Value.In, goai.ParameterInQuery)
|
2021-10-27 15:33:29 +08:00
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
2021-10-11 17:10:55 +08:00
|
|
|
|
func TestOpenApiV3_CommonRequest(t *testing.T) {
|
|
|
|
|
type CommonRequest struct {
|
|
|
|
|
Code int `json:"code" description:"Error code"`
|
|
|
|
|
Message string `json:"message" description:"Error message"`
|
|
|
|
|
Data interface{} `json:"data" description:"Result data for certain request according API definition"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type Req struct {
|
|
|
|
|
gmeta.Meta `method:"PUT"`
|
|
|
|
|
Product string `json:"product" v:"required" description:"Unique product key"`
|
|
|
|
|
Name string `json:"name" v:"required" description:"Instance name"`
|
|
|
|
|
}
|
|
|
|
|
type Res struct {
|
|
|
|
|
Product string `json:"product" v:"required" description:"Unique product key"`
|
|
|
|
|
TemplateName string `json:"templateName" v:"required" description:"Workflow template name"`
|
|
|
|
|
Version string `json:"version" v:"required" description:"Workflow template version"`
|
|
|
|
|
TxID string `json:"txID" v:"required" description:"Transaction ID for creating instance"`
|
|
|
|
|
Globals string `json:"globals" description:"Globals"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
f := func(ctx context.Context, req *Req) (res *Res, err error) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
|
var (
|
|
|
|
|
err error
|
|
|
|
|
oai = goai.New()
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
oai.Config.CommonRequest = CommonRequest{}
|
|
|
|
|
oai.Config.CommonRequestDataField = `Data`
|
|
|
|
|
|
|
|
|
|
err = oai.Add(goai.AddInput{
|
|
|
|
|
Path: "/index",
|
|
|
|
|
Object: f,
|
|
|
|
|
})
|
|
|
|
|
t.AssertNil(err)
|
|
|
|
|
// Schema asserts.
|
2022-03-07 19:46:05 +08:00
|
|
|
|
t.Assert(len(oai.Components.Schemas.Map()), 3)
|
2022-03-24 21:56:37 +08:00
|
|
|
|
t.Assert(len(oai.Paths), 1)
|
|
|
|
|
t.Assert(len(oai.Paths["/index"].Put.RequestBody.Value.Content["application/json"].Schema.Value.Properties.Map()), 3)
|
2021-10-11 17:10:55 +08:00
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestOpenApiV3_CommonRequest_WithoutDataField_Setting(t *testing.T) {
|
|
|
|
|
type CommonRequest struct {
|
|
|
|
|
Code int `json:"code" description:"Error code"`
|
|
|
|
|
Message string `json:"message" description:"Error message"`
|
|
|
|
|
Data interface{} `json:"data" description:"Result data for certain request according API definition"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type Req struct {
|
|
|
|
|
gmeta.Meta `method:"PUT"`
|
|
|
|
|
Product string `json:"product" in:"query" v:"required" description:"Unique product key"`
|
|
|
|
|
Name string `json:"name" in:"query" v:"required" description:"Instance name"`
|
|
|
|
|
}
|
|
|
|
|
type Res struct {
|
|
|
|
|
Product string `json:"product" v:"required" description:"Unique product key"`
|
|
|
|
|
TemplateName string `json:"templateName" v:"required" description:"Workflow template name"`
|
|
|
|
|
Version string `json:"version" v:"required" description:"Workflow template version"`
|
|
|
|
|
TxID string `json:"txID" v:"required" description:"Transaction ID for creating instance"`
|
|
|
|
|
Globals string `json:"globals" description:"Globals"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
f := func(ctx context.Context, req *Req) (res *Res, err error) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
|
var (
|
|
|
|
|
err error
|
|
|
|
|
oai = goai.New()
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
oai.Config.CommonRequest = CommonRequest{}
|
|
|
|
|
|
|
|
|
|
err = oai.Add(goai.AddInput{
|
|
|
|
|
Path: "/index",
|
|
|
|
|
Object: f,
|
|
|
|
|
})
|
|
|
|
|
t.AssertNil(err)
|
|
|
|
|
// Schema asserts.
|
2021-11-13 23:34:16 +08:00
|
|
|
|
// fmt.Println(oai.String())
|
2022-03-07 19:46:05 +08:00
|
|
|
|
t.Assert(len(oai.Components.Schemas.Map()), 3)
|
2022-03-24 21:56:37 +08:00
|
|
|
|
t.Assert(len(oai.Paths), 1)
|
|
|
|
|
t.Assert(len(oai.Paths["/index"].Put.RequestBody.Value.Content["application/json"].Schema.Value.Properties.Map()), 5)
|
2021-10-11 17:10:55 +08:00
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestOpenApiV3_CommonRequest_EmptyRequest(t *testing.T) {
|
|
|
|
|
type CommonRequest struct {
|
|
|
|
|
Code int `json:"code" description:"Error code"`
|
|
|
|
|
Message string `json:"message" description:"Error message"`
|
|
|
|
|
Data interface{} `json:"data" description:"Result data for certain request according API definition"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type Req struct {
|
|
|
|
|
gmeta.Meta `method:"Put"`
|
|
|
|
|
Product string `json:"product" in:"query" v:"required" description:"Unique product key"`
|
|
|
|
|
Name string `json:"name" in:"query" v:"required" description:"Instance name"`
|
|
|
|
|
}
|
|
|
|
|
type Res struct{}
|
|
|
|
|
|
|
|
|
|
f := func(ctx context.Context, req *Req) (res *Res, err error) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
|
var (
|
|
|
|
|
err error
|
|
|
|
|
oai = goai.New()
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
oai.Config.CommonRequest = CommonRequest{}
|
|
|
|
|
oai.Config.CommonRequestDataField = `Data`
|
|
|
|
|
|
|
|
|
|
err = oai.Add(goai.AddInput{
|
|
|
|
|
Path: "/index",
|
|
|
|
|
Object: f,
|
|
|
|
|
})
|
|
|
|
|
t.AssertNil(err)
|
|
|
|
|
// Schema asserts.
|
2021-11-13 23:34:16 +08:00
|
|
|
|
// fmt.Println(oai.String())
|
2022-03-07 19:46:05 +08:00
|
|
|
|
t.Assert(len(oai.Components.Schemas.Map()), 3)
|
2022-03-24 21:56:37 +08:00
|
|
|
|
t.Assert(len(oai.Paths), 1)
|
|
|
|
|
t.Assert(len(oai.Paths["/index"].Put.RequestBody.Value.Content["application/json"].Schema.Value.Properties.Map()), 3)
|
2021-10-11 17:10:55 +08:00
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestOpenApiV3_CommonRequest_SubDataField(t *testing.T) {
|
|
|
|
|
type CommonReqError struct {
|
|
|
|
|
Code string `description:"错误码"`
|
|
|
|
|
Message string `description:"错误描述"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type CommonReqRequest struct {
|
|
|
|
|
RequestId string `description:"RequestId"`
|
|
|
|
|
Error *CommonReqError `json:",omitempty" description:"执行错误信息"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type CommonReq struct {
|
|
|
|
|
Request CommonReqRequest
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type Req struct {
|
|
|
|
|
gmeta.Meta `method:"Put"`
|
|
|
|
|
Product string `json:"product" in:"query" v:"required" description:"Unique product key"`
|
|
|
|
|
Name string `json:"name" in:"query" v:"required" description:"Instance name"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type Res struct {
|
|
|
|
|
Product string `json:"product" v:"required" description:"Unique product key"`
|
|
|
|
|
TemplateName string `json:"templateName" v:"required" description:"Workflow template name"`
|
|
|
|
|
Version string `json:"version" v:"required" description:"Workflow template version"`
|
|
|
|
|
TxID string `json:"txID" v:"required" description:"Transaction ID for creating instance"`
|
|
|
|
|
Globals string `json:"globals" description:"Globals"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
f := func(ctx context.Context, req *Req) (res *Res, err error) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
|
var (
|
|
|
|
|
err error
|
|
|
|
|
oai = goai.New()
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
oai.Config.CommonRequest = CommonReq{}
|
|
|
|
|
oai.Config.CommonRequestDataField = `Request.`
|
|
|
|
|
|
|
|
|
|
err = oai.Add(goai.AddInput{
|
|
|
|
|
Path: "/index",
|
|
|
|
|
Object: f,
|
|
|
|
|
})
|
|
|
|
|
t.AssertNil(err)
|
|
|
|
|
// Schema asserts.
|
2021-11-13 23:34:16 +08:00
|
|
|
|
// fmt.Println(oai.String())
|
2022-03-07 19:46:05 +08:00
|
|
|
|
t.Assert(len(oai.Components.Schemas.Map()), 4)
|
2022-03-24 21:56:37 +08:00
|
|
|
|
t.Assert(len(oai.Paths), 1)
|
|
|
|
|
t.Assert(len(oai.Paths["/index"].Put.RequestBody.Value.Content["application/json"].Schema.Value.Properties.Map()), 1)
|
|
|
|
|
t.Assert(len(oai.Paths["/index"].Put.RequestBody.Value.Content["application/json"].Schema.Value.Properties.Get(`Request`).Value.Properties.Map()), 4)
|
2021-10-11 17:10:55 +08:00
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
2021-10-08 21:16:47 +08:00
|
|
|
|
func TestOpenApiV3_CommonResponse(t *testing.T) {
|
|
|
|
|
type CommonResponse struct {
|
|
|
|
|
Code int `json:"code" description:"Error code"`
|
|
|
|
|
Message string `json:"message" description:"Error message"`
|
|
|
|
|
Data interface{} `json:"data" description:"Result data for certain request according API definition"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type Req struct {
|
|
|
|
|
gmeta.Meta `method:"GET"`
|
|
|
|
|
Product string `json:"product" in:"query" v:"required" description:"Unique product key"`
|
|
|
|
|
Name string `json:"name" in:"query" v:"required" description:"Instance name"`
|
|
|
|
|
}
|
|
|
|
|
type Res struct {
|
|
|
|
|
Product string `json:"product" v:"required" description:"Unique product key"`
|
|
|
|
|
TemplateName string `json:"templateName" v:"required" description:"Workflow template name"`
|
|
|
|
|
Version string `json:"version" v:"required" description:"Workflow template version"`
|
|
|
|
|
TxID string `json:"txID" v:"required" description:"Transaction ID for creating instance"`
|
|
|
|
|
Globals string `json:"globals" description:"Globals"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
f := func(ctx context.Context, req *Req) (res *Res, err error) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
|
var (
|
|
|
|
|
err error
|
|
|
|
|
oai = goai.New()
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
oai.Config.CommonResponse = CommonResponse{}
|
|
|
|
|
oai.Config.CommonResponseDataField = `Data`
|
|
|
|
|
|
|
|
|
|
err = oai.Add(goai.AddInput{
|
|
|
|
|
Path: "/index",
|
|
|
|
|
Object: f,
|
|
|
|
|
})
|
|
|
|
|
t.AssertNil(err)
|
2022-03-02 10:26:09 +08:00
|
|
|
|
|
2022-03-24 21:56:37 +08:00
|
|
|
|
//g.Dump(oai.Paths["/index"].Get.Responses["200"].Value.Content["application/json"].Schema.Value.Properties.Map())
|
2021-10-08 21:16:47 +08:00
|
|
|
|
// Schema asserts.
|
2022-03-07 19:46:05 +08:00
|
|
|
|
t.Assert(len(oai.Components.Schemas.Map()), 3)
|
2022-03-24 21:56:37 +08:00
|
|
|
|
t.Assert(len(oai.Paths), 1)
|
|
|
|
|
t.Assert(len(oai.Paths["/index"].Get.Responses["200"].Value.Content["application/json"].Schema.Value.Properties.Map()), 3)
|
2022-03-02 10:26:09 +08:00
|
|
|
|
t.Assert(
|
2022-03-24 21:56:37 +08:00
|
|
|
|
oai.Paths["/index"].Get.Responses["200"].Value.Content["application/json"].Schema.Value.Properties.Get("data").Value.Description,
|
2022-03-02 10:26:09 +08:00
|
|
|
|
`Result data for certain request according API definition`,
|
|
|
|
|
)
|
2021-10-08 21:16:47 +08:00
|
|
|
|
})
|
|
|
|
|
}
|
2021-10-08 21:23:30 +08:00
|
|
|
|
|
2021-10-11 16:55:38 +08:00
|
|
|
|
func TestOpenApiV3_CommonResponse_WithoutDataField_Setting(t *testing.T) {
|
|
|
|
|
type CommonResponse struct {
|
|
|
|
|
Code int `json:"code" description:"Error code"`
|
|
|
|
|
Message string `json:"message" description:"Error message"`
|
|
|
|
|
Data interface{} `json:"data" description:"Result data for certain request according API definition"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type Req struct {
|
|
|
|
|
gmeta.Meta `method:"GET"`
|
|
|
|
|
Product string `json:"product" in:"query" v:"required" description:"Unique product key"`
|
|
|
|
|
Name string `json:"name" in:"query" v:"required" description:"Instance name"`
|
|
|
|
|
}
|
|
|
|
|
type Res struct {
|
|
|
|
|
Product string `json:"product" v:"required" description:"Unique product key"`
|
|
|
|
|
TemplateName string `json:"templateName" v:"required" description:"Workflow template name"`
|
|
|
|
|
Version string `json:"version" v:"required" description:"Workflow template version"`
|
|
|
|
|
TxID string `json:"txID" v:"required" description:"Transaction ID for creating instance"`
|
|
|
|
|
Globals string `json:"globals" description:"Globals"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
f := func(ctx context.Context, req *Req) (res *Res, err error) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
|
var (
|
|
|
|
|
err error
|
|
|
|
|
oai = goai.New()
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
oai.Config.CommonResponse = CommonResponse{}
|
|
|
|
|
|
|
|
|
|
err = oai.Add(goai.AddInput{
|
|
|
|
|
Path: "/index",
|
|
|
|
|
Object: f,
|
|
|
|
|
})
|
|
|
|
|
t.AssertNil(err)
|
|
|
|
|
// Schema asserts.
|
|
|
|
|
fmt.Println(oai.String())
|
2022-03-07 19:46:05 +08:00
|
|
|
|
t.Assert(len(oai.Components.Schemas.Map()), 3)
|
2022-03-24 21:56:37 +08:00
|
|
|
|
t.Assert(len(oai.Paths), 1)
|
|
|
|
|
t.Assert(len(oai.Paths["/index"].Get.Responses["200"].Value.Content["application/json"].Schema.Value.Properties.Map()), 8)
|
2021-10-11 16:55:38 +08:00
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
2021-10-08 21:23:30 +08:00
|
|
|
|
func TestOpenApiV3_CommonResponse_EmptyResponse(t *testing.T) {
|
|
|
|
|
type CommonResponse struct {
|
|
|
|
|
Code int `json:"code" description:"Error code"`
|
|
|
|
|
Message string `json:"message" description:"Error message"`
|
|
|
|
|
Data interface{} `json:"data" description:"Result data for certain request according API definition"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type Req struct {
|
2021-10-11 20:39:13 +08:00
|
|
|
|
gmeta.Meta `method:"PUT"`
|
|
|
|
|
Product string `json:"product" v:"required" description:"Unique product key"`
|
|
|
|
|
Name string `json:"name" v:"required" description:"Instance name"`
|
2021-10-08 21:23:30 +08:00
|
|
|
|
}
|
|
|
|
|
type Res struct{}
|
|
|
|
|
|
|
|
|
|
f := func(ctx context.Context, req *Req) (res *Res, err error) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
|
var (
|
|
|
|
|
err error
|
|
|
|
|
oai = goai.New()
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
oai.Config.CommonResponse = CommonResponse{}
|
|
|
|
|
oai.Config.CommonResponseDataField = `Data`
|
|
|
|
|
|
|
|
|
|
err = oai.Add(goai.AddInput{
|
|
|
|
|
Path: "/index",
|
|
|
|
|
Object: f,
|
|
|
|
|
})
|
|
|
|
|
t.AssertNil(err)
|
|
|
|
|
// Schema asserts.
|
2021-11-13 23:34:16 +08:00
|
|
|
|
// fmt.Println(oai.String())
|
2022-03-07 19:46:05 +08:00
|
|
|
|
t.Assert(len(oai.Components.Schemas.Map()), 3)
|
2022-03-24 21:56:37 +08:00
|
|
|
|
t.Assert(len(oai.Paths), 1)
|
|
|
|
|
t.Assert(oai.Paths["/index"].Put.RequestBody.Value.Content["application/json"].Schema.Ref, `github.com.gogf.gf.v2.protocol.goai_test.Req`)
|
|
|
|
|
t.Assert(len(oai.Paths["/index"].Put.Responses["200"].Value.Content["application/json"].Schema.Value.Properties.Map()), 3)
|
2021-10-08 21:23:30 +08:00
|
|
|
|
})
|
|
|
|
|
}
|
2021-10-11 16:55:38 +08:00
|
|
|
|
|
|
|
|
|
func TestOpenApiV3_CommonResponse_SubDataField(t *testing.T) {
|
|
|
|
|
type CommonResError struct {
|
|
|
|
|
Code string `description:"错误码"`
|
|
|
|
|
Message string `description:"错误描述"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type CommonResResponse struct {
|
|
|
|
|
RequestId string `description:"RequestId"`
|
|
|
|
|
Error *CommonResError `json:",omitempty" description:"执行错误信息"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type CommonRes struct {
|
|
|
|
|
Response CommonResResponse
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type Req struct {
|
|
|
|
|
gmeta.Meta `method:"GET"`
|
|
|
|
|
Product string `json:"product" in:"query" v:"required" description:"Unique product key"`
|
|
|
|
|
Name string `json:"name" in:"query" v:"required" description:"Instance name"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type Res struct {
|
|
|
|
|
Product string `json:"product" v:"required" description:"Unique product key"`
|
|
|
|
|
TemplateName string `json:"templateName" v:"required" description:"Workflow template name"`
|
|
|
|
|
Version string `json:"version" v:"required" description:"Workflow template version"`
|
|
|
|
|
TxID string `json:"txID" v:"required" description:"Transaction ID for creating instance"`
|
|
|
|
|
Globals string `json:"globals" description:"Globals"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
f := func(ctx context.Context, req *Req) (res *Res, err error) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
|
var (
|
|
|
|
|
err error
|
|
|
|
|
oai = goai.New()
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
oai.Config.CommonResponse = CommonRes{}
|
|
|
|
|
oai.Config.CommonResponseDataField = `Response.`
|
|
|
|
|
|
|
|
|
|
err = oai.Add(goai.AddInput{
|
|
|
|
|
Path: "/index",
|
|
|
|
|
Object: f,
|
|
|
|
|
})
|
|
|
|
|
t.AssertNil(err)
|
|
|
|
|
// Schema asserts.
|
2021-11-13 23:34:16 +08:00
|
|
|
|
// fmt.Println(oai.String())
|
2022-03-07 19:46:05 +08:00
|
|
|
|
t.Assert(len(oai.Components.Schemas.Map()), 4)
|
2022-03-24 21:56:37 +08:00
|
|
|
|
t.Assert(len(oai.Paths), 1)
|
|
|
|
|
t.Assert(len(oai.Paths["/index"].Get.Responses["200"].Value.Content["application/json"].Schema.Value.Properties.Map()), 1)
|
|
|
|
|
t.Assert(len(oai.Paths["/index"].Get.Responses["200"].Value.Content["application/json"].Schema.Value.Properties.Get(`Response`).Value.Properties.Map()), 7)
|
2021-10-11 16:55:38 +08:00
|
|
|
|
})
|
|
|
|
|
}
|
2021-10-21 20:17:02 +08:00
|
|
|
|
|
|
|
|
|
func TestOpenApiV3_ShortTags(t *testing.T) {
|
|
|
|
|
type CommonReq struct {
|
|
|
|
|
AppId int64 `json:"appId" v:"required" in:"path" des:"应用Id" sum:"应用Id Summary"`
|
|
|
|
|
ResourceId string `json:"resourceId" in:"query" des:"资源Id" sum:"资源Id Summary"`
|
|
|
|
|
}
|
|
|
|
|
type SetSpecInfo struct {
|
|
|
|
|
StorageType string `v:"required|in:CLOUD_PREMIUM,CLOUD_SSD,CLOUD_HSSD" des:"StorageType"`
|
|
|
|
|
Shards int32 `des:"shards 分片数" sum:"Shards Summary"`
|
|
|
|
|
Params []string `des:"默认参数(json 串-ClickHouseParams)" sum:"Params Summary"`
|
|
|
|
|
}
|
|
|
|
|
type CreateResourceReq struct {
|
|
|
|
|
CommonReq
|
|
|
|
|
gmeta.Meta `path:"/CreateResourceReq" method:"POST" tags:"default" sum:"CreateResourceReq sum"`
|
|
|
|
|
Name string `des:"实例名称"`
|
|
|
|
|
Product string `des:"业务类型"`
|
|
|
|
|
Region string `v:"required" des:"区域"`
|
|
|
|
|
SetMap map[string]*SetSpecInfo `v:"required" des:"配置Map"`
|
|
|
|
|
SetSlice []SetSpecInfo `v:"required" des:"配置Slice"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type CreateResourceRes struct {
|
|
|
|
|
gmeta.Meta `des:"Demo Response Struct"`
|
|
|
|
|
FlowId int64 `des:"创建实例流程id"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
f := func(ctx context.Context, req *CreateResourceReq) (res *CreateResourceRes, err error) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
|
var (
|
|
|
|
|
err error
|
|
|
|
|
oai = goai.New()
|
|
|
|
|
)
|
|
|
|
|
err = oai.Add(goai.AddInput{
|
|
|
|
|
Path: "/test1/{appId}",
|
|
|
|
|
Method: goai.HttpMethodPut,
|
|
|
|
|
Object: f,
|
|
|
|
|
})
|
|
|
|
|
t.AssertNil(err)
|
|
|
|
|
|
|
|
|
|
err = oai.Add(goai.AddInput{
|
|
|
|
|
Path: "/test1/{appId}",
|
|
|
|
|
Method: goai.HttpMethodPost,
|
|
|
|
|
Object: f,
|
|
|
|
|
})
|
|
|
|
|
t.AssertNil(err)
|
2021-11-13 23:34:16 +08:00
|
|
|
|
// fmt.Println(oai.String())
|
2021-10-21 20:17:02 +08:00
|
|
|
|
// Schema asserts.
|
2022-03-07 19:46:05 +08:00
|
|
|
|
t.Assert(len(oai.Components.Schemas.Map()), 3)
|
2022-03-24 21:56:37 +08:00
|
|
|
|
t.Assert(oai.Paths[`/test1/{appId}`].Summary, `CreateResourceReq sum`)
|
2021-10-21 20:17:02 +08:00
|
|
|
|
t.Assert(oai.
|
|
|
|
|
Components.
|
2022-03-07 19:46:05 +08:00
|
|
|
|
Schemas.Get(`github.com.gogf.gf.v2.protocol.goai_test.CreateResourceReq`).
|
|
|
|
|
Value.Properties.Get(`resourceId`).Value.Description, `资源Id`)
|
2021-10-21 20:17:02 +08:00
|
|
|
|
})
|
|
|
|
|
}
|
2021-10-25 21:06:24 +08:00
|
|
|
|
|
|
|
|
|
func TestOpenApiV3_HtmlResponse(t *testing.T) {
|
|
|
|
|
type Req struct {
|
|
|
|
|
g.Meta `path:"/test" method:"get" summary:"展示内容详情页面" tags:"内容"`
|
|
|
|
|
Id uint `json:"id" v:"min:1#请选择查看的内容" dc:"内容id"`
|
|
|
|
|
}
|
|
|
|
|
type Res struct {
|
2021-10-25 21:23:47 +08:00
|
|
|
|
g.Meta `mime:"text/html" type:"string" example:"<html/>"`
|
2021-10-25 21:06:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
f := func(ctx context.Context, req *Req) (res *Res, err error) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
|
var (
|
|
|
|
|
err error
|
|
|
|
|
oai = goai.New()
|
|
|
|
|
)
|
|
|
|
|
err = oai.Add(goai.AddInput{
|
|
|
|
|
Path: "/test",
|
|
|
|
|
Method: goai.HttpMethodGet,
|
|
|
|
|
Object: f,
|
|
|
|
|
})
|
|
|
|
|
t.AssertNil(err)
|
|
|
|
|
|
2021-11-13 23:34:16 +08:00
|
|
|
|
// fmt.Println(oai.String())
|
2022-03-07 19:46:05 +08:00
|
|
|
|
t.Assert(oai.Components.Schemas.Get(`github.com.gogf.gf.v2.protocol.goai_test.Res`).Value.Type, goai.TypeString)
|
2021-10-25 21:06:24 +08:00
|
|
|
|
})
|
|
|
|
|
}
|
2021-10-25 21:23:47 +08:00
|
|
|
|
|
|
|
|
|
func TestOpenApiV3_HtmlResponseWithCommonResponse(t *testing.T) {
|
|
|
|
|
type CommonResError struct {
|
|
|
|
|
Code string `description:"错误码"`
|
|
|
|
|
Message string `description:"错误描述"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type CommonResResponse struct {
|
|
|
|
|
RequestId string `description:"RequestId"`
|
|
|
|
|
Error *CommonResError `json:",omitempty" description:"执行错误信息"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type CommonRes struct {
|
|
|
|
|
Response CommonResResponse
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type Req struct {
|
|
|
|
|
g.Meta `path:"/test" method:"get" summary:"展示内容详情页面" tags:"内容"`
|
|
|
|
|
Id uint `json:"id" v:"min:1#请选择查看的内容" dc:"内容id"`
|
|
|
|
|
}
|
|
|
|
|
type Res struct {
|
|
|
|
|
g.Meta `mime:"text/html" type:"string" example:"<html/>"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
f := func(ctx context.Context, req *Req) (res *Res, err error) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
|
var (
|
|
|
|
|
err error
|
|
|
|
|
oai = goai.New()
|
|
|
|
|
)
|
|
|
|
|
oai.Config.CommonResponse = CommonRes{}
|
|
|
|
|
oai.Config.CommonResponseDataField = `Response.`
|
|
|
|
|
|
|
|
|
|
err = oai.Add(goai.AddInput{
|
|
|
|
|
Path: "/test",
|
|
|
|
|
Method: goai.HttpMethodGet,
|
|
|
|
|
Object: f,
|
|
|
|
|
})
|
|
|
|
|
t.AssertNil(err)
|
|
|
|
|
|
2021-11-13 23:34:16 +08:00
|
|
|
|
// fmt.Println(oai.String())
|
2022-03-07 19:46:05 +08:00
|
|
|
|
t.Assert(oai.Components.Schemas.Get(`github.com.gogf.gf.v2.protocol.goai_test.Res`).Value.Type, goai.TypeString)
|
2021-10-25 21:23:47 +08:00
|
|
|
|
})
|
|
|
|
|
}
|
2022-03-07 20:49:30 +08:00
|
|
|
|
|
|
|
|
|
func Test_Required_In_Schema(t *testing.T) {
|
|
|
|
|
type CommonReq struct {
|
|
|
|
|
AppId int64 `json:"appId" v:"required" in:"cookie" description:"应用Id"`
|
|
|
|
|
ResourceId string `json:"resourceId" in:"query" description:"资源Id"`
|
|
|
|
|
}
|
|
|
|
|
type SetSpecInfo struct {
|
|
|
|
|
StorageType string `v:"required|in:CLOUD_PREMIUM,CLOUD_SSD,CLOUD_HSSD" description:"StorageType"`
|
|
|
|
|
Shards int32 `description:"shards 分片数"`
|
|
|
|
|
Params []string `description:"默认参数(json 串-ClickHouseParams)"`
|
|
|
|
|
}
|
|
|
|
|
type CreateResourceReq struct {
|
|
|
|
|
CommonReq
|
|
|
|
|
gmeta.Meta `path:"/CreateResourceReq" method:"POST" tags:"default"`
|
|
|
|
|
Name string `description:"实例名称"`
|
|
|
|
|
Product string `description:"业务类型"`
|
|
|
|
|
Region string `v:"required|min:1" description:"区域"`
|
|
|
|
|
SetMap map[string]*SetSpecInfo `v:"required|min:1" description:"配置Map"`
|
|
|
|
|
SetSlice []SetSpecInfo `v:"required|min:1" description:"配置Slice"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
|
var (
|
|
|
|
|
err error
|
|
|
|
|
oai = goai.New()
|
|
|
|
|
req = new(CreateResourceReq)
|
|
|
|
|
)
|
|
|
|
|
err = oai.Add(goai.AddInput{
|
|
|
|
|
Object: req,
|
|
|
|
|
})
|
|
|
|
|
t.AssertNil(err)
|
|
|
|
|
var (
|
|
|
|
|
schemaKey1 = `github.com.gogf.gf.v2.protocol.goai_test.CreateResourceReq`
|
|
|
|
|
schemaKey2 = `github.com.gogf.gf.v2.protocol.goai_test.SetSpecInfo`
|
|
|
|
|
)
|
|
|
|
|
t.Assert(oai.Components.Schemas.Map()[schemaKey1].Value.Required, g.Slice{
|
|
|
|
|
"appId",
|
|
|
|
|
"Region",
|
|
|
|
|
"SetMap",
|
|
|
|
|
"SetSlice",
|
|
|
|
|
})
|
|
|
|
|
t.Assert(oai.Components.Schemas.Map()[schemaKey2].Value.Required, g.Slice{
|
|
|
|
|
"StorageType",
|
|
|
|
|
})
|
|
|
|
|
t.Assert(oai.Components.Schemas.Map()[schemaKey2].Value.Properties.Map()["StorageType"].Value.Enum, g.Slice{
|
|
|
|
|
"CLOUD_PREMIUM",
|
|
|
|
|
"CLOUD_SSD",
|
|
|
|
|
"CLOUD_HSSD",
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
}
|
2022-03-25 12:00:09 +08:00
|
|
|
|
|
|
|
|
|
func Test_Properties_In_Sequence(t *testing.T) {
|
|
|
|
|
type ResourceCreateReq struct {
|
2022-03-29 20:31:00 +08:00
|
|
|
|
g.Meta `path:"/resource" tags:"OSS Resource" method:"put" x-sort:"1" summary:"创建实例(发货)"`
|
2022-03-25 12:00:09 +08:00
|
|
|
|
AppId uint64 `v:"required" dc:"应用Id"`
|
|
|
|
|
Uin string `v:"required" dc:"主用户账号,该资源隶属于的账号"`
|
|
|
|
|
CreateUin string `v:"required" dc:"创建实例的用户账号"`
|
|
|
|
|
Product string `v:"required" dc:"业务类型" eg:"tdach"`
|
|
|
|
|
Region string `v:"required" dc:"地域" eg:"ap-guangzhou"`
|
|
|
|
|
Zone string `v:"required" dc:"区域" eg:"ap-guangzhou-1"`
|
|
|
|
|
Tenant string `v:"required" dc:"业务自定义数据,透传到底层"`
|
|
|
|
|
VpcId string `dc:"业务Vpc Id, TCS场景下非必须"`
|
|
|
|
|
SubnetId string `dc:"业务Vpc子网Id"`
|
|
|
|
|
Name string `dc:"自定义实例名称,默认和ResourceId一致"`
|
|
|
|
|
ClusterPreset string `dc:"业务自定义Cluster定义,透传到底层"`
|
|
|
|
|
Engine string `dc:"引擎名称,例如:TxLightning"`
|
|
|
|
|
Version string `dc:"引擎版本,例如:10.3.213 (兼容ClickHouse 21.3.12)"`
|
2022-03-28 15:21:58 +08:00
|
|
|
|
SkipUpdateStatus bool `dc:"是否跳过状态更新,继续保持creating" ed:"http://goframe.org"`
|
2022-03-25 12:00:09 +08:00
|
|
|
|
}
|
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
|
var (
|
|
|
|
|
err error
|
|
|
|
|
oai = goai.New()
|
|
|
|
|
req = new(ResourceCreateReq)
|
|
|
|
|
)
|
|
|
|
|
err = oai.Add(goai.AddInput{
|
|
|
|
|
Object: req,
|
|
|
|
|
})
|
|
|
|
|
t.AssertNil(err)
|
2022-03-28 15:21:58 +08:00
|
|
|
|
fmt.Println(oai)
|
2022-03-25 12:00:09 +08:00
|
|
|
|
})
|
|
|
|
|
}
|
2022-04-26 23:22:43 +08:00
|
|
|
|
|
|
|
|
|
func TestOpenApiV3_Ignore_Parameter(t *testing.T) {
|
|
|
|
|
type CommonResponse struct {
|
|
|
|
|
Code int `json:"code" description:"Error code"`
|
|
|
|
|
Message string `json:"message" description:"Error message"`
|
|
|
|
|
Data interface{} `json:"data" description:"Result data for certain request according API definition"`
|
|
|
|
|
}
|
|
|
|
|
type ProductSearchReq struct {
|
|
|
|
|
gmeta.Meta `path:"/test" method:"get"`
|
|
|
|
|
Product string `json:"-" in:"query" v:"required|max:5" description:"Unique product key"`
|
|
|
|
|
Name string `json:"name" in:"query" v:"required" description:"Instance name"`
|
|
|
|
|
}
|
|
|
|
|
type ProductSearchRes struct {
|
|
|
|
|
ID int64 `json:"-" description:"Product ID"`
|
|
|
|
|
Product string `json:"product" v:"required" description:"Unique product key"`
|
|
|
|
|
TemplateName string `json:"templateName" v:"required" description:"Workflow template name"`
|
|
|
|
|
Version string `json:"version" v:"required" description:"Workflow template version"`
|
|
|
|
|
TxID string `json:"txID" v:"required" description:"Transaction ID for creating instance"`
|
|
|
|
|
Globals string `json:"globals" description:"Globals"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
f := func(ctx context.Context, req *ProductSearchReq) (res *ProductSearchRes, err error) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
|
var (
|
|
|
|
|
err error
|
|
|
|
|
oai = goai.New()
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
oai.Config.CommonResponse = CommonResponse{}
|
|
|
|
|
|
|
|
|
|
err = oai.Add(goai.AddInput{
|
|
|
|
|
Object: f,
|
|
|
|
|
})
|
|
|
|
|
t.AssertNil(err)
|
|
|
|
|
// Schema asserts.
|
|
|
|
|
// fmt.Println(oai.String())
|
|
|
|
|
t.Assert(len(oai.Components.Schemas.Map()), 3)
|
|
|
|
|
t.Assert(len(oai.Paths), 1)
|
|
|
|
|
t.Assert(len(oai.Paths["/test"].Get.Responses["200"].Value.Content["application/json"].Schema.Value.Properties.Map()), 8)
|
|
|
|
|
})
|
|
|
|
|
}
|
2022-05-17 11:15:29 +08:00
|
|
|
|
|
|
|
|
|
func Test_EnumOfSchemaItems(t *testing.T) {
|
|
|
|
|
type CreateResourceReq struct {
|
|
|
|
|
gmeta.Meta `path:"/CreateResourceReq" method:"POST"`
|
|
|
|
|
Members []string `v:"required|in:a,b,c"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
|
var (
|
|
|
|
|
err error
|
|
|
|
|
oai = goai.New()
|
|
|
|
|
req = new(CreateResourceReq)
|
|
|
|
|
)
|
|
|
|
|
err = oai.Add(goai.AddInput{
|
|
|
|
|
Object: req,
|
|
|
|
|
})
|
|
|
|
|
t.AssertNil(err)
|
|
|
|
|
|
|
|
|
|
t.Assert(
|
|
|
|
|
oai.Components.Schemas.Get(`github.com.gogf.gf.v2.protocol.goai_test.CreateResourceReq`).Value.
|
|
|
|
|
Properties.Get(`Members`).Value.
|
|
|
|
|
Items.Value.Enum,
|
|
|
|
|
g.Slice{"a", "b", "c"},
|
|
|
|
|
)
|
|
|
|
|
})
|
|
|
|
|
}
|