|
|
|
// playwright-dev-page.ts
|
|
|
|
import { expect, Locator } from "@playwright/test";
|
|
|
|
import BasePage from "../../Base";
|
|
|
|
import { DashboardPage } from "..";
|
|
|
|
// import clipboard from "clipboardy";
|
|
|
|
|
|
|
|
export class ExpandedFormPage extends BasePage {
|
|
|
|
readonly dashboard: DashboardPage;
|
|
|
|
readonly addNewTableButton: Locator;
|
|
|
|
readonly copyUrlButton: Locator;
|
|
|
|
readonly toggleCommentsButton: Locator;
|
|
|
|
|
|
|
|
constructor(dashboard: DashboardPage) {
|
|
|
|
super(dashboard.rootPage);
|
|
|
|
this.dashboard = dashboard;
|
|
|
|
this.addNewTableButton = this.dashboard.get().locator(".nc-add-new-table");
|
|
|
|
this.copyUrlButton = this.dashboard
|
|
|
|
.get()
|
|
|
|
.locator(".nc-copy-row-url:visible");
|
|
|
|
this.toggleCommentsButton = this.dashboard
|
|
|
|
.get()
|
|
|
|
.locator(".nc-toggle-comments:visible");
|
|
|
|
}
|
|
|
|
|
|
|
|
get() {
|
|
|
|
return this.dashboard.get().locator(`.nc-drawer-expanded-form`);
|
|
|
|
}
|
|
|
|
|
|
|
|
async fillField({
|
|
|
|
columnTitle,
|
|
|
|
value,
|
|
|
|
type = "text",
|
|
|
|
}: {
|
|
|
|
columnTitle: string;
|
|
|
|
value: string;
|
|
|
|
type?: string;
|
|
|
|
}) {
|
|
|
|
const field = this.get().locator(
|
|
|
|
`[pw-data="nc-expand-col-${columnTitle}"]`
|
|
|
|
);
|
|
|
|
await field.hover();
|
|
|
|
switch (type) {
|
|
|
|
case "text":
|
|
|
|
await field.locator("input").fill(value);
|
|
|
|
break;
|
|
|
|
case "belongsTo":
|
|
|
|
await field.locator(".nc-action-icon").click();
|
|
|
|
await this.dashboard.linkRecord.select(value);
|
|
|
|
break;
|
|
|
|
case "hasMany":
|
|
|
|
case "manyToMany":
|
|
|
|
await field.locator(`[data-cy="nc-child-list-button-link-to"]`).click();
|
|
|
|
await this.dashboard.linkRecord.select(value);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
async save({
|
|
|
|
waitForRowsData = true,
|
|
|
|
}: {
|
|
|
|
waitForRowsData?: boolean;
|
|
|
|
} = {}) {
|
|
|
|
const saveRowAction = this.get().locator('button:has-text("Save Row")').click();
|
|
|
|
if(waitForRowsData) {
|
|
|
|
await this.waitForResponse({
|
|
|
|
uiAction: saveRowAction,
|
|
|
|
requestUrlPathToMatch: 'api/v1/db/data/noco/',
|
|
|
|
httpMethodsToMatch: ['GET'],
|
|
|
|
responseJsonMatcher: (json) => json['pageInfo'],
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
await this.waitForResponse({
|
|
|
|
uiAction: saveRowAction,
|
|
|
|
requestUrlPathToMatch: 'api/v1/db/data/noco/',
|
|
|
|
httpMethodsToMatch: ['POST'],
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
await this.get().press("Escape");
|
|
|
|
await this.get().waitFor({ state: "hidden" });
|
|
|
|
await this.toastWait({ message: `updated successfully.` });
|
|
|
|
await this.rootPage
|
|
|
|
.locator('[pw-data="grid-load-spinner"]')
|
|
|
|
.waitFor({ state: "hidden" });
|
|
|
|
}
|
|
|
|
|
|
|
|
async verify({ header, url }: { header: string; url: string }) {
|
|
|
|
await expect(
|
|
|
|
await this.get().locator(`.nc-expanded-form-header`).last().innerText()
|
|
|
|
).toContain(header);
|
|
|
|
await expect(await this.rootPage.url()).toContain(url);
|
|
|
|
}
|
|
|
|
|
|
|
|
async close() {
|
|
|
|
await this.rootPage.keyboard.press("Escape");
|
|
|
|
}
|
|
|
|
|
|
|
|
async cancel() {
|
|
|
|
await this.get().locator('button:has-text("Cancel")').last().click();
|
|
|
|
}
|
|
|
|
|
|
|
|
// async getClipboardText() {
|
|
|
|
// const clipboard = (await import("clipboardy")).default;
|
|
|
|
// let clipText = await clipboard.read();
|
|
|
|
// console.log(clipText);
|
|
|
|
// return clipText;
|
|
|
|
// }
|
|
|
|
|
|
|
|
async openChildCard(param: { column: string; title: string }) {
|
|
|
|
let childList = await this.get().locator(
|
|
|
|
`[pw-data="nc-expand-col-${param.column}"]`
|
|
|
|
);
|
|
|
|
await childList.locator(`.ant-card:has-text("${param.title}")`).click();
|
|
|
|
}
|
|
|
|
|
|
|
|
async verifyCount({ count }: { count: number }) {
|
|
|
|
return await expect(this.rootPage
|
|
|
|
.locator(`.nc-drawer-expanded-form .ant-drawer-content`)).toHaveCount(count);
|
|
|
|
}
|
|
|
|
|
|
|
|
async validateRoleAccess(param: { role: string }) {
|
|
|
|
if (param.role === "commenter" || param.role === "viewer") {
|
|
|
|
await expect(
|
|
|
|
await this.get().locator('button:has-text("Save Row")')
|
|
|
|
).toBeDisabled();
|
|
|
|
} else {
|
|
|
|
await expect(
|
|
|
|
await this.get().locator('button:has-text("Save Row")')
|
|
|
|
).toBeEnabled();
|
|
|
|
}
|
|
|
|
if (param.role === "viewer") {
|
|
|
|
await expect(await this.toggleCommentsButton).toHaveCount(0);
|
|
|
|
} else {
|
|
|
|
await expect(await this.toggleCommentsButton).toHaveCount(1);
|
|
|
|
}
|
|
|
|
// press escape to close the expanded form
|
|
|
|
await this.rootPage.keyboard.press("Escape");
|
|
|
|
}
|
|
|
|
}
|