Skip to content

Commit

Permalink
[go-server] Add tests, minor format change (OpenAPITools#16805)
Browse files Browse the repository at this point in the history
* add tests for OpenAPITools#16787, minor format change

* revert

* fix typo

* use pet instead of fake

* update samples
  • Loading branch information
wing328 authored Oct 12, 2023
1 parent 75ce596 commit ba367e6
Show file tree
Hide file tree
Showing 11 changed files with 253 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ package {{packageName}}

import (
"encoding/json"
{{#isBodyParam}}
{{^required}}
{{#isBodyParam}}
{{^required}}
"errors"
"io"
{{/required}}
{{/isBodyParam}}
{{/required}}
{{/isBodyParam}}
"net/http"
"strings"

Expand Down Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down
7 changes: 3 additions & 4 deletions samples/openapi3/server/petstore/go/go-petstore/go/api_pet.go
Original file line number Diff line number Diff line change
Expand Up @@ -231,10 +231,10 @@ func (c *PetAPIController) UpdatePetWithForm(w http.ResponseWriter, r *http.Requ
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
return
}


nameParam := r.FormValue("name")


statusParam := r.FormValue("status")
result, err := c.service.UpdatePetWithForm(r.Context(), petIdParam, nameParam, statusParam)
Expand All @@ -261,10 +261,9 @@ func (c *PetAPIController) UploadFile(w http.ResponseWriter, r *http.Request) {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
return
}


additionalMetadataParam := r.FormValue("additionalMetadata")

additionalMetadataParam := r.FormValue("additionalMetadata")
fileParam, err := ReadFormFileToTempFile(r, "file")
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
Expand Down
45 changes: 45 additions & 0 deletions samples/server/petstore/go-api-server/api/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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:
Expand Down
2 changes: 2 additions & 0 deletions samples/server/petstore/go-api-server/go/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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)
}


Expand Down
47 changes: 43 additions & 4 deletions samples/server/petstore/go-api-server/go/api_pet.go
Original file line number Diff line number Diff line change
Expand Up @@ -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,
},
}
}

Expand Down Expand Up @@ -234,10 +239,10 @@ func (c *PetAPIController) UpdatePetWithForm(w http.ResponseWriter, r *http.Requ
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
return
}


nameParam := r.FormValue("name")


statusParam := r.FormValue("status")
result, err := c.service.UpdatePetWithForm(r.Context(), petIdParam, nameParam, statusParam)
Expand Down Expand Up @@ -265,10 +270,9 @@ func (c *PetAPIController) UploadFile(w http.ResponseWriter, r *http.Request) {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
return
}


additionalMetadataParam := r.FormValue("additionalMetadata")

additionalMetadataParam := r.FormValue("additionalMetadata")
fileParam, err := ReadFormFileToTempFile(r, "file")
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
Expand All @@ -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)
}
11 changes: 11 additions & 0 deletions samples/server/petstore/go-api-server/go/api_pet_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -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")
}
45 changes: 45 additions & 0 deletions samples/server/petstore/go-chi-server/api/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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:
Expand Down
2 changes: 2 additions & 0 deletions samples/server/petstore/go-chi-server/go/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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)
}


Expand Down
Loading

0 comments on commit ba367e6

Please sign in to comment.