多维表格
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

145 lines
4.1 KiB

import { Locator, expect } from "@playwright/test";
import BasePage from "../../../Base";
import { GridPage } from "../../Grid";
import { ToolbarPage } from "./index";
// @ts-ignore
import fs from "fs";
export class ToolbarViewMenuPage extends BasePage {
readonly toolbar: ToolbarPage;
readonly viewsMenuBtn: Locator;
constructor(toolbar: ToolbarPage) {
super(toolbar.rootPage);
this.toolbar = toolbar;
this.viewsMenuBtn = this.toolbar.get().locator(`.nc-actions-menu-btn`);
}
get() {
return this.rootPage.locator(`.ant-dropdown.nc-dropdown-actions-menu`);
}
getLockTypeSubMenu() {
return this.rootPage.locator(`[id="sub_menu_1_$$_lock-type-popup"]`);
}
async verifyDownloadAsCSV({
downloadLocator,
expectedDataFile,
}: {
downloadLocator: Locator;
expectedDataFile: string;
}) {
const [download] = await Promise.all([
// Start waiting for the download
this.rootPage.waitForEvent("download"),
// Perform the action that initiates download
downloadLocator.click(),
]);
// Save downloaded file somewhere
await download.saveAs("./output/at.txt");
// verify downloaded content against expected content
const expectedData = fs.readFileSync(expectedDataFile, "utf8");
const file = fs.readFileSync("./output/at.txt", "utf8");
await expect(file).toEqual(expectedData);
}
// menu items
// Collaborative View
// Download
// Upload
// Shared View List
// Webhooks
// Get API Snippet
// ERD View
async click({ menu, subMenu }: { menu: string; subMenu?: string }) {
await this.viewsMenuBtn.click();
await this.get()
.locator(`.ant-dropdown-menu-title-content:has-text("${menu}")`)
.first()
.click();
if (subMenu) {
// for CSV download, pass locator instead of clicking it here
if (subMenu === "Download as CSV") {
await this.verifyDownloadAsCSV({
downloadLocator: await this.rootPage
.locator(`.ant-dropdown-menu-title-content:has-text("${subMenu}")`)
.last(),
expectedDataFile: "./fixtures/expectedBaseDownloadData.txt",
});
} else {
await this.rootPage
.locator(`.ant-dropdown-menu-title-content:has-text("${subMenu}")`)
.last()
.click();
}
switch (subMenu) {
case "Download as CSV":
await this.toastWait({
message: "Successfully exported all table data",
});
break;
case "Locked View":
await this.toastWait({
message: "Successfully Switched to locked view",
});
break;
case "Collaborative View":
await this.toastWait({
message: "Successfully Switched to collaborative view",
});
break;
default:
break;
}
}
await this.toolbar.parent.waitLoading();
}
async verifyLockMode() {
await expect(
await this.toolbar.get().locator(`.nc-fields-menu-btn.nc-toolbar-btn`)
).toBeDisabled();
await expect(
await this.toolbar.get().locator(`.nc-filter-menu-btn.nc-toolbar-btn`)
).toBeDisabled();
await expect(
await this.toolbar.get().locator(`.nc-sort-menu-btn.nc-toolbar-btn`)
).toBeDisabled();
await expect(
await this.toolbar
.get()
.locator(`.nc-add-new-row-btn.nc-toolbar-btn > .nc-icon.disabled`)
).toBeVisible();
await (this.toolbar.parent as GridPage).verifyEditDisabled({
columnHeader: "Country",
});
}
async verifyCollaborativeMode() {
await expect(
await this.toolbar.get().locator(`.nc-fields-menu-btn.nc-toolbar-btn`)
).toBeEnabled();
await expect(
await this.toolbar.get().locator(`.nc-filter-menu-btn.nc-toolbar-btn`)
).toBeEnabled();
await expect(
await this.toolbar.get().locator(`.nc-sort-menu-btn.nc-toolbar-btn`)
).toBeEnabled();
await expect(
await this.toolbar
.get()
.locator(`.nc-add-new-row-btn.nc-toolbar-btn > .nc-icon`)
).toBeVisible();
await (this.toolbar.parent as GridPage).verifyEditEnabled({
columnHeader: "Country",
});
}
}