84 lines
2.7 KiB
TypeScript
84 lines
2.7 KiB
TypeScript
import type { Page } from "@playwright/test";
|
|
import { expect } from "@playwright/test";
|
|
|
|
export async function addForm(page: Page, { name = "Test Form Name" } = {}) {
|
|
await page.goto("/routing-forms/forms");
|
|
await page.click('[data-testid="new-routing-form"]');
|
|
// Choose to create the Form for the user(which is the first option) and not the team
|
|
await page.click('[data-testid="option-0"]');
|
|
await page.fill("input[name]", name);
|
|
await page.click('[data-testid="add-form"]');
|
|
await page.waitForSelector('[data-testid="add-field"]');
|
|
const url = page.url();
|
|
const formId = new URL(url).pathname.split("/").at(-1);
|
|
if (!formId) {
|
|
throw new Error("Form ID couldn't be determined from url");
|
|
}
|
|
return formId;
|
|
}
|
|
|
|
export async function addOneFieldAndDescriptionAndSaveForm(
|
|
formId: string,
|
|
page: Page,
|
|
form: { description?: string; field?: { typeIndex: number; label: string } }
|
|
) {
|
|
await page.goto(`apps/routing-forms/form-edit/${formId}`);
|
|
await page.click('[data-testid="add-field"]');
|
|
if (form.description) {
|
|
await page.fill('[data-testid="description"]', form.description);
|
|
}
|
|
|
|
// Verify all Options of SelectBox
|
|
const { optionsInUi: types } = await verifySelectOptions(
|
|
{ selector: ".data-testid-field-type", nth: 0 },
|
|
["Email", "Long Text", "Multiple Selection", "Number", "Phone", "Single Selection", "Short Text"],
|
|
page
|
|
);
|
|
|
|
const nextFieldIndex = (await page.locator('[data-testid="field"]').count()) - 1;
|
|
|
|
if (form.field) {
|
|
await page.fill(`[data-testid="fields.${nextFieldIndex}.label"]`, form.field.label);
|
|
await page
|
|
.locator('[data-testid="field"]')
|
|
.nth(nextFieldIndex)
|
|
.locator(".data-testid-field-type")
|
|
.click();
|
|
await page
|
|
.locator('[data-testid="field"]')
|
|
.nth(nextFieldIndex)
|
|
.locator('[id*="react-select-"][aria-disabled]')
|
|
.nth(form.field.typeIndex)
|
|
.click();
|
|
}
|
|
await saveCurrentForm(page);
|
|
return {
|
|
types,
|
|
};
|
|
}
|
|
|
|
export async function saveCurrentForm(page: Page) {
|
|
await page.click('[data-testid="update-form"]');
|
|
await page.waitForSelector(".data-testid-toast-success");
|
|
}
|
|
|
|
export async function verifySelectOptions(
|
|
selector: { selector: string; nth: number },
|
|
expectedOptions: string[],
|
|
page: Page
|
|
) {
|
|
await page.locator(selector.selector).nth(selector.nth).click();
|
|
const selectOptions = await page
|
|
.locator(selector.selector)
|
|
.nth(selector.nth)
|
|
.locator('[id*="react-select-"][aria-disabled]')
|
|
.allInnerTexts();
|
|
|
|
const sortedSelectOptions = [...selectOptions].sort();
|
|
const sortedExpectedOptions = [...expectedOptions].sort();
|
|
expect(sortedSelectOptions).toEqual(sortedExpectedOptions);
|
|
return {
|
|
optionsInUi: selectOptions,
|
|
};
|
|
}
|