[go-server] Add tests, minor format change (#16805)

* add tests for #16787, minor format change

* revert

* fix typo

* use pet instead of fake

* update samples
This commit is contained in:
William Cheng 2023-10-12 19:23:02 +08:00 committed by GitHub
parent 75ce5968bf
commit ba367e60e8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 253 additions and 18 deletions

View File

@ -3,12 +3,12 @@ package {{packageName}}
import ( import (
"encoding/json" "encoding/json"
{{#isBodyParam}} {{#isBodyParam}}
{{^required}} {{^required}}
"errors" "errors"
"io" "io"
{{/required}} {{/required}}
{{/isBodyParam}} {{/isBodyParam}}
"net/http" "net/http"
"strings" "strings"
@ -361,9 +361,11 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re
{{/isNumber}} {{/isNumber}}
{{/isQueryParam}} {{/isQueryParam}}
{{#isFormParam}} {{#isFormParam}}
{{#isFile}}{{#isArray}} {{#isFile}}
{{#isArray}}
{{paramName}}Param, err := ReadFormFilesToTempFiles(r, "{{baseName}}") {{paramName}}Param, err := ReadFormFilesToTempFiles(r, "{{baseName}}")
{{/isArray}}{{^isArray}} {{/isArray}}
{{^isArray}}
{{paramName}}Param, err := ReadFormFileToTempFile(r, "{{baseName}}") {{paramName}}Param, err := ReadFormFileToTempFile(r, "{{baseName}}")
{{/isArray}} {{/isArray}}
if err != nil { if err != nil {

View File

@ -579,6 +579,47 @@ paths:
description: User not found description: User not found
security: security:
- api_key: [] - api_key: []
'/fake/uploadImage/array of_file':
post:
tags:
- pet
summary: uploads images (array of files)
description: ''
operationId: uploadFileArrayOfFiles
parameters:
- name: petId
in: path
description: ID of pet to update
required: true
schema:
type: integer
format: int64
responses:
'200':
description: successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/ApiResponse'
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
requestBody:
content:
multipart/form-data:
schema:
type: object
properties:
additionalMetadata:
description: Additional data to pass to server
type: string
files:
description: files to upload
type: array
items:
type: string
format: binary
externalDocs: externalDocs:
description: Find out more about Swagger description: Find out more about Swagger
url: 'http://swagger.io' url: 'http://swagger.io'

View File

@ -231,10 +231,10 @@ func (c *PetAPIController) UpdatePetWithForm(w http.ResponseWriter, r *http.Requ
c.errorHandler(w, r, &ParsingError{Err: err}, nil) c.errorHandler(w, r, &ParsingError{Err: err}, nil)
return return
} }
nameParam := r.FormValue("name") nameParam := r.FormValue("name")
statusParam := r.FormValue("status") statusParam := r.FormValue("status")
result, err := c.service.UpdatePetWithForm(r.Context(), petIdParam, nameParam, statusParam) result, err := c.service.UpdatePetWithForm(r.Context(), petIdParam, nameParam, statusParam)
@ -261,10 +261,9 @@ func (c *PetAPIController) UploadFile(w http.ResponseWriter, r *http.Request) {
c.errorHandler(w, r, &ParsingError{Err: err}, nil) c.errorHandler(w, r, &ParsingError{Err: err}, nil)
return return
} }
additionalMetadataParam := r.FormValue("additionalMetadata") additionalMetadataParam := r.FormValue("additionalMetadata")
fileParam, err := ReadFormFileToTempFile(r, "file") fileParam, err := ReadFormFileToTempFile(r, "file")
if err != nil { if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil) c.errorHandler(w, r, &ParsingError{Err: err}, nil)

View File

@ -598,6 +598,39 @@ paths:
summary: Updated user summary: Updated user
tags: tags:
- user - user
/fake/uploadImage/array of_file:
post:
description: ""
operationId: uploadFileArrayOfFiles
parameters:
- description: ID of pet to update
explode: false
in: path
name: petId
required: true
schema:
format: int64
type: integer
style: simple
requestBody:
content:
multipart/form-data:
schema:
$ref: '#/components/schemas/uploadFileArrayOfFiles_request'
responses:
"200":
content:
application/json:
schema:
$ref: '#/components/schemas/ApiResponse'
description: successful operation
security:
- petstore_auth:
- write:pets
- read:pets
summary: uploads images (array of files)
tags:
- pet
components: components:
requestBodies: requestBodies:
UserArray: UserArray:
@ -1022,6 +1055,18 @@ components:
format: binary format: binary
type: string type: string
type: object type: object
uploadFileArrayOfFiles_request:
properties:
additionalMetadata:
description: Additional data to pass to server
type: string
files:
description: files to upload
items:
format: binary
type: string
type: array
type: object
an_Object: an_Object:
description: An array 3-deep. description: An array 3-deep.
example: example:

View File

@ -30,6 +30,7 @@ type PetAPIRouter interface {
UpdatePet(http.ResponseWriter, *http.Request) UpdatePet(http.ResponseWriter, *http.Request)
UpdatePetWithForm(http.ResponseWriter, *http.Request) UpdatePetWithForm(http.ResponseWriter, *http.Request)
UploadFile(http.ResponseWriter, *http.Request) UploadFile(http.ResponseWriter, *http.Request)
UploadFileArrayOfFiles(http.ResponseWriter, *http.Request)
} }
// StoreAPIRouter defines the required methods for binding the api requests to a responses for the StoreAPI // StoreAPIRouter defines the required methods for binding the api requests to a responses for the StoreAPI
// The StoreAPIRouter implementation should parse necessary information from the http request, // The StoreAPIRouter implementation should parse necessary information from the http request,
@ -69,6 +70,7 @@ type PetAPIServicer interface {
UpdatePet(context.Context, Pet) (ImplResponse, error) UpdatePet(context.Context, Pet) (ImplResponse, error)
UpdatePetWithForm(context.Context, int64, string, string) (ImplResponse, error) UpdatePetWithForm(context.Context, int64, string, string) (ImplResponse, error)
UploadFile(context.Context, int64, string, *os.File) (ImplResponse, error) UploadFile(context.Context, int64, string, *os.File) (ImplResponse, error)
UploadFileArrayOfFiles(context.Context, int64, string, []*os.File) (ImplResponse, error)
} }

View File

@ -90,6 +90,11 @@ func (c *PetAPIController) Routes() Routes {
"/v2/pet/{petId}/uploadImage", "/v2/pet/{petId}/uploadImage",
c.UploadFile, c.UploadFile,
}, },
"UploadFileArrayOfFiles": Route{
strings.ToUpper("Post"),
"/v2/fake/uploadImage/array of_file",
c.UploadFileArrayOfFiles,
},
} }
} }
@ -234,10 +239,10 @@ func (c *PetAPIController) UpdatePetWithForm(w http.ResponseWriter, r *http.Requ
c.errorHandler(w, r, &ParsingError{Err: err}, nil) c.errorHandler(w, r, &ParsingError{Err: err}, nil)
return return
} }
nameParam := r.FormValue("name") nameParam := r.FormValue("name")
statusParam := r.FormValue("status") statusParam := r.FormValue("status")
result, err := c.service.UpdatePetWithForm(r.Context(), petIdParam, nameParam, statusParam) result, err := c.service.UpdatePetWithForm(r.Context(), petIdParam, nameParam, statusParam)
@ -265,10 +270,9 @@ func (c *PetAPIController) UploadFile(w http.ResponseWriter, r *http.Request) {
c.errorHandler(w, r, &ParsingError{Err: err}, nil) c.errorHandler(w, r, &ParsingError{Err: err}, nil)
return return
} }
additionalMetadataParam := r.FormValue("additionalMetadata") additionalMetadataParam := r.FormValue("additionalMetadata")
fileParam, err := ReadFormFileToTempFile(r, "file") fileParam, err := ReadFormFileToTempFile(r, "file")
if err != nil { if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil) c.errorHandler(w, r, &ParsingError{Err: err}, nil)
@ -285,3 +289,38 @@ func (c *PetAPIController) UploadFile(w http.ResponseWriter, r *http.Request) {
// If no error, encode the body and the result code // If no error, encode the body and the result code
EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) EncodeJSONResponse(result.Body, &result.Code, result.Headers, w)
} }
// UploadFileArrayOfFiles - uploads images (array of files)
func (c *PetAPIController) UploadFileArrayOfFiles(w http.ResponseWriter, r *http.Request) {
if err := r.ParseMultipartForm(32 << 20); err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
return
}
params := mux.Vars(r)
petIdParam, err := parseNumericParameter[int64](
params["petId"],
WithRequire[int64](parseInt64),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
return
}
additionalMetadataParam := r.FormValue("additionalMetadata")
filesParam, err := ReadFormFilesToTempFiles(r, "files")
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
return
}
result, err := c.service.UploadFileArrayOfFiles(r.Context(), petIdParam, additionalMetadataParam, filesParam)
// If an error occurred, encode the error with the status code
if err != nil {
c.errorHandler(w, r, err, &result)
return
}
// If no error, encode the body and the result code
EncodeJSONResponse(result.Body, &result.Code, result.Headers, w)
}

View File

@ -139,3 +139,14 @@ func (s *PetAPIService) UploadFile(ctx context.Context, petId int64, additionalM
return Response(http.StatusNotImplemented, nil), errors.New("UploadFile method not implemented") return Response(http.StatusNotImplemented, nil), errors.New("UploadFile method not implemented")
} }
// UploadFileArrayOfFiles - uploads images (array of files)
func (s *PetAPIService) UploadFileArrayOfFiles(ctx context.Context, petId int64, additionalMetadata string, files []*os.File) (ImplResponse, error) {
// TODO - update UploadFileArrayOfFiles with the required logic for this service method.
// Add api_pet_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation.
// TODO: Uncomment the next line to return response Response(200, ApiResponse{}) or use other options such as http.Ok ...
// return Response(200, ApiResponse{}), nil
return Response(http.StatusNotImplemented, nil), errors.New("UploadFileArrayOfFiles method not implemented")
}

View File

@ -598,6 +598,39 @@ paths:
summary: Updated user summary: Updated user
tags: tags:
- user - user
/fake/uploadImage/array of_file:
post:
description: ""
operationId: uploadFileArrayOfFiles
parameters:
- description: ID of pet to update
explode: false
in: path
name: petId
required: true
schema:
format: int64
type: integer
style: simple
requestBody:
content:
multipart/form-data:
schema:
$ref: '#/components/schemas/uploadFileArrayOfFiles_request'
responses:
"200":
content:
application/json:
schema:
$ref: '#/components/schemas/ApiResponse'
description: successful operation
security:
- petstore_auth:
- write:pets
- read:pets
summary: uploads images (array of files)
tags:
- pet
components: components:
requestBodies: requestBodies:
UserArray: UserArray:
@ -1022,6 +1055,18 @@ components:
format: binary format: binary
type: string type: string
type: object type: object
uploadFileArrayOfFiles_request:
properties:
additionalMetadata:
description: Additional data to pass to server
type: string
files:
description: files to upload
items:
format: binary
type: string
type: array
type: object
an_Object: an_Object:
description: An array 3-deep. description: An array 3-deep.
example: example:

View File

@ -30,6 +30,7 @@ type PetAPIRouter interface {
UpdatePet(http.ResponseWriter, *http.Request) UpdatePet(http.ResponseWriter, *http.Request)
UpdatePetWithForm(http.ResponseWriter, *http.Request) UpdatePetWithForm(http.ResponseWriter, *http.Request)
UploadFile(http.ResponseWriter, *http.Request) UploadFile(http.ResponseWriter, *http.Request)
UploadFileArrayOfFiles(http.ResponseWriter, *http.Request)
} }
// StoreAPIRouter defines the required methods for binding the api requests to a responses for the StoreAPI // StoreAPIRouter defines the required methods for binding the api requests to a responses for the StoreAPI
// The StoreAPIRouter implementation should parse necessary information from the http request, // The StoreAPIRouter implementation should parse necessary information from the http request,
@ -69,6 +70,7 @@ type PetAPIServicer interface {
UpdatePet(context.Context, Pet) (ImplResponse, error) UpdatePet(context.Context, Pet) (ImplResponse, error)
UpdatePetWithForm(context.Context, int64, string, string) (ImplResponse, error) UpdatePetWithForm(context.Context, int64, string, string) (ImplResponse, error)
UploadFile(context.Context, int64, string, *os.File) (ImplResponse, error) UploadFile(context.Context, int64, string, *os.File) (ImplResponse, error)
UploadFileArrayOfFiles(context.Context, int64, string, []*os.File) (ImplResponse, error)
} }

View File

@ -90,6 +90,11 @@ func (c *PetAPIController) Routes() Routes {
"/v2/pet/{petId}/uploadImage", "/v2/pet/{petId}/uploadImage",
c.UploadFile, c.UploadFile,
}, },
"UploadFileArrayOfFiles": Route{
strings.ToUpper("Post"),
"/v2/fake/uploadImage/array of_file",
c.UploadFileArrayOfFiles,
},
} }
} }
@ -231,10 +236,10 @@ func (c *PetAPIController) UpdatePetWithForm(w http.ResponseWriter, r *http.Requ
c.errorHandler(w, r, &ParsingError{Err: err}, nil) c.errorHandler(w, r, &ParsingError{Err: err}, nil)
return return
} }
nameParam := r.FormValue("name") nameParam := r.FormValue("name")
statusParam := r.FormValue("status") statusParam := r.FormValue("status")
result, err := c.service.UpdatePetWithForm(r.Context(), petIdParam, nameParam, statusParam) result, err := c.service.UpdatePetWithForm(r.Context(), petIdParam, nameParam, statusParam)
@ -261,10 +266,9 @@ func (c *PetAPIController) UploadFile(w http.ResponseWriter, r *http.Request) {
c.errorHandler(w, r, &ParsingError{Err: err}, nil) c.errorHandler(w, r, &ParsingError{Err: err}, nil)
return return
} }
additionalMetadataParam := r.FormValue("additionalMetadata") additionalMetadataParam := r.FormValue("additionalMetadata")
fileParam, err := ReadFormFileToTempFile(r, "file") fileParam, err := ReadFormFileToTempFile(r, "file")
if err != nil { if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil) c.errorHandler(w, r, &ParsingError{Err: err}, nil)
@ -281,3 +285,37 @@ func (c *PetAPIController) UploadFile(w http.ResponseWriter, r *http.Request) {
// If no error, encode the body and the result code // If no error, encode the body and the result code
EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) EncodeJSONResponse(result.Body, &result.Code, result.Headers, w)
} }
// UploadFileArrayOfFiles - uploads images (array of files)
func (c *PetAPIController) UploadFileArrayOfFiles(w http.ResponseWriter, r *http.Request) {
if err := r.ParseMultipartForm(32 << 20); err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
return
}
petIdParam, err := parseNumericParameter[int64](
chi.URLParam(r, "petId"),
WithRequire[int64](parseInt64),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
return
}
additionalMetadataParam := r.FormValue("additionalMetadata")
filesParam, err := ReadFormFilesToTempFiles(r, "files")
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
return
}
result, err := c.service.UploadFileArrayOfFiles(r.Context(), petIdParam, additionalMetadataParam, filesParam)
// If an error occurred, encode the error with the status code
if err != nil {
c.errorHandler(w, r, err, &result)
return
}
// If no error, encode the body and the result code
EncodeJSONResponse(result.Body, &result.Code, result.Headers, w)
}

View File

@ -139,3 +139,14 @@ func (s *PetAPIService) UploadFile(ctx context.Context, petId int64, additionalM
return Response(http.StatusNotImplemented, nil), errors.New("UploadFile method not implemented") return Response(http.StatusNotImplemented, nil), errors.New("UploadFile method not implemented")
} }
// UploadFileArrayOfFiles - uploads images (array of files)
func (s *PetAPIService) UploadFileArrayOfFiles(ctx context.Context, petId int64, additionalMetadata string, files []*os.File) (ImplResponse, error) {
// TODO - update UploadFileArrayOfFiles with the required logic for this service method.
// Add api_pet_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation.
// TODO: Uncomment the next line to return response Response(200, ApiResponse{}) or use other options such as http.Ok ...
// return Response(200, ApiResponse{}), nil
return Response(http.StatusNotImplemented, nil), errors.New("UploadFileArrayOfFiles method not implemented")
}