diff --git a/.github/workflows/samples-go-client-echo-api.yaml b/.github/workflows/samples-go-client-echo-api.yaml new file mode 100644 index 00000000000..77b4f2b21c1 --- /dev/null +++ b/.github/workflows/samples-go-client-echo-api.yaml @@ -0,0 +1,32 @@ +name: Go Client (Echo API) + +on: + pull_request: + paths: + - samples/client/echo_api/go/** + - .github/workflows/samples-go-client-echo-api.yaml +jobs: + build: + name: Test Go client + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + sample: + # clients + - samples/client/echo_api/go + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-go@v4 + with: + go-version: "stable" + - name: Setup node.js + uses: actions/setup-node@v4 + - name: Run echo server + run: | + git clone https://github.com/wing328/http-echo-server -b openapi-generator-test-server + (cd http-echo-server && npm install && npm start &) + - run: go version + - name: Run test + working-directory: ${{ matrix.sample }} + run: go test -mod=mod -v diff --git a/modules/openapi-generator/src/main/resources/go/api.mustache b/modules/openapi-generator/src/main/resources/go/api.mustache index fada916ff9c..76caffad358 100644 --- a/modules/openapi-generator/src/main/resources/go/api.mustache +++ b/modules/openapi-generator/src/main/resources/go/api.mustache @@ -255,13 +255,32 @@ func (a *{{{classname}}}Service) {{nickname}}Execute(r {{#structPrefix}}{{&class {{/headerParams}} {{#formParams}} {{#isFile}} +{{#isArray}} var {{paramName}}LocalVarFormFileName string var {{paramName}}LocalVarFileName string var {{paramName}}LocalVarFileBytes []byte - {{paramName}}LocalVarFormFileName = "{{baseName}}" + {{paramName}}LocalVarFormFileName = "{{{baseName}}}" + {{paramName}}LocalVarFile := r.{{paramName}} + if {{paramName}}LocalVarFile != nil { + // loop through the array to prepare multiple files upload + for _, {{paramName}}LocalVarFileValue := range {{paramName}}LocalVarFile { + fbs, _ := io.ReadAll({{paramName}}LocalVarFileValue) + {{paramName}}LocalVarFileBytes = fbs + {{paramName}}LocalVarFileName = {{paramName}}LocalVarFileValue.Name() + {{paramName}}LocalVarFileValue.Close() + formFiles = append(formFiles, formFile{fileBytes: {{paramName}}LocalVarFileBytes, fileName: {{paramName}}LocalVarFileName, formFileName: {{paramName}}LocalVarFormFileName}) + } + } +{{/isArray}} +{{^isArray}} + var {{paramName}}LocalVarFormFileName string + var {{paramName}}LocalVarFileName string + var {{paramName}}LocalVarFileBytes []byte + + {{paramName}}LocalVarFormFileName = "{{{baseName}}}" {{paramName}}LocalVarFile := r.{{paramName}} if {{paramName}}LocalVarFile != nil { @@ -272,6 +291,7 @@ func (a *{{{classname}}}Service) {{nickname}}Execute(r {{#structPrefix}}{{&class {{paramName}}LocalVarFile.Close() formFiles = append(formFiles, formFile{fileBytes: {{paramName}}LocalVarFileBytes, fileName: {{paramName}}LocalVarFileName, formFileName: {{paramName}}LocalVarFormFileName}) } +{{/isArray}} {{/isFile}} {{^isFile}} {{#required}} diff --git a/samples/client/echo_api/go/api_body.go b/samples/client/echo_api/go/api_body.go index f06ffc274b6..c21bc9822fa 100644 --- a/samples/client/echo_api/go/api_body.go +++ b/samples/client/echo_api/go/api_body.go @@ -306,17 +306,18 @@ func (a *BodyAPIService) TestBodyMultipartFormdataArrayOfBinaryExecute(r ApiTest var filesLocalVarFileBytes []byte filesLocalVarFormFileName = "files" - - filesLocalVarFile := r.files if filesLocalVarFile != nil { - fbs, _ := io.ReadAll(filesLocalVarFile) + // loop through the array to prepare multiple files upload + for _, filesLocalVarFileValue := range filesLocalVarFile { + fbs, _ := io.ReadAll(filesLocalVarFileValue) - filesLocalVarFileBytes = fbs - filesLocalVarFileName = filesLocalVarFile.Name() - filesLocalVarFile.Close() - formFiles = append(formFiles, formFile{fileBytes: filesLocalVarFileBytes, fileName: filesLocalVarFileName, formFileName: filesLocalVarFormFileName}) + filesLocalVarFileBytes = fbs + filesLocalVarFileName = filesLocalVarFileValue.Name() + filesLocalVarFileValue.Close() + formFiles = append(formFiles, formFile{fileBytes: filesLocalVarFileBytes, fileName: filesLocalVarFileName, formFileName: filesLocalVarFormFileName}) + } } req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles) if err != nil { diff --git a/samples/client/petstore/go/go-petstore/api_fake.go b/samples/client/petstore/go/go-petstore/api_fake.go index b03ecad8937..47622657f74 100644 --- a/samples/client/petstore/go/go-petstore/api_fake.go +++ b/samples/client/petstore/go/go-petstore/api_fake.go @@ -1270,8 +1270,6 @@ func (a *FakeAPIService) TestEndpointParametersExecute(r ApiTestEndpointParamete var binaryLocalVarFileBytes []byte binaryLocalVarFormFileName = "binary" - - binaryLocalVarFile := r.binary if binaryLocalVarFile != nil { diff --git a/samples/client/petstore/go/go-petstore/api_pet.go b/samples/client/petstore/go/go-petstore/api_pet.go index 0ae279248f1..29cf9638aa6 100644 --- a/samples/client/petstore/go/go-petstore/api_pet.go +++ b/samples/client/petstore/go/go-petstore/api_pet.go @@ -976,8 +976,6 @@ func (a *PetAPIService) UploadFileExecute(r ApiUploadFileRequest) (*ApiResponse, var fileLocalVarFileBytes []byte fileLocalVarFormFileName = "file" - - fileLocalVarFile := r.file if fileLocalVarFile != nil { @@ -1114,8 +1112,6 @@ func (a *PetAPIService) UploadFileWithRequiredFileExecute(r ApiUploadFileWithReq var requiredFileLocalVarFileBytes []byte requiredFileLocalVarFormFileName = "requiredFile" - - requiredFileLocalVarFile := r.requiredFile if requiredFileLocalVarFile != nil { diff --git a/samples/openapi3/client/petstore/go/go-petstore/api_fake.go b/samples/openapi3/client/petstore/go/go-petstore/api_fake.go index 1cccc452d97..c8653dc4916 100644 --- a/samples/openapi3/client/petstore/go/go-petstore/api_fake.go +++ b/samples/openapi3/client/petstore/go/go-petstore/api_fake.go @@ -1451,8 +1451,6 @@ func (a *FakeAPIService) TestEndpointParametersExecute(r ApiTestEndpointParamete var binaryLocalVarFileBytes []byte binaryLocalVarFormFileName = "binary" - - binaryLocalVarFile := r.binary if binaryLocalVarFile != nil { diff --git a/samples/openapi3/client/petstore/go/go-petstore/api_pet.go b/samples/openapi3/client/petstore/go/go-petstore/api_pet.go index 0435d51af89..6a3556ec497 100644 --- a/samples/openapi3/client/petstore/go/go-petstore/api_pet.go +++ b/samples/openapi3/client/petstore/go/go-petstore/api_pet.go @@ -999,8 +999,6 @@ func (a *PetAPIService) UploadFileExecute(r ApiUploadFileRequest) (*ApiResponse, var fileLocalVarFileBytes []byte fileLocalVarFormFileName = "file" - - fileLocalVarFile := r.file if fileLocalVarFile != nil { @@ -1139,8 +1137,6 @@ func (a *PetAPIService) UploadFileWithRequiredFileExecute(r ApiUploadFileWithReq var requiredFileLocalVarFileBytes []byte requiredFileLocalVarFormFileName = "requiredFile" - - requiredFileLocalVarFile := r.requiredFile if requiredFileLocalVarFile != nil {