Files
coder/site/e2e/tests/workspaces/updateWorkspace.spec.ts
T
ケイラ 962608cde0 chore: allow signing in as non-admin users in e2e tests (#15892)
Closes coder/internal#168

Gets rid of the "global state" authentication, and adds a `login` helper
which should be called at the beginning of each test. This means that
not every test needs to authenticated as admin, and we can even have
tests that encompass multiple permission levels.

We also now create more than just the single admin user during setup, so
that we can have a set of users to pick from as appropriate.
2024-12-19 16:16:34 -07:00

139 lines
4.2 KiB
TypeScript

import { test } from "@playwright/test";
import {
createTemplate,
createWorkspace,
echoResponsesWithParameters,
updateTemplate,
updateWorkspace,
updateWorkspaceParameters,
verifyParameters,
} from "../../helpers";
import { login } 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);
await login(page);
});
test("update workspace, new optional, immutable parameter added", async ({
page,
}) => {
const richParameters: RichParameter[] = [firstParameter, secondParameter];
const template = await createTemplate(
page,
echoResponsesWithParameters(richParameters),
);
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.
const updatedRichParameters = [...richParameters, fifthParameter];
await updateTemplate(
page,
"coder",
template,
echoResponsesWithParameters(updatedRichParameters),
);
// Now, update the workspace, and select the value for immutable parameter.
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,
}) => {
const richParameters: RichParameter[] = [firstParameter, secondParameter];
const template = await createTemplate(
page,
echoResponsesWithParameters(richParameters),
);
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.
const updatedRichParameters = [...richParameters, sixthParameter];
await updateTemplate(
page,
"coder",
template,
echoResponsesWithParameters(updatedRichParameters),
);
// Now, update the workspace, and provide the parameter value.
const buildParameters = [{ name: sixthParameter.name, value: "99" }];
await updateWorkspace(
page,
workspaceName,
updatedRichParameters,
buildParameters,
);
// 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 }) => {
const richParameters: RichParameter[] = [firstParameter, secondBuildOption];
const template = await createTemplate(
page,
echoResponsesWithParameters(richParameters),
);
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,
);
// Verify that parameter values are default.
await verifyParameters(page, workspaceName, richParameters, [
{ name: firstParameter.name, value: firstParameter.defaultValue },
{ name: secondBuildOption.name, value: secondBuildOption.defaultValue },
]);
});