From 117e5118b1817c7769784e677c453beac42d789e Mon Sep 17 00:00:00 2001 From: Richard Lavoie Date: Mon, 3 Jul 2023 03:45:14 -0400 Subject: [PATCH] [GO] Fix value formatting in url with slices (#15581) * fix reflect value for Slice * Add test --- .../src/main/resources/go/api.mustache | 4 +-- .../petstore/go/go-petstore/api_fake.go | 2 +- .../client/petstore/go/fake_api_test.go | 32 +++++++++++++++---- .../petstore/go/go-petstore/api_fake.go | 8 ++--- 4 files changed, 32 insertions(+), 14 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/go/api.mustache b/modules/openapi-generator/src/main/resources/go/api.mustache index 37ba7496761..b3dd0df695c 100644 --- a/modules/openapi-generator/src/main/resources/go/api.mustache +++ b/modules/openapi-generator/src/main/resources/go/api.mustache @@ -189,7 +189,7 @@ 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), "{{collectionFormat}}") + parameterAddToHeaderOrQuery(localVarQueryParams, "{{baseName}}", s.Index(i).Interface(), "{{collectionFormat}}") } } else { parameterAddToHeaderOrQuery(localVarQueryParams, "{{baseName}}", t, "{{collectionFormat}}") @@ -207,7 +207,7 @@ 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), "{{collectionFormat}}") + parameterAddToHeaderOrQuery(localVarQueryParams, "{{baseName}}", s.Index(i).Interface(), "{{collectionFormat}}") } } else { parameterAddToHeaderOrQuery(localVarQueryParams, "{{baseName}}", t, "{{collectionFormat}}") diff --git a/samples/client/petstore/go/go-petstore/api_fake.go b/samples/client/petstore/go/go-petstore/api_fake.go index 6b31d976b2c..7a1031f4770 100644 --- a/samples/client/petstore/go/go-petstore/api_fake.go +++ b/samples/client/petstore/go/go-petstore/api_fake.go @@ -1944,7 +1944,7 @@ func (a *FakeAPIService) TestQueryParameterCollectionFormatExecute(r ApiTestQuer if reflect.TypeOf(t).Kind() == reflect.Slice { s := reflect.ValueOf(t) for i := 0; i < s.Len(); i++ { - parameterAddToHeaderOrQuery(localVarQueryParams, "context", s.Index(i), "multi") + parameterAddToHeaderOrQuery(localVarQueryParams, "context", s.Index(i).Interface(), "multi") } } else { parameterAddToHeaderOrQuery(localVarQueryParams, "context", t, "multi") diff --git a/samples/openapi3/client/petstore/go/fake_api_test.go b/samples/openapi3/client/petstore/go/fake_api_test.go index f5089a1d998..92d0718c6a8 100644 --- a/samples/openapi3/client/petstore/go/fake_api_test.go +++ b/samples/openapi3/client/petstore/go/fake_api_test.go @@ -9,7 +9,8 @@ import ( ) const ( - deepObjectURL = `/v2/fake/deep_object_test?inputOptions[F1]=1&inputOptions[F2]=teststring&inputOptions[F3]=null&inputOptions[id]=1&inputOptions[name]=TestCat&test_pet[F1]=1&test_pet[F2]=teststring&test_pet[F3]=null&test_pet[id]=1&test_pet[name]=Test&test_pet[photoUrls]=http%3A%2F%2Flocalhost&test_pet[tags][F1]=1&test_pet[tags][F2]=teststring&test_pet[tags][F3]=null&test_pet[tags][id]=2&test_pet[tags][name]=tag1` + deepObjectURL = `/v2/fake/deep_object_test?inputOptions[F1]=1&inputOptions[F2]=teststring&inputOptions[F3]=null&inputOptions[id]=1&inputOptions[name]=TestCat&test_pet[F1]=1&test_pet[F2]=teststring&test_pet[F3]=null&test_pet[id]=1&test_pet[name]=Test&test_pet[photoUrls]=http%3A%2F%2Flocalhost&test_pet[tags][F1]=1&test_pet[tags][F2]=teststring&test_pet[tags][F3]=null&test_pet[tags][id]=2&test_pet[tags][name]=tag1` + paramCollectionFormatURL = `/v2/fake/test-query-parameters?context=context&http=http&ioutil=ioutil&pipe=pipe&url=url` ) // TestPutBodyWithFileSchema ensures a model with the name 'File' @@ -39,12 +40,12 @@ func TestQueryDeepObject(t *testing.T) { var idTag1 = int64(2) var nameTag1 = "tag1" req = req.TestPet(sw.Pet{ - Id: &id, - Name: "Test", - PhotoUrls: []string{ "http://localhost" }, + Id: &id, + Name: "Test", + PhotoUrls: []string{"http://localhost"}, Tags: []sw.Tag{ { - Id: &idTag1, + Id: &idTag1, Name: &nameTag1, AdditionalProperties: map[string]interface{}{ "F1": 1, @@ -61,7 +62,7 @@ func TestQueryDeepObject(t *testing.T) { }) var idcat = int64(1) req = req.InputOptions(sw.Category{ - Id: &idcat, + Id: &idcat, Name: "TestCat", AdditionalProperties: map[string]interface{}{ "F1": 1, @@ -76,5 +77,22 @@ func TestQueryDeepObject(t *testing.T) { assert.Equal(t, expectedDeepObjectURL, - r.Request.URL.String() ) + r.Request.URL.String()) +} + +func TestQueryParameterCollectionFormat(t *testing.T) { + req := client.FakeAPI.TestQueryParameterCollectionFormat(context.Background()). + Pipe([]string{"pipe"}). + Ioutil([]string{"ioutil"}). + Http([]string{"http"}). + Url([]string{"url"}). + Context([]string{"context"}) + + r, _ := req.Execute() + + var expectedParamCollectionFormatURL = testScheme + "://" + testHost + paramCollectionFormatURL + + assert.Equal(t, + expectedParamCollectionFormatURL, + r.Request.URL.String()) } 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 967c0bac9f1..5d5a1691c25 100644 --- a/samples/openapi3/client/petstore/go/go-petstore/api_fake.go +++ b/samples/openapi3/client/petstore/go/go-petstore/api_fake.go @@ -1453,7 +1453,7 @@ func (a *FakeAPIService) TestEnumParametersExecute(r ApiTestEnumParametersReques if reflect.TypeOf(t).Kind() == reflect.Slice { s := reflect.ValueOf(t) for i := 0; i < s.Len(); i++ { - parameterAddToHeaderOrQuery(localVarQueryParams, "enum_query_string_array", s.Index(i), "multi") + parameterAddToHeaderOrQuery(localVarQueryParams, "enum_query_string_array", s.Index(i).Interface(), "multi") } } else { parameterAddToHeaderOrQuery(localVarQueryParams, "enum_query_string_array", t, "multi") @@ -2093,7 +2093,7 @@ func (a *FakeAPIService) TestQueryParameterCollectionFormatExecute(r ApiTestQuer if reflect.TypeOf(t).Kind() == reflect.Slice { s := reflect.ValueOf(t) for i := 0; i < s.Len(); i++ { - parameterAddToHeaderOrQuery(localVarQueryParams, "pipe", s.Index(i), "multi") + parameterAddToHeaderOrQuery(localVarQueryParams, "pipe", s.Index(i).Interface(), "multi") } } else { parameterAddToHeaderOrQuery(localVarQueryParams, "pipe", t, "multi") @@ -2107,7 +2107,7 @@ func (a *FakeAPIService) TestQueryParameterCollectionFormatExecute(r ApiTestQuer if reflect.TypeOf(t).Kind() == reflect.Slice { s := reflect.ValueOf(t) for i := 0; i < s.Len(); i++ { - parameterAddToHeaderOrQuery(localVarQueryParams, "context", s.Index(i), "multi") + parameterAddToHeaderOrQuery(localVarQueryParams, "context", s.Index(i).Interface(), "multi") } } else { parameterAddToHeaderOrQuery(localVarQueryParams, "context", t, "multi") @@ -2226,7 +2226,7 @@ func (a *FakeAPIService) TestUniqueItemsHeaderAndQueryParameterCollectionFormatE if reflect.TypeOf(t).Kind() == reflect.Slice { s := reflect.ValueOf(t) for i := 0; i < s.Len(); i++ { - parameterAddToHeaderOrQuery(localVarQueryParams, "queryUnique", s.Index(i), "multi") + parameterAddToHeaderOrQuery(localVarQueryParams, "queryUnique", s.Index(i).Interface(), "multi") } } else { parameterAddToHeaderOrQuery(localVarQueryParams, "queryUnique", t, "multi")