@@ -15,6 +15,7 @@ import (
15
15
"github.com/coder/coder/v2/coderd/database/dbtestutil"
16
16
"github.com/coder/coder/v2/coderd/database/pubsub"
17
17
"github.com/coder/coder/v2/coderd/rbac"
18
+ "github.com/coder/coder/v2/coderd/util/ptr"
18
19
"github.com/coder/coder/v2/codersdk"
19
20
"github.com/coder/coder/v2/codersdk/wsjson"
20
21
"github.com/coder/coder/v2/provisioner/echo"
@@ -210,6 +211,79 @@ func TestDynamicParametersWithTerraformValues(t *testing.T) {
210
211
// test to make it obvious what this test is doing.
211
212
require .Zero (t ,setup .api .FileCache .Count ())
212
213
})
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
+ })
213
287
}
214
288
215
289
type setupDynamicParamsTestParams struct {
@@ -225,9 +299,10 @@ type setupDynamicParamsTestParams struct {
225
299
}
226
300
227
301
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
231
306
}
232
307
233
308
func setupDynamicParamsTest (t * testing.T ,args setupDynamicParamsTestParams )dynamicParamsTest {
@@ -259,7 +334,7 @@ func setupDynamicParamsTest(t *testing.T, args setupDynamicParamsTestParams) dyn
259
334
260
335
version := coderdtest .CreateTemplateVersion (t ,templateAdmin ,owner .OrganizationID ,files )
261
336
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 )
263
338
264
339
ctx := testutil .Context (t ,testutil .WaitShort )
265
340
stream ,err := templateAdmin .TemplateVersionDynamicParameters (ctx ,templateAdminUser .ID ,version .ID )
@@ -280,9 +355,10 @@ func setupDynamicParamsTest(t *testing.T, args setupDynamicParamsTestParams) dyn
280
355
})
281
356
282
357
return dynamicParamsTest {
283
- client :ownerClient ,
284
- stream :stream ,
285
- api :api ,
358
+ client :ownerClient ,
359
+ api :api ,
360
+ stream :stream ,
361
+ template :tpl ,
286
362
}
287
363
}
288
364