@@ -19,6 +19,7 @@ import {
1919 enterpriseLicense ,
2020 prometheusPort ,
2121 requireEnterpriseTests ,
22+ requireTerraformTests ,
2223} from "./constants" ;
2324import { expectUrl } from "./expectUrl" ;
2425import {
@@ -43,6 +44,11 @@ export function requiresEnterpriseLicense() {
4344 test . skip ( ! enterpriseLicense ) ;
4445}
4546
47+ // requireTerraformProvisioner by default is enabled.
48+ export function requireTerraformProvisioner ( ) {
49+ test . skip ( ! requireTerraformTests ) ;
50+ }
51+
4652// createWorkspace creates a workspace for a template.
4753// It does not wait for it to be running, but it does navigate to the page.
4854export const createWorkspace = async (
@@ -149,25 +155,46 @@ export const verifyParameters = async (
149155 }
150156} ;
151157
158+ // StarterTemplates are ids of starter templates that can be used in place of
159+ // the responses payload. These starter templates will require real provisioners.
160+ export enum StarterTemplates {
161+ STARTER_DOCKER = "docker" ,
162+ }
163+
164+ function isStarterTemplate (
165+ input : EchoProvisionerResponses | StarterTemplates | undefined ,
166+ ) : input is StarterTemplates {
167+ if ( ! input ) {
168+ return false ;
169+ }
170+ return typeof input === "string" ;
171+ }
172+
152173// createTemplate navigates to the /templates/new page and uploads a template
153174// with the resources provided in the responses argument.
154175export const createTemplate = async (
155176 page : Page ,
156- responses ?: EchoProvisionerResponses ,
177+ responses ?: EchoProvisionerResponses | StarterTemplates ,
157178) : Promise < string > => {
158- // Required to have templates submit their provisioner type as echo!
159- await page . addInitScript ( {
160- content : "window.playwright = true" ,
161- } ) ;
179+ let path = "/templates/new" ;
180+ if ( isStarterTemplate ( responses ) ) {
181+ path += `?exampleId=${ responses } ` ;
182+ } else {
183+ // The form page will read this value and use it as the default type.
184+ path += "?provisioner_type=echo" ;
185+ }
162186
163- await page . goto ( "/templates/new" , { waitUntil : "domcontentloaded" } ) ;
187+ await page . goto ( path , { waitUntil : "domcontentloaded" } ) ;
164188 await expectUrl ( page ) . toHavePathName ( "/templates/new" ) ;
165189
166- await page . getByTestId ( "file-upload" ) . setInputFiles ( {
167- buffer : await createTemplateVersionTar ( responses ) ,
168- mimeType : "application/x-tar" ,
169- name : "template.tar" ,
170- } ) ;
190+ if ( ! isStarterTemplate ( responses ) ) {
191+ await page . getByTestId ( "file-upload" ) . setInputFiles ( {
192+ buffer : await createTemplateVersionTar ( responses ) ,
193+ mimeType : "application/x-tar" ,
194+ name : "template.tar" ,
195+ } ) ;
196+ }
197+
171198 const name = randomName ( ) ;
172199 await page . getByLabel ( "Name *" ) . fill ( name ) ;
173200 await page . getByTestId ( "form-submit" ) . click ( ) ;
@@ -868,6 +895,7 @@ export async function openTerminalWindow(
868895 page : Page ,
869896 context : BrowserContext ,
870897 workspaceName : string ,
898+ agentName : string = "dev" ,
871899) : Promise < Page > {
872900 // Wait for the web terminal to open in a new tab
873901 const pagePromise = context . waitForEvent ( "page" ) ;
@@ -879,7 +907,7 @@ export async function openTerminalWindow(
879907 // isn't POSIX compatible, such as Fish.
880908 const commandQuery = `?command=${ encodeURIComponent ( "/usr/bin/env bash" ) } ` ;
881909 await expectUrl ( terminal ) . toHavePathName (
882- `/@admin/${ workspaceName } .dev /terminal` ,
910+ `/@admin/${ workspaceName } .${ agentName } /terminal` ,
883911 ) ;
884912 await terminal . goto ( `/@admin/${ workspaceName } .dev/terminal${ commandQuery } ` ) ;
885913
0 commit comments