@@ -34,52 +34,16 @@ export const createWorkspace = async (
34
34
const name = randomName ( )
35
35
await page . getByLabel ( "name" ) . fill ( name )
36
36
37
- for ( const buildParameter of buildParameters ) {
38
- const richParameter = richParameters . find (
39
- ( richParam ) => richParam . name === buildParameter . name ,
40
- )
41
- if ( ! richParameter ) {
42
- throw new Error (
43
- "build parameter is expected to be present in rich parameter schema" ,
44
- )
45
- }
46
-
47
- const parameterLabel = await page . waitForSelector (
48
- "[data-testid='parameter-field-" + richParameter . name + "']" ,
49
- { state : "visible" } ,
50
- )
51
-
52
- if ( richParameter . type === "bool" ) {
53
- const parameterField = await parameterLabel . waitForSelector (
54
- "[data-testid='parameter-field-bool'] .MuiRadio-root input[value='" +
55
- buildParameter . value +
56
- "']" ,
57
- )
58
- await parameterField . check ( )
59
- } else if ( richParameter . options . length > 0 ) {
60
- const parameterField = await parameterLabel . waitForSelector (
61
- "[data-testid='parameter-field-options'] .MuiRadio-root input[value='" +
62
- buildParameter . value +
63
- "']" ,
64
- )
65
- await parameterField . check ( )
66
- } else if ( richParameter . type === "list(string)" ) {
67
- throw new Error ( "not implemented yet" ) // FIXME
68
- } else {
69
- // text or number
70
- const parameterField = await parameterLabel . waitForSelector (
71
- "[data-testid='parameter-field-text'] input" ,
72
- )
73
- await parameterField . fill ( buildParameter . value )
74
- }
75
- }
76
-
37
+ await fillParameters ( page , richParameters , buildParameters )
77
38
await page . getByTestId ( "form-submit" ) . click ( )
78
39
79
40
await expect ( page ) . toHaveURL ( "/@admin/" + name )
80
- await page . waitForSelector ( "[data-testid='build-status']" , {
81
- state : "visible" ,
82
- } )
41
+ await page . waitForSelector (
42
+ "span[data-testid='build-status'] >> text=Running" ,
43
+ {
44
+ state : "visible" ,
45
+ } ,
46
+ )
83
47
return name
84
48
}
85
49
@@ -213,6 +177,50 @@ export const sshIntoWorkspace = async (
213
177
} )
214
178
}
215
179
180
+ export const stopWorkspace = async ( page : Page , workspaceName : string ) => {
181
+ await page . goto ( "/@admin/" + workspaceName , {
182
+ waitUntil : "domcontentloaded" ,
183
+ } )
184
+ await expect ( page ) . toHaveURL ( "/@admin/" + workspaceName )
185
+
186
+ await page . getByTestId ( "workspace-stop-button" ) . click ( )
187
+
188
+ await page . waitForSelector (
189
+ "span[data-testid='build-status'] >> text=Stopped" ,
190
+ {
191
+ state : "visible" ,
192
+ } ,
193
+ )
194
+ }
195
+
196
+ export const buildWorkspaceWithParameters = async (
197
+ page : Page ,
198
+ workspaceName : string ,
199
+ richParameters : RichParameter [ ] = [ ] ,
200
+ buildParameters : WorkspaceBuildParameter [ ] = [ ] ,
201
+ confirm : boolean = false ,
202
+ ) => {
203
+ await page . goto ( "/@admin/" + workspaceName , {
204
+ waitUntil : "domcontentloaded" ,
205
+ } )
206
+ await expect ( page ) . toHaveURL ( "/@admin/" + workspaceName )
207
+
208
+ await page . getByTestId ( "build-parameters-button" ) . click ( )
209
+
210
+ await fillParameters ( page , richParameters , buildParameters )
211
+ await page . getByTestId ( "build-parameters-submit" ) . click ( )
212
+ if ( confirm ) {
213
+ await page . getByTestId ( "confirm-button" ) . click ( )
214
+ }
215
+
216
+ await page . waitForSelector (
217
+ "span[data-testid='build-status'] >> text=Running" ,
218
+ {
219
+ state : "visible" ,
220
+ } ,
221
+ )
222
+ }
223
+
216
224
// startAgent runs the coder agent with the provided token.
217
225
// It awaits the agent to be ready before returning.
218
226
export const startAgent = async ( page : Page , token : string ) : Promise < void > => {
@@ -561,3 +569,49 @@ export const echoResponsesWithParameters = (
561
569
] ,
562
570
}
563
571
}
572
+
573
+ export const fillParameters = async (
574
+ page : Page ,
575
+ richParameters : RichParameter [ ] = [ ] ,
576
+ buildParameters : WorkspaceBuildParameter [ ] = [ ] ,
577
+ ) => {
578
+ for ( const buildParameter of buildParameters ) {
579
+ const richParameter = richParameters . find (
580
+ ( richParam ) => richParam . name === buildParameter . name ,
581
+ )
582
+ if ( ! richParameter ) {
583
+ throw new Error (
584
+ "build parameter is expected to be present in rich parameter schema" ,
585
+ )
586
+ }
587
+
588
+ const parameterLabel = await page . waitForSelector (
589
+ "[data-testid='parameter-field-" + richParameter . name + "']" ,
590
+ { state : "visible" } ,
591
+ )
592
+
593
+ if ( richParameter . type === "bool" ) {
594
+ const parameterField = await parameterLabel . waitForSelector (
595
+ "[data-testid='parameter-field-bool'] .MuiRadio-root input[value='" +
596
+ buildParameter . value +
597
+ "']" ,
598
+ )
599
+ await parameterField . check ( )
600
+ } else if ( richParameter . options . length > 0 ) {
601
+ const parameterField = await parameterLabel . waitForSelector (
602
+ "[data-testid='parameter-field-options'] .MuiRadio-root input[value='" +
603
+ buildParameter . value +
604
+ "']" ,
605
+ )
606
+ await parameterField . check ( )
607
+ } else if ( richParameter . type === "list(string)" ) {
608
+ throw new Error ( "not implemented yet" ) // FIXME
609
+ } else {
610
+ // text or number
611
+ const parameterField = await parameterLabel . waitForSelector (
612
+ "[data-testid='parameter-field-text'] input" ,
613
+ )
614
+ await parameterField . fill ( buildParameter . value )
615
+ }
616
+ }
617
+ }
0 commit comments