in coverage/from_local_spec.go [42:115]
func GetModelInfoFromLocalSpecFile(resourceId, swaggerPath string, method string) (*SwaggerModel, error) {
doc, err := loadSwagger(swaggerPath)
if err != nil {
return nil, err
}
paths := doc.Spec().Paths
if paths == nil {
return nil, fmt.Errorf("paths is nil, swagger path: %v", swaggerPath)
}
for pathKey, pathItem := range paths.Paths {
if !IsPathKeyMatchWithResourceId(pathKey, resourceId) {
continue
}
var operation *openapispec.Operation
switch strings.ToUpper(method) {
case "GET":
operation = pathItem.Get
case "PUT":
operation = pathItem.Put
case "POST":
operation = pathItem.Post
case "DELETE":
operation = pathItem.Delete
case "OPTIONS":
operation = pathItem.Options
case "HEAD":
operation = pathItem.Head
case "PATCH":
operation = pathItem.Patch
default:
logrus.Warnf("unsupported method %v", method)
}
if operation == nil {
// should not happen
logrus.Warnf("no PUT operation found for path %v", pathKey)
continue
}
var modelName string
for _, param := range operation.Parameters {
paramRef := param.Ref
if paramRef.String() != "" {
refParam, err := openapispec.ResolveParameterWithBase(nil, param.Ref, &openapispec.ExpandOptions{RelativeBase: swaggerPath})
if err != nil {
return nil, fmt.Errorf("resolve param ref %q: %+v", param.Ref.String(), err)
}
// Update the param
param = *refParam
}
if param.In == "body" {
if paramRef.String() != "" {
modelName, swaggerPath = SchemaNamePathFromRef(swaggerPath, paramRef)
}
if param.Schema.Ref.String() != "" {
modelName, swaggerPath = SchemaNamePathFromRef(swaggerPath, param.Schema.Ref)
}
break
}
}
return &SwaggerModel{
ApiPath: pathKey,
ModelName: modelName,
SwaggerPath: swaggerPath,
OperationID: operation.ID,
}, nil
}
return nil, nil
}