import { test } from "@playwright/test"; import { DashboardPage } from "../pages/Dashboard"; import { SettingTab } from "../pages/Dashboard/Settings"; import setup from "../setup"; import { FormPage } from "../pages/Dashboard/Form"; // todo: Move most of the ui actions to page object and await on the api response test.describe("Form view", () => { let dashboard: DashboardPage; let form: FormPage; let context: any; test.beforeEach(async ({ page }) => { context = await setup({ page }); dashboard = new DashboardPage(page, context.project); form = dashboard.form; }); test("Field re-order operations", async () => { // close 'Team & Auth' tab await dashboard.closeTab({ title: "Team & Auth" }); await dashboard.treeView.openTable({ title: "Country" }); await dashboard.viewSidebar.createFormView({ title: "CountryForm" }); await dashboard.viewSidebar.verifyView({ title: "CountryForm", index: 1 }); // verify form-view fields order await form.verifyFormViewFieldsOrder({ fields: ["Country", "LastUpdate", "City List"], }); // reorder & verify await form.reorderFields({ sourceField: "LastUpdate", destinationField: "Country", }); await form.verifyFormViewFieldsOrder({ fields: ["LastUpdate", "Country", "City List"], }); // remove & verify (drag-drop) await form.removeField({ field: "City List", mode: "dragDrop" }); await form.verifyFormViewFieldsOrder({ fields: ["LastUpdate", "Country"], }); // add & verify (drag-drop) await form.addField({ field: "City List", mode: "dragDrop" }); await form.verifyFormViewFieldsOrder({ fields: ["LastUpdate", "City List", "Country"], }); // remove & verify (hide field button) await form.removeField({ field: "City List", mode: "hideField" }); await form.verifyFormViewFieldsOrder({ fields: ["LastUpdate", "Country"], }); // add & verify (hide field button) await form.addField({ field: "City List", mode: "clickField" }); await form.verifyFormViewFieldsOrder({ fields: ["LastUpdate", "Country", "City List"], }); // remove-all & verify await form.removeAllFields(); await dashboard.rootPage.waitForTimeout(2000); await form.verifyFormViewFieldsOrder({ fields: ["Country"], }); // // add-all & verify await form.addAllFields(); await dashboard.rootPage.waitForTimeout(2000); await form.verifyFormViewFieldsOrder({ fields: ["LastUpdate", "Country", "City List"], }); }); test("Form elements validation", async () => { // close 'Team & Auth' tab await dashboard.closeTab({ title: "Team & Auth" }); await dashboard.treeView.openTable({ title: "Country" }); await dashboard.viewSidebar.createFormView({ title: "CountryForm" }); await dashboard.viewSidebar.verifyView({ title: "CountryForm", index: 1 }); await form.configureHeader({ title: "Country", subtitle: "Country subtitle", }); await form.verifyHeader({ title: "Country", subtitle: "Country subtitle", }); // configure field title & description await form.configureField({ field: "Country", label: "Country new title", helpText: "Country new description", required: true, }); await form.verifyFormFieldLabel({ index: 0, label: "Country new title", }); await form.verifyFormFieldHelpText({ index: 0, helpText: "Country new description", }); // revert configurations await form.configureField({ field: "Country", label: "Country", helpText: "", required: true, }); // retain only 'Country' field await form.removeAllFields(); // submit default form validation await form.fillForm([{ field: "Country", value: "_abc" }]); await form.submitForm(); await form.verifyStatePostSubmit({ message: "Successfully submitted form data", }); // submit custom form validation await dashboard.viewSidebar.openView({ title: "CountryForm" }); await form.configureSubmitMessage({ message: "Custom submit message", }); await form.fillForm([{ field: "Country", value: "_abc" }]); await form.submitForm(); await form.verifyStatePostSubmit({ message: "Custom submit message", }); // enable 'submit another form' option await dashboard.viewSidebar.openView({ title: "CountryForm" }); await form.showAnotherFormRadioButton.click(); await form.fillForm([{ field: "Country", value: "_abc" }]); await form.submitForm(); await dashboard.rootPage.waitForTimeout(2000); await form.verifyStatePostSubmit({ submitAnotherForm: true, }); await form.submitAnotherForm().click(); // enable 'show another form' option await form.showAnotherFormRadioButton.click(); await form.showAnotherFormAfter5SecRadioButton.click(); await form.fillForm([{ field: "Country", value: "_abc" }]); await form.fillForm([{ field: "Country", value: "_abc" }]); await form.submitForm(); await dashboard.rootPage.waitForTimeout(6000); await form.verifyStatePostSubmit({ showBlankForm: true, }); // enable 'email-me' option await form.showAnotherFormAfter5SecRadioButton.click(); await form.emailMeRadioButton.click(); await dashboard.verifyToast({ message: "Please activate SMTP plugin in App store for enabling email notification", }); // activate SMTP plugin await dashboard.gotoSettings(); await dashboard.settings.selectTab({ tab: SettingTab.AppStore }); await dashboard.settings.appStore.install({ name: "SMTP" }); await dashboard.settings.appStore.configureSMTP({ email: "a@b.com", host: "smtp.gmail.com", port: "587", }); await dashboard.verifyToast({ message: "Successfully installed and email notification will use SMTP configuration", }); await dashboard.settings.close(); // enable 'email-me' option await dashboard.viewSidebar.openView({ title: "CountryForm" }); await form.emailMeRadioButton.click(); await form.verifyAfterSubmitMenuState({ emailMe: true, submitAnotherForm: false, showBlankForm: false, }); // reset SMTP await dashboard.gotoSettings(); await dashboard.settings.selectTab({ tab: SettingTab.AppStore }); await dashboard.settings.appStore.uninstall({ name: "SMTP" }); await dashboard.verifyToast({ message: "Plugin uninstalled successfully", }); await dashboard.settings.close(); }); });