Skip to content

Commit d436155

Browse files
committed
Update
1 parent 6398402 commit d436155

File tree

3 files changed

+85
-27
lines changed

3 files changed

+85
-27
lines changed

site/e2e/helpers.ts

Lines changed: 67 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import { port } from "./playwright.config"
1919
import * as ssh from "ssh2"
2020
import { Duplex } from "stream"
2121
import { WorkspaceBuildParameter } from "api/typesGenerated"
22-
import { createTemplateVersion, uploadTemplateFile } from "api/api"
2322

2423
// createWorkspace creates a workspace for a template.
2524
// It does not wait for it to be running, but it does navigate to the page.
@@ -117,6 +116,7 @@ export const createTemplate = async (
117116
await page.addInitScript({
118117
content: "window.playwright = true",
119118
})
119+
120120
await page.goto("/templates/new", { waitUntil: "networkidle" })
121121
await page.getByTestId("file-upload").setInputFiles({
122122
buffer: await createTemplateVersionTar(responses),
@@ -617,23 +617,74 @@ export const fillParameters = async (
617617
}
618618
}
619619

620-
export const uploadTemplateVersion = async (
620+
export const updateTemplate = async (
621+
page: Page,
621622
templateName: string,
622623
responses?: EchoProvisionerResponses,
623-
): Promise<string> => {
624+
) => {
624625
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",
637675
})
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+
)
639690
}

site/e2e/tests/updateWorkspace.spec.ts

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,15 @@ import {
33
createTemplate,
44
createWorkspace,
55
echoResponsesWithParameters,
6-
uploadTemplateVersion,
6+
updateTemplate,
7+
updateWorkspace,
78
verifyParameters,
89
} from "../helpers"
910

1011
import { fifthParameter, firstParameter, secondParameter } from "../parameters"
1112
import { RichParameter } from "../provisionerGenerated"
1213

13-
test("update workspace, new optional, mutable parameter added", async ({
14+
test("update workspace, new optional, immutable parameter added", async ({
1415
page,
1516
}) => {
1617
const richParameters: RichParameter[] = [firstParameter, secondParameter]
@@ -27,23 +28,23 @@ test("update workspace, new optional, mutable parameter added", async ({
2728
{ name: secondParameter.name, value: secondParameter.defaultValue },
2829
])
2930

30-
// Upload new template version with extra parameter.
31+
// Push updated template.
3132
const updatedRichParameters = [...richParameters, fifthParameter]
32-
const templateVersion = await uploadTemplateVersion(
33+
await updateTemplate(
34+
page,
3335
template,
3436
echoResponsesWithParameters(updatedRichParameters),
3537
)
3638

37-
// TODO Activate the template version
38-
// Go to Versions -> Promote version
39-
40-
// Now, update the workspace.
41-
// TODO Update workspace
39+
// Now, update the workspace, and select the value for immutable parameter.
40+
await updateWorkspace(page, workspaceName, updatedRichParameters, [
41+
{ name: fifthParameter.name, value: fifthParameter.options[0].value },
42+
])
4243

4344
// Verify that parameter values are default.
4445
await verifyParameters(page, workspaceName, updatedRichParameters, [
4546
{ name: firstParameter.name, value: firstParameter.defaultValue },
4647
{ name: secondParameter.name, value: secondParameter.defaultValue },
47-
{ name: fifthParameter.name, value: fifthParameter.defaultValue },
48+
{ name: fifthParameter.name, value: fifthParameter.options[0].value },
4849
])
4950
})

site/src/pages/WorkspacePage/UpdateBuildParametersDialog.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,13 @@ export const UpdateBuildParametersDialog: FC<
111111
<Button fullWidth type="button" onClick={dialogProps.onClose}>
112112
Cancel
113113
</Button>
114-
<Button color="primary" fullWidth type="submit" form="updateParameters">
114+
<Button
115+
color="primary"
116+
fullWidth
117+
type="submit"
118+
form="updateParameters"
119+
data-testid="form-submit"
120+
>
115121
Update
116122
</Button>
117123
</DialogActions>

0 commit comments

Comments
 (0)