@@ -16,9 +16,10 @@ import {
16
16
agentPProfPort ,
17
17
coderMain ,
18
18
coderPort ,
19
- enterpriseLicense ,
19
+ defaultOrganizationName ,
20
+ license ,
21
+ premiumTestsRequired ,
20
22
prometheusPort ,
21
- requireEnterpriseTests ,
22
23
requireTerraformTests ,
23
24
} from "./constants" ;
24
25
import { expectUrl } from "./expectUrl" ;
@@ -35,22 +36,28 @@ import {
35
36
type RichParameter ,
36
37
} from "./provisionerGenerated" ;
37
38
38
- // requiresEnterpriseLicense will skip the test if we're not running with an enterprise license
39
- export function requiresEnterpriseLicense ( ) {
40
- if ( requireEnterpriseTests ) {
39
+ /**
40
+ * requiresLicense will skip the test if we're not running with a license added
41
+ */
42
+ export function requiresLicense ( ) {
43
+ if ( premiumTestsRequired ) {
41
44
return ;
42
45
}
43
46
44
- test . skip ( ! enterpriseLicense ) ;
47
+ test . skip ( ! license ) ;
45
48
}
46
49
47
- // requireTerraformProvisioner by default is enabled.
50
+ /**
51
+ * requireTerraformProvisioner by default is enabled.
52
+ */
48
53
export function requireTerraformProvisioner ( ) {
49
54
test . skip ( ! requireTerraformTests ) ;
50
55
}
51
56
52
- // createWorkspace creates a workspace for a template.
53
- // It does not wait for it to be running, but it does navigate to the page.
57
+ /**
58
+ * createWorkspace creates a workspace for a template. It does not wait for it
59
+ * to be running, but it does navigate to the page.
60
+ */
54
61
export const createWorkspace = async (
55
62
page : Page ,
56
63
templateName : string ,
@@ -90,7 +97,7 @@ export const createWorkspace = async (
90
97
91
98
await expectUrl ( page ) . toHavePathName ( `/@admin/${ name } ` ) ;
92
99
93
- await page . waitForSelector ( "* [data-testid='build-status'] >> text=Running" , {
100
+ await page . waitForSelector ( "[data-testid='build-status'] >> text=Running" , {
94
101
state : "visible" ,
95
102
} ) ;
96
103
return name ;
@@ -151,8 +158,10 @@ export const verifyParameters = async (
151
158
}
152
159
} ;
153
160
154
- // StarterTemplates are ids of starter templates that can be used in place of
155
- // the responses payload. These starter templates will require real provisioners.
161
+ /**
162
+ * StarterTemplates are ids of starter templates that can be used in place of
163
+ * the responses payload. These starter templates will require real provisioners.
164
+ */
156
165
export enum StarterTemplates {
157
166
STARTER_DOCKER = "docker" ,
158
167
}
@@ -166,11 +175,14 @@ function isStarterTemplate(
166
175
return typeof input === "string" ;
167
176
}
168
177
169
- // createTemplate navigates to the /templates/new page and uploads a template
170
- // with the resources provided in the responses argument.
178
+ /**
179
+ * createTemplate navigates to the /templates/new page and uploads a template
180
+ * with the resources provided in the responses argument.
181
+ */
171
182
export const createTemplate = async (
172
183
page : Page ,
173
184
responses ?: EchoProvisionerResponses | StarterTemplates ,
185
+ orgName = defaultOrganizationName ,
174
186
) : Promise < string > => {
175
187
let path = "/templates/new" ;
176
188
if ( isStarterTemplate ( responses ) ) {
@@ -191,31 +203,47 @@ export const createTemplate = async (
191
203
} ) ;
192
204
}
193
205
206
+ // If the organization picker is present on the page, select the default
207
+ // organization.
208
+ const orgPicker = page . getByLabel ( "Belongs to *" ) ;
209
+ const organizationsEnabled = await orgPicker . isVisible ( ) ;
210
+ if ( organizationsEnabled ) {
211
+ await orgPicker . click ( ) ;
212
+ await page . getByText ( orgName , { exact : true } ) . click ( ) ;
213
+ }
214
+
194
215
const name = randomName ( ) ;
195
216
await page . getByLabel ( "Name *" ) . fill ( name ) ;
196
217
await page . getByTestId ( "form-submit" ) . click ( ) ;
197
- await expectUrl ( page ) . toHavePathName ( `/templates/${ name } /files` , {
198
- timeout : 30000 ,
199
- } ) ;
218
+ await expectUrl ( page ) . toHavePathName (
219
+ organizationsEnabled
220
+ ? `/templates/${ orgName } /${ name } /files`
221
+ : `/templates/${ name } /files` ,
222
+ {
223
+ timeout : 30000 ,
224
+ } ,
225
+ ) ;
200
226
return name ;
201
227
} ;
202
228
203
- // createGroup navigates to the /groups/create page and creates a group with a
204
- // random name.
229
+ /**
230
+ * createGroup navigates to the /groups/create page and creates a group with a
231
+ * random name.
232
+ */
205
233
export const createGroup = async ( page : Page ) : Promise < string > => {
206
234
await page . goto ( "/groups/create" , { waitUntil : "domcontentloaded" } ) ;
207
235
await expectUrl ( page ) . toHavePathName ( "/groups/create" ) ;
208
236
209
237
const name = randomName ( ) ;
210
238
await page . getByLabel ( "Name" , { exact : true } ) . fill ( name ) ;
211
239
await page . getByTestId ( "form-submit" ) . click ( ) ;
212
- await expect ( page ) . toHaveURL (
213
- / \/ g r o u p s \/ [ 0 - 9 a - f ] { 8 } - [ 0 - 9 a - f ] { 4 } - [ 0 - 9 a - f ] { 4 } - [ 0 - 9 a - f ] { 4 } - [ 0 - 9 a - f ] { 12 } $ / ,
214
- ) ;
240
+ await expectUrl ( page ) . toHavePathName ( `/groups/${ name } ` ) ;
215
241
return name ;
216
242
} ;
217
243
218
- // sshIntoWorkspace spawns a Coder SSH process and a client connected to it.
244
+ /**
245
+ * sshIntoWorkspace spawns a Coder SSH process and a client connected to it.
246
+ */
219
247
export const sshIntoWorkspace = async (
220
248
page : Page ,
221
249
workspace : string ,
@@ -298,17 +326,21 @@ export const buildWorkspaceWithParameters = async (
298
326
} ) ;
299
327
} ;
300
328
301
- // startAgent runs the coder agent with the provided token.
302
- // It awaits the agent to be ready before returning.
329
+ /**
330
+ * startAgent runs the coder agent with the provided token. It waits for the
331
+ * agent to be ready before returning.
332
+ */
303
333
export const startAgent = async (
304
334
page : Page ,
305
335
token : string ,
306
336
) : Promise < ChildProcess > => {
307
337
return startAgentWithCommand ( page , token , "go" , "run" , coderMain ) ;
308
338
} ;
309
339
310
- // downloadCoderVersion downloads the version provided into a temporary dir and
311
- // caches it so subsequent calls are fast.
340
+ /**
341
+ * downloadCoderVersion downloads the version provided into a temporary dir and
342
+ * caches it so subsequent calls are fast.
343
+ */
312
344
export const downloadCoderVersion = async (
313
345
version : string ,
314
346
) : Promise < string > => {
@@ -448,8 +480,10 @@ interface EchoProvisionerResponses {
448
480
apply ?: RecursivePartial < Response > [ ] ;
449
481
}
450
482
451
- // createTemplateVersionTar consumes a series of echo provisioner protobufs and
452
- // converts it into an uploadable tar file.
483
+ /**
484
+ * createTemplateVersionTar consumes a series of echo provisioner protobufs and
485
+ * converts it into an uploadable tar file.
486
+ */
453
487
const createTemplateVersionTar = async (
454
488
responses ?: EchoProvisionerResponses ,
455
489
) : Promise < Buffer > => {
@@ -619,8 +653,10 @@ export const randomName = () => {
619
653
return randomUUID ( ) . slice ( 0 , 8 ) ;
620
654
} ;
621
655
622
- // Awaiter is a helper that allows you to wait for a callback to be called.
623
- // It is useful for waiting for events to occur.
656
+ /**
657
+ * Awaiter is a helper that allows you to wait for a callback to be called. It
658
+ * is useful for waiting for events to occur.
659
+ */
624
660
export class Awaiter {
625
661
private promise : Promise < void > ;
626
662
private callback ?: ( ) => void ;
@@ -825,7 +861,6 @@ export const updateTemplateSettings = async (
825
861
await page . goto ( `/templates/${ templateName } /settings` , {
826
862
waitUntil : "domcontentloaded" ,
827
863
} ) ;
828
- await expectUrl ( page ) . toHavePathName ( `/templates/${ templateName } /settings` ) ;
829
864
830
865
for ( const [ key , value ] of Object . entries ( templateSettingValues ) ) {
831
866
// Skip max_port_share_level for now since the frontend is not yet able to handle it
@@ -839,7 +874,7 @@ export const updateTemplateSettings = async (
839
874
await page . getByTestId ( "form-submit" ) . click ( ) ;
840
875
841
876
const name = templateSettingValues . name ?? templateName ;
842
- await expectUrl ( page ) . toHavePathName ( `/templates /${ name } `) ;
877
+ await expectUrl ( page ) . toHavePathNameEndingWith ( ` /${ name } `) ;
843
878
} ;
844
879
845
880
export const updateWorkspace = async (
0 commit comments