Skip to content

test(site): e2e: update workspace with parameters #9338

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 23 commits into from
Aug 29, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
refactor
  • Loading branch information
mtojek committed Aug 25, 2023
commit ca7feaa6104960e3d0863405dbabff4bcffbd573
134 changes: 49 additions & 85 deletions site/e2e/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,46 +34,7 @@ export const createWorkspace = async (
const name = randomName()
await page.getByLabel("name").fill(name)

for (const buildParameter of buildParameters) {
const richParameter = richParameters.find(
(richParam) => richParam.name === buildParameter.name,
)
if (!richParameter) {
throw new Error(
"build parameter is expected to be present in rich parameter schema",
)
}

const parameterLabel = await page.waitForSelector(
"[data-testid='parameter-field-" + richParameter.name + "']",
{ state: "visible" },
)

if (richParameter.type === "bool") {
const parameterField = await parameterLabel.waitForSelector(
"[data-testid='parameter-field-bool'] .MuiRadio-root input[value='" +
buildParameter.value +
"']",
)
await parameterField.check()
} else if (richParameter.options.length > 0) {
const parameterField = await parameterLabel.waitForSelector(
"[data-testid='parameter-field-options'] .MuiRadio-root input[value='" +
buildParameter.value +
"']",
)
await parameterField.check()
} else if (richParameter.type === "list(string)") {
throw new Error("not implemented yet") // FIXME
} else {
// text or number
const parameterField = await parameterLabel.waitForSelector(
"[data-testid='parameter-field-text'] input",
)
await parameterField.fill(buildParameter.value)
}
}

await fillParameters(page, richParameters, buildParameters)
await page.getByTestId("form-submit").click()

await expect(page).toHaveURL("/@admin/" + name)
Expand Down Expand Up @@ -216,10 +177,7 @@ export const sshIntoWorkspace = async (
})
}

export const stopWorkspace = async (
page: Page,
workspaceName: string,
) => {
export const stopWorkspace = async (page: Page, workspaceName: string) => {
await page.goto("/@admin/" + workspaceName, {
waitUntil: "domcontentloaded",
})
Expand Down Expand Up @@ -249,48 +207,8 @@ export const buildWorkspaceWithParameters = async (

await page.getByTestId("build-parameters-button").click()

for (const buildParameter of buildParameters) {
const richParameter = richParameters.find(
(richParam) => richParam.name === buildParameter.name,
)
if (!richParameter) {
throw new Error(
"build parameter is expected to be present in rich parameter schema",
)
}

const parameterLabel = await page.waitForSelector(
"[data-testid='parameter-field-" + richParameter.name + "']",
{ state: "visible" },
)

if (richParameter.type === "bool") {
const parameterField = await parameterLabel.waitForSelector(
"[data-testid='parameter-field-bool'] .MuiRadio-root input[value='" +
buildParameter.value +
"']",
)
await parameterField.check()
} else if (richParameter.options.length > 0) {
const parameterField = await parameterLabel.waitForSelector(
"[data-testid='parameter-field-options'] .MuiRadio-root input[value='" +
buildParameter.value +
"']",
)
await parameterField.check()
} else if (richParameter.type === "list(string)") {
throw new Error("not implemented yet") // FIXME
} else {
// text or number
const parameterField = await parameterLabel.waitForSelector(
"[data-testid='parameter-field-text'] input",
)
await parameterField.fill(buildParameter.value)
}
}

await fillParameters(page, richParameters, buildParameters)
await page.getByTestId("build-parameters-submit").click()

if (confirm) {
await page.getByTestId("confirm-button").click()
}
Expand Down Expand Up @@ -651,3 +569,49 @@ export const echoResponsesWithParameters = (
],
}
}

export const fillParameters = async (
page: Page,
richParameters: RichParameter[] = [],
buildParameters: WorkspaceBuildParameter[] = [],
) => {
for (const buildParameter of buildParameters) {
const richParameter = richParameters.find(
(richParam) => richParam.name === buildParameter.name,
)
if (!richParameter) {
throw new Error(
"build parameter is expected to be present in rich parameter schema",
)
}

const parameterLabel = await page.waitForSelector(
"[data-testid='parameter-field-" + richParameter.name + "']",
{ state: "visible" },
)

if (richParameter.type === "bool") {
const parameterField = await parameterLabel.waitForSelector(
"[data-testid='parameter-field-bool'] .MuiRadio-root input[value='" +
buildParameter.value +
"']",
)
await parameterField.check()
} else if (richParameter.options.length > 0) {
const parameterField = await parameterLabel.waitForSelector(
"[data-testid='parameter-field-options'] .MuiRadio-root input[value='" +
buildParameter.value +
"']",
)
await parameterField.check()
} else if (richParameter.type === "list(string)") {
throw new Error("not implemented yet") // FIXME
} else {
// text or number
const parameterField = await parameterLabel.waitForSelector(
"[data-testid='parameter-field-text'] input",
)
await parameterField.fill(buildParameter.value)
}
}
}
8 changes: 7 additions & 1 deletion site/e2e/tests/restartWorkspace.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,13 @@ test("restart workspace with ephemeral parameters", async ({ page }) => {
{ name: firstBuildOption.name, value: "AAAAA" },
{ name: secondBuildOption.name, value: "true" },
]
await buildWorkspaceWithParameters(page, workspaceName, richParameters, buildParameters, true)
await buildWorkspaceWithParameters(
page,
workspaceName,
richParameters,
buildParameters,
true,
)

// FIXME: verify that build options are default (not selected).
// It is the opposite now until the site logic is corrected.
Expand Down
7 changes: 6 additions & 1 deletion site/e2e/tests/startWorkspace.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,12 @@ test("start workspace with ephemeral parameters", async ({ page }) => {
{ name: secondBuildOption.name, value: "true" },
]

await buildWorkspaceWithParameters(page, workspaceName, richParameters, buildParameters)
await buildWorkspaceWithParameters(
page,
workspaceName,
richParameters,
buildParameters,
)

// FIXME: verify that build options are default (not selected).
// It is the opposite now until the site logic is corrected.
Expand Down