@@ -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
0 commit comments