Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Large diffs are not rendered by default.

85 changes: 51 additions & 34 deletions modules/openapi-generator/src/main/resources/go/api.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"io"
"net/http"
"net/url"
"github.com/glcp/common-sdk-go/pkg/client"
{{#imports}} "{{import}}"
{{/imports}}
)
Expand Down Expand Up @@ -44,8 +45,24 @@ type {{classname}} interface {
}
{{/generateInterfaces}}

// {{classname}}Service {{classname}} service
type {{classname}}Service service
// {{classname}}Service represents the {{classname}} service
type {{classname}}Service struct {
client *client.APIClient
}


// New{{classname}}Service creates a {{classname}}Service.
func New{{classname}}Service(client *client.APIClient) *{{classname}}Service {
return &{{classname}}Service{
client: client,
}
}

// ServiceName returns the name of the service.
func (s *{{classname}}Service) ServiceName() string {
return "{{classname}}"
}

{{#operation}}

type {{#structPrefix}}{{&classname}}{{/structPrefix}}{{^structPrefix}}Api{{/structPrefix}}{{operationId}}Request struct {
Expand Down Expand Up @@ -112,19 +129,19 @@ func (a *{{{classname}}}Service) {{nickname}}Execute(r {{#structPrefix}}{{&class
var (
localVarHTTPMethod = http.Method{{httpMethod}}
localVarPostBody interface{}
formFiles []formFile
formFiles []client.FormFile
{{#returnType}}
localVarReturnValue {{^isArray}}{{^returnTypeIsPrimitive}}{{^isResponseFile}}*{{/isResponseFile}}{{/returnTypeIsPrimitive}}{{/isArray}}{{{.}}}
{{/returnType}}
)

localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "{{{classname}}}Service.{{{nickname}}}")
localBasePath, err := a.client.Cfg.ServerURLWithContext(r.ctx, "{{{classname}}}Service.{{{nickname}}}")
if err != nil {
return {{#returnType}}localVarReturnValue, {{/returnType}}nil, &GenericOpenAPIError{error: err.Error()}
return {{#returnType}}localVarReturnValue, {{/returnType}}nil, &client.GenericOpenAPIError{ErrorStr: err.Error()}
}

localVarPath := localBasePath + "{{{path}}}"{{#pathParams}}
localVarPath = strings.Replace(localVarPath, "{"+"{{{baseName}}}"+"}", url.PathEscape(parameterValueToString(r.{{paramName}}, "{{paramName}}")), -1){{/pathParams}}
localVarPath = strings.Replace(localVarPath, "{"+"{{{baseName}}}"+"}", url.PathEscape(client.ParameterValueToString(r.{{paramName}}, "{{paramName}}")), -1){{/pathParams}}

localVarHeaderParams := make(map[string]string)
localVarQueryParams := url.Values{}
Expand Down Expand Up @@ -189,15 +206,15 @@ func (a *{{{classname}}}Service) {{nickname}}Execute(r {{#structPrefix}}{{&class
if reflect.TypeOf(t).Kind() == reflect.Slice {
s := reflect.ValueOf(t)
for i := 0; i < s.Len(); i++ {
parameterAddToHeaderOrQuery(localVarQueryParams, "{{{baseName}}}", s.Index(i).Interface(), "{{style}}", "{{collectionFormat}}")
client.ParameterAddToHeaderOrQuery(localVarQueryParams, "{{{baseName}}}", s.Index(i).Interface(), "{{style}}", "{{collectionFormat}}")
}
} else {
parameterAddToHeaderOrQuery(localVarQueryParams, "{{{baseName}}}", t, "{{style}}", "{{collectionFormat}}")
client.ParameterAddToHeaderOrQuery(localVarQueryParams, "{{{baseName}}}", t, "{{style}}", "{{collectionFormat}}")
}
}
{{/isCollectionFormatMulti}}
{{^isCollectionFormatMulti}}
parameterAddToHeaderOrQuery(localVarQueryParams, "{{{baseName}}}", r.{{paramName}}, "{{style}}", "{{collectionFormat}}")
client.ParameterAddToHeaderOrQuery(localVarQueryParams, "{{{baseName}}}", r.{{paramName}}, "{{style}}", "{{collectionFormat}}")
{{/isCollectionFormatMulti}}
{{/required}}
{{^required}}
Expand All @@ -207,14 +224,14 @@ func (a *{{{classname}}}Service) {{nickname}}Execute(r {{#structPrefix}}{{&class
if reflect.TypeOf(t).Kind() == reflect.Slice {
s := reflect.ValueOf(t)
for i := 0; i < s.Len(); i++ {
parameterAddToHeaderOrQuery(localVarQueryParams, "{{{baseName}}}", s.Index(i).Interface(), "{{style}}", "{{collectionFormat}}")
client.ParameterAddToHeaderOrQuery(localVarQueryParams, "{{{baseName}}}", s.Index(i).Interface(), "{{style}}", "{{collectionFormat}}")
}
} else {
parameterAddToHeaderOrQuery(localVarQueryParams, "{{{baseName}}}", t, "{{style}}", "{{collectionFormat}}")
client.ParameterAddToHeaderOrQuery(localVarQueryParams, "{{{baseName}}}", t, "{{style}}", "{{collectionFormat}}")
}
{{/isCollectionFormatMulti}}
{{^isCollectionFormatMulti}}
parameterAddToHeaderOrQuery(localVarQueryParams, "{{{baseName}}}", r.{{paramName}}, "{{style}}", "{{collectionFormat}}")
client.ParameterAddToHeaderOrQuery(localVarQueryParams, "{{{baseName}}}", r.{{paramName}}, "{{style}}", "{{collectionFormat}}")
{{/isCollectionFormatMulti}}
{{#defaultValue}}} else {
var defaultValue {{{dataType}}} = {{{.}}}
Expand All @@ -228,7 +245,7 @@ func (a *{{{classname}}}Service) {{nickname}}Execute(r {{#structPrefix}}{{&class
<%={{ }}=%>

// set Content-Type header
localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
localVarHTTPContentType := client.SelectHeaderContentType(localVarHTTPContentTypes)
if localVarHTTPContentType != "" {
localVarHeaderParams["Content-Type"] = localVarHTTPContentType
}
Expand All @@ -239,17 +256,17 @@ func (a *{{{classname}}}Service) {{nickname}}Execute(r {{#structPrefix}}{{&class
<%={{ }}=%>

// set Accept header
localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
localVarHTTPHeaderAccept := client.SelectHeaderAccept(localVarHTTPHeaderAccepts)
if localVarHTTPHeaderAccept != "" {
localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
}
{{#headerParams}}
{{#required}}
parameterAddToHeaderOrQuery(localVarHeaderParams, "{{{baseName}}}", r.{{paramName}}, "{{style}}", "{{collectionFormat}}")
client.ParameterAddToHeaderOrQuery(localVarHeaderParams, "{{{baseName}}}", r.{{paramName}}, "{{style}}", "{{collectionFormat}}")
{{/required}}
{{^required}}
if r.{{paramName}} != nil {
parameterAddToHeaderOrQuery(localVarHeaderParams, "{{{baseName}}}", r.{{paramName}}, "{{style}}", "{{collectionFormat}}")
client.ParameterAddToHeaderOrQuery(localVarHeaderParams, "{{{baseName}}}", r.{{paramName}}, "{{style}}", "{{collectionFormat}}")
}
{{/required}}
{{/headerParams}}
Expand Down Expand Up @@ -295,7 +312,7 @@ func (a *{{{classname}}}Service) {{nickname}}Execute(r {{#structPrefix}}{{&class
{{/isFile}}
{{^isFile}}
{{#required}}
parameterAddToHeaderOrQuery(localVarFormParams, "{{{baseName}}}", r.{{paramName}}, "{{style}}", "{{collectionFormat}}")
client.ParameterAddToHeaderOrQuery(localVarFormParams, "{{{baseName}}}", r.{{paramName}}, "{{style}}", "{{collectionFormat}}")
{{/required}}
{{^required}}
{{#isModel}}
Expand All @@ -309,7 +326,7 @@ func (a *{{{classname}}}Service) {{nickname}}Execute(r {{#structPrefix}}{{&class
{{/isModel}}
{{^isModel}}
if r.{{paramName}} != nil {
parameterAddToHeaderOrQuery(localVarFormParams, "{{{baseName}}}", r.{{paramName}}, "{{style}}", "{{collectionFormat}}")
client.ParameterAddToHeaderOrQuery(localVarFormParams, "{{{baseName}}}", r.{{paramName}}, "{{style}}", "{{collectionFormat}}")
}
{{/isModel}}
{{/required}}
Expand Down Expand Up @@ -355,12 +372,12 @@ func (a *{{{classname}}}Service) {{nickname}}Execute(r {{#structPrefix}}{{&class
{{/isKeyInCookie}}
{{/isApiKey}}
{{/authMethods}}
req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
req, err := a.client.PrepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
if err != nil {
return {{#returnType}}localVarReturnValue, {{/returnType}}nil, err
}

localVarHTTPResponse, err := a.client.callAPI(req)
localVarHTTPResponse, err := a.client.CallAPI(req)
if err != nil || localVarHTTPResponse == nil {
return {{#returnType}}localVarReturnValue, {{/returnType}}localVarHTTPResponse, err
}
Expand All @@ -373,18 +390,18 @@ func (a *{{{classname}}}Service) {{nickname}}Execute(r {{#structPrefix}}{{&class
}

{{#withCustomMiddlewareFunction}}
if a.client.cfg.ResponseMiddleware != nil {
err = a.client.cfg.ResponseMiddleware(localVarHTTPResponse, localVarBody)
if a.client.Cfg.ResponseMiddleware != nil {
err = a.client.Cfg.ResponseMiddleware(localVarHTTPResponse, localVarBody)
if err != nil {
return {{#returnType}}localVarReturnValue, {{/returnType}}localVarHTTPResponse, err
}
}

{{/withCustomMiddlewareFunction}}
if localVarHTTPResponse.StatusCode >= 300 {
newErr := &GenericOpenAPIError{
body: localVarBody,
error: localVarHTTPResponse.Status,
newErr := &client.GenericOpenAPIError{
BodyByte: localVarBody,
ErrorStr: localVarHTTPResponse.Status,
}
{{#responses}}
{{#dataType}}
Expand All @@ -407,13 +424,13 @@ func (a *{{{classname}}}Service) {{nickname}}Execute(r {{#structPrefix}}{{&class
{{/wildcard}}
{{/range}}
var v {{{dataType}}}
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
err = a.client.Decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
if err != nil {
newErr.error = err.Error()
newErr.ErrorStr = err.Error()
return {{#returnType}}localVarReturnValue, {{/returnType}}localVarHTTPResponse, newErr
}
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
newErr.model = v
newErr.ErrorStr = client.FormatErrorMessage(localVarHTTPResponse.Status, &v)
newErr.ModelErr = v
{{^-last}}
return {{#returnType}}localVarReturnValue, {{/returnType}}localVarHTTPResponse, newErr
{{/-last}}
Expand All @@ -428,11 +445,11 @@ func (a *{{{classname}}}Service) {{nickname}}Execute(r {{#structPrefix}}{{&class
}

{{#returnType}}
err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
err = a.client.Decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
if err != nil {
newErr := &GenericOpenAPIError{
body: localVarBody,
error: err.Error(),
newErr := &client.GenericOpenAPIError{
BodyByte: localVarBody,
ErrorStr: err.Error(),
}
return {{#returnType}}localVarReturnValue, {{/returnType}}localVarHTTPResponse, newErr
}
Expand All @@ -441,4 +458,4 @@ func (a *{{{classname}}}Service) {{nickname}}Execute(r {{#structPrefix}}{{&class
return {{#returnType}}localVarReturnValue, {{/returnType}}localVarHTTPResponse, nil
}
{{/operation}}
{{/operations}}
{{/operations}}
42 changes: 35 additions & 7 deletions modules/openapi-generator/src/main/resources/go/api_test.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,33 @@ Testing {{classname}}Service

// Code generated by OpenAPI Generator (https://openapi-generator.tech);

package {{packageName}}
package test

import (
"context"
"testing"

glp_context "github.com/glcp/common-sdk-go/pkg/auth"
"github.com/{{gitUserId}}/{{gitRepoId}}/pkg/client"
config "github.com/glcp/common-sdk-go/pkg/config"
"github.com/{{gitUserId}}/{{gitRepoId}}/services/{{packageName}}"
openapiclient "github.com/{{gitUserId}}/{{gitRepoId}}/services/{{packageName}}"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"testing"
{{goImportAlias}} "{{gitHost}}/{{gitUserId}}/{{gitRepoId}}{{#isGoSubmodule}}/{{packageName}}{{/isGoSubmodule}}"
"github.com/glcp/common-sdk-go/services/sample_service"
)

func Test_{{packageName}}_{{classname}}Service(t *testing.T) {

cfg := config.NewConfiguration()
cfg.Debug = true
apiClient := client.NewAPIClient(cfg)
apiService := {{packageName}}.New{{classname}}Service(apiClient)

configuration := {{goImportAlias}}.NewConfiguration()
apiClient := {{goImportAlias}}.NewAPIClient(configuration)
ctx, err := glp_context.ConfigureContext()
if err != nil {
panic(err)
}

{{#operations}}
{{#operation}}
Expand All @@ -39,16 +52,31 @@ func Test_{{packageName}}_{{classname}}Service(t *testing.T) {
var {{paramName}} {{{dataType}}}
{{/pathParams}}

{{#returnType}}resp, {{/returnType}}httpRes, err := apiClient.{{classname}}.{{operationId}}(context.Background(){{#pathParams}}, {{paramName}}{{/pathParams}}).Execute()
{{#returnType}}resp, {{/returnType}}httpRes, err := apiService.{{operationId}}(ctx{{#pathParams}}, {{paramName}}{{/pathParams}}).Execute()

require.Nil(t, err)
{{#returnType}}
require.NotNil(t, resp)
{{/returnType}}
assert.Equal(t, 200, httpRes.StatusCode)

{{#x-is-add-operation}}
// Custom code for Add APIs
fmt.Println("This is an Add API")
id = getAttributeValue(resp, "{{paramName}}")
fmt.Printf("ID: %s\n", id)
{{/x-is-add-operation}}
})

{{/operation}}
{{/operations}}
}

// getAttributeValue uses reflection to get the value of a specified attribute from a response object
func getAttributeValue(resp interface{}, attributeName string) string {
val := reflect.ValueOf(resp)
field := val.FieldByName(attributeName)
if field.IsValid() && field.CanInterface() {
return fmt.Sprintf("%v", field.Interface())
}
return ""
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
/*
{{#appName}}
{{{.}}}
{{/appName}}

Testing {{classname}}Service

*/

// Code generated by OpenAPI Generator (https://openapi-generator.tech);

package test

import (
"context"
"testing"

glp_context "github.com/glcp/common-sdk-go/pkg/auth"
"github.com/{{gitUserId}}/{{gitRepoId}}/pkg/client"
config "github.com/glcp/common-sdk-go/pkg/config"
"github.com/{{gitUserId}}/{{gitRepoId}}/services/{{packageName}}"
openapiclient "github.com/{{gitUserId}}/{{gitRepoId}}/services/{{packageName}}"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

func Test_{{packageName}}_{{classname}}Service(t *testing.T) {

cfg := config.NewConfiguration()
cfg.Debug = true
apiClient := client.NewAPIClient(cfg)
// Register the {{classname}}Service
apiService := {{packageName}}.New{{classname}}Service(apiClient)
serviceAPI := apiService
ctx, err := glp_context.ConfigureContext()
if err != nil {
panic(err)
}

{{#operations}}
{{#operation}}
t.Run("Test {{classname}}Service {{{nickname}}}", func(t *testing.T) {

{{^pathParams}}
t.Skip("skip test") // remove to run test
{{/pathParams}}
{{#pathParams}}
{{#-first}}
t.Skip("skip test") // remove to run test
{{/-first}}
var {{paramName}} {{{dataType}}}
{{/pathParams}}

request := serviceAPI.{{operationId}}(ctx)
{{#bodyParam}}
request = request.{{paramName}}(openapiclient.{{{dataType}}}{
{{#vars}}
{{name}}: {{#value}}{{value}}{{/value}}{{^value}}"dummy_value"{{/value}},
{{/vars}}
})
{{/bodyParam}}

{{#returnType}}resp, {{/returnType}}httpRes, err := request.ApiService.{{operationId}}(context.Background(){{#pathParams}}, {{paramName}}{{/pathParams}}).Execute()

require.Nil(t, err)
{{#returnType}}
require.NotNil(t, resp)
{{/returnType}}
assert.Equal(t, 201, httpRes.StatusCode)
id = resp.isIdParam
})

{{/operation}}
{{/operations}}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
module {{gitHost}}/{{gitUserId}}/{{gitRepoId}}{{#isGoSubmodule}}/{{packageName}}{{/isGoSubmodule}}
module {{gitHost}}/{{gitUserId}}/{{gitRepoId}}/services/{{packageName}}

go 1.18

require {{gitHost}}/{{gitUserId}}/{{gitRepoId}} v{{packageVersion}}

require (
{{#hasOAuthMethods}}
golang.org/x/oauth2 v0.0.0-20210323180902-22b0adad7558
Expand All @@ -10,3 +12,5 @@ require (
github.com/aws/aws-sdk-go v1.34.14
{{/withAWSV4Signature}}
)

replace {{gitHost}}/{{gitUserId}}/{{gitRepoId}} => ../../
Loading