[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

@ -361,9 +361,11 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re
{{/isNumber}}
{{/isQueryParam}}
{{#isFormParam}}
{{#isFile}}{{#isArray}}
{{#isFile}}
{{#isArray}}
{{paramName}}Param, err := ReadFormFilesToTempFiles(r, "{{baseName}}")
{{/isArray}}{{^isArray}}
{{/isArray}}
{{^isArray}}
{{paramName}}Param, err := ReadFormFileToTempFile(r, "{{baseName}}")
{{/isArray}}
if err != nil {

View File

@ -579,6 +579,47 @@ paths:
description: User not found
security:
- 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:
description: Find out more about Swagger
url: 'http://swagger.io'

View File

@ -264,7 +264,6 @@ func (c *PetAPIController) UploadFile(w http.ResponseWriter, r *http.Request) {
additionalMetadataParam := r.FormValue("additionalMetadata")
fileParam, err := ReadFormFileToTempFile(r, "file")
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)

View File

@ -598,6 +598,39 @@ paths:
summary: Updated user
tags:
- 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:
requestBodies:
UserArray:
@ -1022,6 +1055,18 @@ components:
format: binary
type: string
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:
description: An array 3-deep.
example:

View File

@ -30,6 +30,7 @@ type PetAPIRouter interface {
UpdatePet(http.ResponseWriter, *http.Request)
UpdatePetWithForm(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
// The StoreAPIRouter implementation should parse necessary information from the http request,
@ -69,6 +70,7 @@ type PetAPIServicer interface {
UpdatePet(context.Context, Pet) (ImplResponse, error)
UpdatePetWithForm(context.Context, int64, string, string) (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",
c.UploadFile,
},
"UploadFileArrayOfFiles": Route{
strings.ToUpper("Post"),
"/v2/fake/uploadImage/array of_file",
c.UploadFileArrayOfFiles,
},
}
}
@ -268,7 +273,6 @@ func (c *PetAPIController) UploadFile(w http.ResponseWriter, r *http.Request) {
additionalMetadataParam := r.FormValue("additionalMetadata")
fileParam, err := ReadFormFileToTempFile(r, "file")
if 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
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")
}
// 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
tags:
- 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:
requestBodies:
UserArray:
@ -1022,6 +1055,18 @@ components:
format: binary
type: string
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:
description: An array 3-deep.
example:

View File

@ -30,6 +30,7 @@ type PetAPIRouter interface {
UpdatePet(http.ResponseWriter, *http.Request)
UpdatePetWithForm(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
// The StoreAPIRouter implementation should parse necessary information from the http request,
@ -69,6 +70,7 @@ type PetAPIServicer interface {
UpdatePet(context.Context, Pet) (ImplResponse, error)
UpdatePetWithForm(context.Context, int64, string, string) (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",
c.UploadFile,
},
"UploadFileArrayOfFiles": Route{
strings.ToUpper("Post"),
"/v2/fake/uploadImage/array of_file",
c.UploadFileArrayOfFiles,
},
}
}
@ -264,7 +269,6 @@ func (c *PetAPIController) UploadFile(w http.ResponseWriter, r *http.Request) {
additionalMetadataParam := r.FormValue("additionalMetadata")
fileParam, err := ReadFormFileToTempFile(r, "file")
if 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
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")
}
// 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")
}