@@ -19,7 +19,6 @@ import { port } from "./playwright.config"
19
19
import * as ssh from "ssh2"
20
20
import { Duplex } from "stream"
21
21
import { WorkspaceBuildParameter } from "api/typesGenerated"
22
- import { createTemplateVersion , uploadTemplateFile } from "api/api"
23
22
24
23
// createWorkspace creates a workspace for a template.
25
24
// It does not wait for it to be running, but it does navigate to the page.
@@ -117,6 +116,7 @@ export const createTemplate = async (
117
116
await page . addInitScript ( {
118
117
content : "window.playwright = true" ,
119
118
} )
119
+
120
120
await page . goto ( "/templates/new" , { waitUntil : "networkidle" } )
121
121
await page . getByTestId ( "file-upload" ) . setInputFiles ( {
122
122
buffer : await createTemplateVersionTar ( responses ) ,
@@ -617,23 +617,74 @@ export const fillParameters = async (
617
617
}
618
618
}
619
619
620
- export const uploadTemplateVersion = async (
620
+ export const updateTemplate = async (
621
+ page : Page ,
621
622
templateName : string ,
622
623
responses ?: EchoProvisionerResponses ,
623
- ) : Promise < string > => {
624
+ ) => {
624
625
const tarball = await createTemplateVersionTar ( responses )
625
- const file = new File ( [ tarball ] , "version.tar" , { type : "application/x-tar" } )
626
- const uploadResponse = await uploadTemplateFile ( file )
627
-
628
- // FIXME find:
629
- const organizationId = ""
630
- const templateId = ""
631
- const templateVersion = await createTemplateVersion ( organizationId , {
632
- template_id : templateId ,
633
- storage_method : "file" ,
634
- file_id : uploadResponse . hash ,
635
- provisioner : "echo" ,
636
- tags : { } ,
626
+
627
+ const sessionToken = await findSessionToken ( page )
628
+ const child = spawn (
629
+ "go" ,
630
+ [
631
+ "run" ,
632
+ coderMainPath ( ) ,
633
+ "templates" ,
634
+ "push" ,
635
+ "--test.provisioner" ,
636
+ "echo" ,
637
+ "-y" ,
638
+ "-d" ,
639
+ "-" ,
640
+ templateName ,
641
+ ] ,
642
+ {
643
+ env : {
644
+ ...process . env ,
645
+ CODER_SESSION_TOKEN : sessionToken ,
646
+ CODER_URL : "http://localhost:3000" ,
647
+ } ,
648
+ } ,
649
+ )
650
+
651
+ const uploaded = new Awaiter ( )
652
+ child . on ( "exit" , ( code ) => {
653
+ if ( code === 0 ) {
654
+ uploaded . done ( )
655
+ return
656
+ }
657
+
658
+ throw new Error ( `coder templates push failed with code ${ code } ` )
659
+ } )
660
+
661
+ child . stdin . write ( tarball )
662
+ child . stdin . end ( )
663
+
664
+ await uploaded . wait ( )
665
+ }
666
+
667
+ export const updateWorkspace = async (
668
+ page : Page ,
669
+ workspaceName : string ,
670
+ richParameters : RichParameter [ ] = [ ] ,
671
+ buildParameters : WorkspaceBuildParameter [ ] = [ ] ,
672
+ ) => {
673
+ await page . goto ( "/@admin/" + workspaceName , {
674
+ waitUntil : "domcontentloaded" ,
637
675
} )
638
- return templateVersion . id
676
+ await expect ( page ) . toHaveURL ( "/@admin/" + workspaceName )
677
+
678
+ await page . getByTestId ( "workspace-update-button" ) . click ( )
679
+ await page . getByTestId ( "confirm-button" ) . click ( )
680
+
681
+ await fillParameters ( page , richParameters , buildParameters )
682
+ await page . getByTestId ( "form-submit" ) . click ( )
683
+
684
+ await page . waitForSelector (
685
+ "span[data-testid='build-status'] >> text=Running" ,
686
+ {
687
+ state : "visible" ,
688
+ } ,
689
+ )
639
690
}
0 commit comments