@@ -10,6 +10,7 @@ import (
10
10
11
11
"github.com/coder/coder/cli/clitest"
12
12
"github.com/coder/coder/coderd/coderdtest"
13
+ "github.com/coder/coder/coderd/database"
13
14
"github.com/coder/coder/codersdk"
14
15
"github.com/coder/coder/provisioner/echo"
15
16
"github.com/coder/coder/provisionersdk/proto"
@@ -21,6 +22,10 @@ const (
21
22
ephemeralParameterName = "ephemeral_parameter"
22
23
ephemeralParameterDescription = "This is ephemeral parameter"
23
24
ephemeralParameterValue = "3"
25
+
26
+ immutableParameterName = "immutable_parameter"
27
+ immutableParameterDescription = "This is immutable parameter"
28
+ immutableParameterValue = "abc"
24
29
)
25
30
26
31
func TestStart (t * testing.T ) {
@@ -140,3 +145,82 @@ func TestStart(t *testing.T) {
140
145
})
141
146
})
142
147
}
148
+
149
+ func TestStartWithParameters (t * testing.T ) {
150
+ t .Parallel ()
151
+
152
+ echoResponses := & echo.Responses {
153
+ Parse : echo .ParseComplete ,
154
+ ProvisionPlan : []* proto.Provision_Response {
155
+ {
156
+ Type : & proto.Provision_Response_Complete {
157
+ Complete : & proto.Provision_Complete {
158
+ Parameters : []* proto.RichParameter {
159
+ {
160
+ Name : immutableParameterName ,
161
+ Description : immutableParameterDescription ,
162
+ Required : true ,
163
+ },
164
+ },
165
+ },
166
+ },
167
+ },
168
+ },
169
+ ProvisionApply : []* proto.Provision_Response {{
170
+ Type : & proto.Provision_Response_Complete {
171
+ Complete : & proto.Provision_Complete {},
172
+ },
173
+ }},
174
+ }
175
+
176
+ t .Run ("DoNotAskForImmutables" , func (t * testing.T ) {
177
+ t .Parallel ()
178
+
179
+ // Create the workspace
180
+ client := coderdtest .New (t , & coderdtest.Options {IncludeProvisionerDaemon : true })
181
+ user := coderdtest .CreateFirstUser (t , client )
182
+ version := coderdtest .CreateTemplateVersion (t , client , user .OrganizationID , echoResponses )
183
+ coderdtest .AwaitTemplateVersionJob (t , client , version .ID )
184
+ template := coderdtest .CreateTemplate (t , client , user .OrganizationID , version .ID )
185
+ workspace := coderdtest .CreateWorkspace (t , client , user .OrganizationID , template .ID , func (cwr * codersdk.CreateWorkspaceRequest ) {
186
+ cwr .RichParameterValues = []codersdk.WorkspaceBuildParameter {
187
+ {
188
+ Name : immutableParameterName ,
189
+ Value : immutableParameterValue ,
190
+ },
191
+ }
192
+ })
193
+ coderdtest .AwaitWorkspaceBuildJob (t , client , workspace .LatestBuild .ID )
194
+
195
+ // Stop the workspace
196
+ workspaceBuild := coderdtest .CreateWorkspaceBuild (t , client , workspace , database .WorkspaceTransitionStop )
197
+ coderdtest .AwaitWorkspaceBuildJob (t , client , workspaceBuild .ID )
198
+
199
+ // Start the workspace again
200
+ inv , root := clitest .New (t , "start" , workspace .Name )
201
+ clitest .SetupConfig (t , client , root )
202
+ doneChan := make (chan struct {})
203
+ pty := ptytest .New (t ).Attach (inv )
204
+ go func () {
205
+ defer close (doneChan )
206
+ err := inv .Run ()
207
+ assert .NoError (t , err )
208
+ }()
209
+
210
+ pty .ExpectMatch ("workspace has been started" )
211
+ <- doneChan
212
+
213
+ // Verify if immutable parameter is set
214
+ ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitShort )
215
+ defer cancel ()
216
+
217
+ workspace , err := client .WorkspaceByOwnerAndName (ctx , workspace .OwnerName , workspace .Name , codersdk.WorkspaceOptions {})
218
+ require .NoError (t , err )
219
+ actualParameters , err := client .WorkspaceBuildParameters (ctx , workspace .LatestBuild .ID )
220
+ require .NoError (t , err )
221
+ require .Contains (t , actualParameters , codersdk.WorkspaceBuildParameter {
222
+ Name : immutableParameterName ,
223
+ Value : immutableParameterValue ,
224
+ })
225
+ })
226
+ }
0 commit comments