|
|
|
import { Page, expect } from "@playwright/test";
|
|
|
|
import { GridPage } from "..";
|
|
|
|
import BasePage from "../../../Base";
|
|
|
|
import {SelectOptionColumnPageObject} from "./SelectOptionColumn";
|
|
|
|
|
|
|
|
export class ColumnPageObject extends BasePage {
|
|
|
|
readonly grid: GridPage;
|
|
|
|
readonly selectOption: SelectOptionColumnPageObject;
|
|
|
|
|
|
|
|
constructor(grid: GridPage) {
|
|
|
|
super(grid.rootPage);
|
|
|
|
this.grid = grid;
|
|
|
|
this.selectOption = new SelectOptionColumnPageObject(this);
|
|
|
|
}
|
|
|
|
|
|
|
|
get() {
|
|
|
|
return this.rootPage.locator('form[data-pw="add-or-edit-column"]');
|
|
|
|
}
|
|
|
|
|
|
|
|
async create({title, type = "SingleLineText"}: {title: string, type?: string}) {
|
|
|
|
await this.grid.get().locator('.nc-column-add').click();
|
|
|
|
// await this.get().waitFor();
|
|
|
|
|
|
|
|
await this.fillTitle({title});
|
|
|
|
|
|
|
|
await this.selectType({type});
|
|
|
|
|
|
|
|
switch (type) {
|
|
|
|
case "SingleTextLine":
|
|
|
|
break;
|
|
|
|
case 'SingleSelect':
|
|
|
|
case 'MultiSelect':
|
|
|
|
await this.selectOption.addOption({index: 0, option: 'Option 1', skipColumnModal: true});
|
|
|
|
await this.selectOption.addOption({index: 1, option: 'Option 2', skipColumnModal: true});
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
await this.save();
|
|
|
|
}
|
|
|
|
|
|
|
|
async fillTitle({title}: {title: string}) {
|
|
|
|
await this.get().locator('.nc-column-name-input').fill(title);
|
|
|
|
}
|
|
|
|
|
|
|
|
async selectType({type}: {type: string}) {
|
|
|
|
await this.get().locator('.ant-select-selector > .ant-select-selection-item').click();
|
|
|
|
|
|
|
|
await this.get().locator('.ant-select-selection-search-input[aria-expanded="true"]').waitFor();
|
|
|
|
await this.get().locator('.ant-select-selection-search-input[aria-expanded="true"]').fill(type);
|
|
|
|
|
|
|
|
// Select column type
|
|
|
|
await this.rootPage.locator(`text=${type}`).nth(1).click();
|
|
|
|
}
|
|
|
|
|
|
|
|
async delete({title}: {title: string}) {
|
|
|
|
await this.grid.get().locator(`th[data-title="${title}"] >> svg.ant-dropdown-trigger`).click();
|
|
|
|
// await this.rootPage.locator('li[role="menuitem"]:has-text("Delete")').waitFor();
|
|
|
|
await this.rootPage.locator('li[role="menuitem"]:has-text("Delete")').click();
|
|
|
|
|
|
|
|
await this.rootPage.locator('button:has-text("Delete")').click();
|
|
|
|
|
|
|
|
// wait till modal is closed
|
|
|
|
await this.rootPage.locator('.nc-modal-column-delete').waitFor({state: 'hidden'});
|
|
|
|
}
|
|
|
|
|
|
|
|
async openEdit({title}: {title: string}) {
|
|
|
|
// todo: Improve this selector
|
|
|
|
await this.grid.get().locator(`text=#Title${title} >> svg >> nth=3`).click();
|
|
|
|
await this.rootPage.locator('li[role="menuitem"]:has-text("Edit")').click();
|
|
|
|
|
|
|
|
await this.get().waitFor({state: 'visible'});
|
|
|
|
}
|
|
|
|
|
|
|
|
async save({isUpdated}: {isUpdated?: boolean} = {}) {
|
|
|
|
await this.get().locator('button:has-text("Save")').click();
|
|
|
|
|
|
|
|
await this.toastWait({message: isUpdated ? 'Column updated' : 'Column created'});
|
|
|
|
await this.get().waitFor({state: 'hidden'});
|
|
|
|
await this.rootPage.waitForTimeout(200);
|
|
|
|
}
|
|
|
|
|
|
|
|
async verify({title, isDeleted}: {title: string, isDeleted?: boolean}) {
|
|
|
|
if(isDeleted) {
|
|
|
|
return expect(await this.rootPage.locator(`th[data-title="${title}"]`).count()).toBe(0);
|
|
|
|
}
|
|
|
|
await expect(this.rootPage.locator(`th[data-title="${title}"]`)).toHaveText(title);
|
|
|
|
}
|
|
|
|
}
|