123 lines
4.5 KiB
TypeScript
123 lines
4.5 KiB
TypeScript
import {Page} from '@playwright/test';
|
|
|
|
import {WorkbookPageQa} from '../../../src/shared/constants/qa/workbooks';
|
|
import {createSharedEntry, openTestPage, slct} from '../../utils';
|
|
import {WorkbooksUrls} from '../../constants/constants';
|
|
import DashboardPage from '../../page-objects/dashboard/DashboardPage';
|
|
|
|
import {ActionsMoreDropdown} from './ActionsMoreDropdown';
|
|
import {CreateEntryButton} from './CreateEntryButton';
|
|
import {DialogCreateEntry} from './DialogCreateEntry';
|
|
import {DialogDeleteWorkbook} from './DialogDeleteWorkbook';
|
|
import {DialogWorkbook} from './DialogWorkbook';
|
|
import {EditEntityButton} from './EditEntityButton';
|
|
import {FiltersPO} from './Filters';
|
|
import {NavigationMinimalPopup} from './NavigationMinimalPopup';
|
|
import {DialogCollectionStructure} from './DialogCollectionStructure';
|
|
import {
|
|
DashEntryQa,
|
|
EntryScope,
|
|
SharedEntriesAddFromLinkDialogQa,
|
|
SharedEntriesSelectDialogQa,
|
|
} from '../../../src/shared';
|
|
|
|
export class Workbook {
|
|
actionsMoreDropdown: ActionsMoreDropdown;
|
|
createEntryButton: CreateEntryButton;
|
|
dashboardPage: DashboardPage;
|
|
dialogCreateEntry: DialogCreateEntry;
|
|
dialogDeleteWorkbook: DialogDeleteWorkbook;
|
|
dialogWorkbook: DialogWorkbook;
|
|
dialogCollectionStructure: DialogCollectionStructure;
|
|
editEntityButton: EditEntityButton;
|
|
navigationMinimalPopup: NavigationMinimalPopup;
|
|
|
|
protected page: Page;
|
|
private readonly root = '.dl-collections-navigation-layout';
|
|
|
|
constructor(page: Page) {
|
|
this.page = page;
|
|
|
|
this.actionsMoreDropdown = new ActionsMoreDropdown(page);
|
|
this.createEntryButton = new CreateEntryButton(page);
|
|
this.dashboardPage = new DashboardPage({page});
|
|
this.dialogCreateEntry = new DialogCreateEntry(page);
|
|
this.dialogDeleteWorkbook = new DialogDeleteWorkbook(page);
|
|
this.dialogWorkbook = new DialogWorkbook(page);
|
|
this.editEntityButton = new EditEntityButton(page);
|
|
this.navigationMinimalPopup = new NavigationMinimalPopup(page);
|
|
this.dialogCollectionStructure = new DialogCollectionStructure(page);
|
|
}
|
|
|
|
get filters() {
|
|
return new FiltersPO({page: this.page, parent: this.root});
|
|
}
|
|
|
|
async checkWorkbookPage() {
|
|
await this.page.waitForSelector(slct(WorkbookPageQa.Layout));
|
|
}
|
|
|
|
async openE2EWorkbookPage() {
|
|
await openTestPage(this.page, WorkbooksUrls.E2EWorkbook);
|
|
}
|
|
|
|
async openWorkbookItemMenu(dashId: string) {
|
|
const listItem = this.page.locator(
|
|
`${slct(WorkbookPageQa.ListItem)} ${slct(dashId.replace('/', ''))}`,
|
|
);
|
|
await listItem.focus();
|
|
|
|
const menuDropDownBtn = listItem
|
|
.locator('..')
|
|
.locator(`${slct(WorkbookPageQa.MenuDropDownBtn)}`);
|
|
|
|
await menuDropDownBtn.focus();
|
|
await menuDropDownBtn.click();
|
|
}
|
|
|
|
async findFirstItemByScope(scope: string, isSharedEntry = false) {
|
|
const chunk = isSharedEntry
|
|
? this.page.locator(slct(`${WorkbookPageQa.ChunkSharedEntryScope}${scope}`))
|
|
: this.page.locator(slct(`${WorkbookPageQa.ChunkScope}${scope}`));
|
|
|
|
return chunk.locator(slct(WorkbookPageQa.ListItem)).first();
|
|
}
|
|
|
|
async clickFirstDashboard() {
|
|
const firstDashboard = await this.findFirstItemByScope('dash');
|
|
|
|
const dashName = await firstDashboard
|
|
.locator(slct(WorkbookPageQa.ListItemName))
|
|
.textContent();
|
|
|
|
await firstDashboard.click();
|
|
|
|
// check that the dashboard has loaded by its name
|
|
await this.page.waitForSelector(`${slct(DashEntryQa.EntryName)} >> text=${dashName}`);
|
|
}
|
|
|
|
async addSharedEntryFromLinkIntoWorkbook({
|
|
scope,
|
|
entryUrl,
|
|
}: {
|
|
scope: EntryScope.Dataset | EntryScope.Connection;
|
|
entryUrl: string;
|
|
}) {
|
|
await this.createEntryButton.waitForVisible();
|
|
await this.createEntryButton.click();
|
|
await createSharedEntry({page: this.page, scope});
|
|
const pasteLinkBtn = await this.page.waitForSelector(
|
|
slct(SharedEntriesSelectDialogQa.PastLinkToEntryBtn),
|
|
);
|
|
await pasteLinkBtn.click();
|
|
const textInput = this.page
|
|
.locator(slct(SharedEntriesAddFromLinkDialogQa.LintTextInput))
|
|
.locator('input');
|
|
await textInput.press('Meta+A');
|
|
await textInput.press('Backspace');
|
|
await textInput.fill(entryUrl);
|
|
const addLinkApplyBtn = this.page.locator(slct(SharedEntriesAddFromLinkDialogQa.ApplyBtn));
|
|
await addLinkApplyBtn.click();
|
|
}
|
|
}
|