From b5660707e17adf7930705d4be159b665dfd0109a Mon Sep 17 00:00:00 2001 From: Brandon Croft Date: Wed, 25 Sep 2024 13:01:32 -0600 Subject: [PATCH 1/2] bug: NewRequest strips query params from path prm Fixes a bug in `NewRequest` that did not allow query parameters to be specified in the first parameter, which broke several methods: `RegistryModules ReadVersion`, `VariableSets UpdateWorkspaces`, and `Workspaces Readme` --- CHANGELOG.md | 6 +++++- tfe.go | 5 +++++ tfe_test.go | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e402a6329..63750183f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,8 @@ -# UNRELEASED +# v1.66.1 + +## Bug Fixes + +* Fixes a bug in `NewRequest` that did not allow query parameters to be specified in the first parameter, which broke several methods: `RegistryModules ReadVersion`, `VariableSets UpdateWorkspaces`, and `Workspaces Readme` by @brandonc # v1.67.0 diff --git a/tfe.go b/tfe.go index 13890f026..a4f40be3e 100644 --- a/tfe.go +++ b/tfe.go @@ -277,6 +277,8 @@ func (c *Client) NewRequestWithAdditionalQueryParams(method, path string, reqBod } } + // Will contain combined query values from path parsing and + // additionalQueryParams parameter q := make(url.Values) // Create a request specific headers map. @@ -310,6 +312,9 @@ func (c *Client) NewRequestWithAdditionalQueryParams(method, path string, reqBod body = reqBody } + for k, v := range u.Query() { + q[k] = v + } for k, v := range additionalQueryParams { q[k] = v } diff --git a/tfe_test.go b/tfe_test.go index 623e41531..114641239 100644 --- a/tfe_test.go +++ b/tfe_test.go @@ -202,6 +202,43 @@ func Test_RegistryBasePath(t *testing.T) { }) } +func Test_NewRequest(t *testing.T) { + testServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + switch r.URL.Path { + case "/get_request_with_query_param": + val := r.URL.Query().Get("include") + if val != "workspace,cost_estimate" { + t.Fatalf("unexpected include value: %q", val) + } + w.WriteHeader(http.StatusOK) + return + case "/api/v2/ping": + w.WriteHeader(http.StatusOK) + return + default: + t.Fatalf("unexpected request: %s", r.URL.String()) + } + })) + + t.Cleanup(func() { + testServer.Close() + }) + + client, err := NewClient(&Config{ + Address: testServer.URL, + }) + require.NoError(t, err) + + t.Run("allows path to include query params", func(t *testing.T) { + request, err := client.NewRequest("GET", "/get_request_with_query_param?include=workspace,cost_estimate", nil) + require.NoError(t, err) + + ctx := context.Background() + err = request.DoJSON(ctx, nil) + require.NoError(t, err) + }) +} + func Test_NewRequestWithAdditionalQueryParams(t *testing.T) { testServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { From e1da09a3b0a3aa19b99729b5eabdea11a22d19f1 Mon Sep 17 00:00:00 2001 From: Brandon Croft Date: Wed, 25 Sep 2024 13:10:39 -0600 Subject: [PATCH 2/2] Update CHANGELOG --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 63750183f..78c26d14f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,8 @@ -# v1.66.1 +# v1.67.1 ## Bug Fixes -* Fixes a bug in `NewRequest` that did not allow query parameters to be specified in the first parameter, which broke several methods: `RegistryModules ReadVersion`, `VariableSets UpdateWorkspaces`, and `Workspaces Readme` by @brandonc +* Fixes a bug in `NewRequest` that did not allow query parameters to be specified in the first parameter, which broke several methods: `RegistryModules ReadVersion`, `VariableSets UpdateWorkspaces`, and `Workspaces Readme` by @brandonc [#982](https://github.com/hashicorp/go-tfe/pull/982) # v1.67.0