Files
coder/site/e2e/tests/workspaces/updateWorkspace.spec.ts
T

162 lines
5.1 KiB
TypeScript

import { test } from "@playwright/test";
import { users } from "../../constants";
import {
createTemplate,
createWorkspace,
echoResponsesWithParameters,
login,
stopWorkspace,
updateTemplate,
updateWorkspace,
updateWorkspaceParameters,
verifyParameters,
} from "../../helpers";
import { beforeCoderTest } from "../../hooks";
import {
fifthParameter,
firstParameter,
secondBuildOption,
secondParameter,
sixthParameter,
} from "../../parameters";
import type { RichParameter } from "../../provisionerGenerated";
test.beforeEach(async ({ page }) => {
beforeCoderTest(page);
});
// TODO: this needs to be fixed for the new dynamic parameters flow which
// sends you to the parameters settings page instead of prompting for new
// values in a modal, but that flow is broken! because we don't let you set
// immutable parameters on that page even if they are new, and detecting if
// they are new is non-trivial.
test.skip("update workspace, new optional, immutable parameter added", async ({
page,
}) => {
await login(page, users.templateAdmin);
const richParameters: RichParameter[] = [firstParameter, secondParameter];
const template = await createTemplate(
page,
echoResponsesWithParameters(richParameters),
);
await login(page, users.member);
const workspaceName = await createWorkspace(page, template);
// Verify that parameter values are default.
await verifyParameters(page, workspaceName, richParameters, [
{ name: firstParameter.name, value: firstParameter.defaultValue },
{ name: secondParameter.name, value: secondParameter.defaultValue },
]);
// Push updated template.
await login(page, users.templateAdmin);
const updatedRichParameters = [...richParameters, fifthParameter];
await updateTemplate(
page,
"coder",
template,
echoResponsesWithParameters(updatedRichParameters),
);
// Now, update the workspace, and select the value for immutable parameter.
await login(page, users.member);
await updateWorkspace(page, workspaceName, updatedRichParameters, [
{ name: fifthParameter.name, value: fifthParameter.options[0].value },
]);
// Verify parameter values.
await verifyParameters(page, workspaceName, updatedRichParameters, [
{ name: firstParameter.name, value: firstParameter.defaultValue },
{ name: secondParameter.name, value: secondParameter.defaultValue },
{ name: fifthParameter.name, value: fifthParameter.options[0].value },
]);
});
test("update workspace, new required, mutable parameter added", async ({
page,
}) => {
await login(page, users.templateAdmin);
const richParameters: RichParameter[] = [firstParameter, secondParameter];
const template = await createTemplate(
page,
echoResponsesWithParameters(richParameters),
);
await login(page, users.member);
const workspaceName = await createWorkspace(page, template);
// Verify that parameter values are default.
await verifyParameters(page, workspaceName, richParameters, [
{ name: firstParameter.name, value: firstParameter.defaultValue },
{ name: secondParameter.name, value: secondParameter.defaultValue },
]);
// Push updated template.
await login(page, users.templateAdmin);
const updatedRichParameters = [...richParameters, sixthParameter];
await updateTemplate(
page,
"coder",
template,
echoResponsesWithParameters(updatedRichParameters),
);
// Now, update the workspace, and provide the parameter value.
await login(page, users.member);
const buildParameters = [{ name: sixthParameter.name, value: "99" }];
await updateWorkspace(
page,
workspaceName,
updatedRichParameters,
buildParameters,
);
await page.waitForSelector("text=Workspace status: Running", {
state: "visible",
});
// Verify parameter values.
await verifyParameters(page, workspaceName, updatedRichParameters, [
{ name: firstParameter.name, value: firstParameter.defaultValue },
{ name: secondParameter.name, value: secondParameter.defaultValue },
...buildParameters,
]);
});
test("update workspace with ephemeral parameter enabled", async ({ page }) => {
await login(page, users.templateAdmin);
const richParameters: RichParameter[] = [firstParameter, secondBuildOption];
const template = await createTemplate(
page,
echoResponsesWithParameters(richParameters),
);
await login(page, users.member);
const workspaceName = await createWorkspace(page, template);
// Verify that parameter values are default.
await verifyParameters(page, workspaceName, richParameters, [
{ name: firstParameter.name, value: firstParameter.defaultValue },
{ name: secondBuildOption.name, value: secondBuildOption.defaultValue },
]);
// Now, update the workspace, and select the value for ephemeral parameter.
const buildParameters = [{ name: secondBuildOption.name, value: "true" }];
await updateWorkspaceParameters(
page,
workspaceName,
richParameters,
buildParameters,
);
// Stop the workspace
await stopWorkspace(page, workspaceName);
// Verify that parameter values are default.
await verifyParameters(page, workspaceName, richParameters, [
{ name: firstParameter.name, value: firstParameter.defaultValue },
{ name: secondBuildOption.name, value: secondBuildOption.defaultValue },
]);
});