diff --git a/api/cloudcontroller/ccv3/isolation_segment_test.go b/api/cloudcontroller/ccv3/isolation_segment_test.go index 14479e24273..29607a7b036 100644 --- a/api/cloudcontroller/ccv3/isolation_segment_test.go +++ b/api/cloudcontroller/ccv3/isolation_segment_test.go @@ -122,7 +122,7 @@ var _ = Describe("Isolation Segments", func() { JustBeforeEach(func() { queries = []Query{ {Key: OrganizationGUIDFilter, Values: []string{"some-org-guid"}}, - {Key: NameFilter, Values: []string{"iso1,iso2,iso3"}}, + {Key: NameFilter, Values: []string{"iso1", "iso2", "iso3"}}, } segments, warnings, executeErr = client.GetIsolationSegments(queries...) }) diff --git a/api/cloudcontroller/ccv3/query.go b/api/cloudcontroller/ccv3/query.go index 78e00fa8843..aed50ae0f2d 100644 --- a/api/cloudcontroller/ccv3/query.go +++ b/api/cloudcontroller/ccv3/query.go @@ -116,6 +116,14 @@ type Query struct { func FormatQueryParameters(queries []Query) url.Values { params := url.Values{} for _, query := range queries { + if query.Key == NameFilter { + encodedParamValues := []string{} + for _, valString := range query.Values { + encodedParamValues = append(encodedParamValues, url.QueryEscape(valString)) + } + query.Values = encodedParamValues + } + params.Add(string(query.Key), strings.Join(query.Values, ",")) } diff --git a/api/cloudcontroller/ccv3/query_test.go b/api/cloudcontroller/ccv3/query_test.go new file mode 100644 index 00000000000..01d75328246 --- /dev/null +++ b/api/cloudcontroller/ccv3/query_test.go @@ -0,0 +1,52 @@ +package ccv3_test + +import ( + "net/url" + + . "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3" + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +var _ = Describe("Query Helpers", func() { + Describe("FormatQueryParameters", func() { + var ( + inputQueries []Query + outputParameters url.Values + ) + + BeforeEach(func() { + inputQueries = []Query{ + { + Key: SpaceGUIDFilter, + Values: []string{"space-guid1", "space-guid2"}, + }, + } + outputParameters = FormatQueryParameters(inputQueries) + }) + + It("encodes the param values and reformats the query", func() { + Expect(outputParameters).To(Equal(url.Values{ + "space_guids": []string{"space-guid1,space-guid2"}, + })) + }) + + When("the name filter is used", func() { + BeforeEach(func() { + inputQueries = []Query{ + { + Key: NameFilter, + Values: []string{"name1", "name,2"}, + }, + } + outputParameters = FormatQueryParameters(inputQueries) + }) + + It("encodes the param values before formatting", func() { + Expect(outputParameters).To(Equal(url.Values{ + "names": []string{"name1,name%2C2"}, + })) + }) + }) + }) +})