* chore: apps/[slug] remove pages router * remove apps/[slug] pages from /future * chore: apps/installed remove pages router * chore: apps/installation remove pages router * remove Head element * fix metadata * fix test * fix another test * chore: apps/categories remove pages router * revert unneeded changes * update middleware * Remove <Head> * remove unused import and code * remove unused import and code again * fix * fix category page * add split icon * add /routing paths to middleware matcher * wip * remove HeadSeo from App.tsx * clean up head-seo test * add generateAppMetadata * use generateAppMetadata in apps/[slug] page * delete file * remove log * fix * fix * fix apps/installed pages * fix cateogires pages * fix * fix imports * wip * fix * fix * fix metadata * fix * redirect /apps/routing-forms to /routing * replace all usages of /apps/routing-forms to /routing * better naming * /routing -> /routing/forms * fix * fix * fix * fix * remove backPath as it is irrelevant when withoutMain is true * fix type checks * fix type check in apps/[slug] * refactors * fix * fix test * fix * fix * fix * Replace multiple leading slashes with a single slash * migrate routing-forms too * add re routing * fix * add redirection --------- Co-authored-by: Peer Richelsen <peeroke@gmail.com> Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
98 lines
2.7 KiB
TypeScript
98 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",
|
|
forTeam,
|
|
}: {
|
|
name?: string;
|
|
forTeam?: boolean;
|
|
} = {}
|
|
) {
|
|
await page.goto(`/routing-forms/forms`);
|
|
await page.click('[data-testid="new-routing-form"]');
|
|
|
|
if (forTeam) {
|
|
await page.click('[data-testid="option-team-1"]');
|
|
} else {
|
|
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(`routing/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,
|
|
};
|
|
}
|