Skip to content

Commit bb234fd

Browse files
committed
test: include unit test to assert parameters
1 parent 68fb748 commit bb234fd

File tree

1 file changed

+83
-7
lines changed

1 file changed

+83
-7
lines changed

coderd/parameters_test.go

Lines changed: 83 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"github.com/coder/coder/v2/coderd/database/dbtestutil"
1616
"github.com/coder/coder/v2/coderd/database/pubsub"
1717
"github.com/coder/coder/v2/coderd/rbac"
18+
"github.com/coder/coder/v2/coderd/util/ptr"
1819
"github.com/coder/coder/v2/codersdk"
1920
"github.com/coder/coder/v2/codersdk/wsjson"
2021
"github.com/coder/coder/v2/provisioner/echo"
@@ -210,6 +211,79 @@ func TestDynamicParametersWithTerraformValues(t *testing.T) {
210211
// test to make it obvious what this test is doing.
211212
require.Zero(t, setup.api.FileCache.Count())
212213
})
214+
215+
t.Run("RebuildParameters", func(t *testing.T) {
216+
t.Parallel()
217+
218+
dynamicParametersTerraformSource, err := os.ReadFile("testdata/parameters/modules/main.tf")
219+
require.NoError(t, err)
220+
221+
modulesArchive, err := terraform.GetModulesArchive(os.DirFS("testdata/parameters/modules"))
222+
require.NoError(t, err)
223+
224+
setup := setupDynamicParamsTest(t, setupDynamicParamsTestParams{
225+
provisionerDaemonVersion: provProto.CurrentVersion.String(),
226+
mainTF: dynamicParametersTerraformSource,
227+
modulesArchive: modulesArchive,
228+
plan: nil,
229+
static: nil,
230+
})
231+
232+
ctx := testutil.Context(t, testutil.WaitMedium)
233+
stream := setup.stream
234+
previews := stream.Chan()
235+
236+
// Should see the output of the module represented
237+
preview := testutil.RequireReceive(ctx, t, previews)
238+
require.Equal(t, -1, preview.ID)
239+
require.Empty(t, preview.Diagnostics)
240+
241+
require.Len(t, preview.Parameters, 1)
242+
require.Equal(t, "jetbrains_ide", preview.Parameters[0].Name)
243+
require.True(t, preview.Parameters[0].Value.Valid)
244+
require.Equal(t, "CL", preview.Parameters[0].Value.Value)
245+
_ = stream.Close(websocket.StatusGoingAway)
246+
247+
wrk := coderdtest.CreateWorkspace(t, setup.client, setup.template.ID, func(request *codersdk.CreateWorkspaceRequest) {
248+
request.RichParameterValues = []codersdk.WorkspaceBuildParameter{
249+
{
250+
Name: preview.Parameters[0].Name,
251+
Value: "GO",
252+
},
253+
}
254+
})
255+
coderdtest.AwaitWorkspaceBuildJobCompleted(t, setup.client, wrk.LatestBuild.ID)
256+
257+
params, err := setup.client.WorkspaceBuildParameters(ctx, wrk.LatestBuild.ID)
258+
require.NoError(t, err)
259+
require.Len(t, params, 1)
260+
require.Equal(t, "jetbrains_ide", params[0].Name)
261+
require.Equal(t, "GO", params[0].Value)
262+
263+
// A helper function to assert params
264+
doTransition := func(t *testing.T, trans codersdk.WorkspaceTransition) {
265+
t.Helper()
266+
267+
bld, err := setup.client.CreateWorkspaceBuild(ctx, wrk.ID, codersdk.CreateWorkspaceBuildRequest{
268+
TemplateVersionID: setup.template.ActiveVersionID,
269+
Transition: trans,
270+
EnableDynamicParameters: ptr.Ref(true),
271+
})
272+
require.NoError(t, err)
273+
coderdtest.AwaitWorkspaceBuildJobCompleted(t, setup.client, wrk.LatestBuild.ID)
274+
275+
latestParams, err := setup.client.WorkspaceBuildParameters(ctx, bld.ID)
276+
require.Len(t, latestParams, 1)
277+
require.Equal(t, "jetbrains_ide", latestParams[0].Name)
278+
require.Equal(t, "GO", latestParams[0].Value)
279+
}
280+
281+
// Restart the workspace, then delete. Asserting params on all builds.
282+
doTransition(t, codersdk.WorkspaceTransitionStop)
283+
doTransition(t, codersdk.WorkspaceTransitionStart)
284+
doTransition(t, codersdk.WorkspaceTransitionDelete)
285+
286+
})
213287
}
214288

215289
type setupDynamicParamsTestParams struct {
@@ -225,9 +299,10 @@ type setupDynamicParamsTestParams struct {
225299
}
226300

227301
type dynamicParamsTest struct {
228-
client *codersdk.Client
229-
api *coderd.API
230-
stream *wsjson.Stream[codersdk.DynamicParametersResponse, codersdk.DynamicParametersRequest]
302+
client *codersdk.Client
303+
api *coderd.API
304+
stream *wsjson.Stream[codersdk.DynamicParametersResponse, codersdk.DynamicParametersRequest]
305+
template codersdk.Template
231306
}
232307

233308
func setupDynamicParamsTest(t *testing.T, args setupDynamicParamsTestParams) dynamicParamsTest {
@@ -259,7 +334,7 @@ func setupDynamicParamsTest(t *testing.T, args setupDynamicParamsTestParams) dyn
259334

260335
version := coderdtest.CreateTemplateVersion(t, templateAdmin, owner.OrganizationID, files)
261336
coderdtest.AwaitTemplateVersionJobCompleted(t, templateAdmin, version.ID)
262-
_ = coderdtest.CreateTemplate(t, templateAdmin, owner.OrganizationID, version.ID)
337+
tpl := coderdtest.CreateTemplate(t, templateAdmin, owner.OrganizationID, version.ID)
263338

264339
ctx := testutil.Context(t, testutil.WaitShort)
265340
stream, err := templateAdmin.TemplateVersionDynamicParameters(ctx, templateAdminUser.ID, version.ID)
@@ -280,9 +355,10 @@ func setupDynamicParamsTest(t *testing.T, args setupDynamicParamsTestParams) dyn
280355
})
281356

282357
return dynamicParamsTest{
283-
client: ownerClient,
284-
stream: stream,
285-
api: api,
358+
client: ownerClient,
359+
api: api,
360+
stream: stream,
361+
template: tpl,
286362
}
287363
}
288364

0 commit comments

Comments
 (0)