多维表格
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.
 
 
 
 
 
 

156 lines
5.3 KiB

import { expect } from '@playwright/test';
import { DashboardPage } from '../..';
import BasePage from '../../../Base';
import { TiptapPage } from './Tiptap';
import { DocsHistoryPage } from './History';
export class DocsOpenedPagePage extends BasePage {
readonly dashboard: DashboardPage;
readonly tiptap: TiptapPage;
readonly history: DocsHistoryPage;
constructor(dashboard: DashboardPage) {
super(dashboard.rootPage);
this.dashboard = dashboard;
this.tiptap = new TiptapPage(this);
this.history = new DocsHistoryPage(this);
}
get() {
return this.dashboard.get().getByTestId('docs-opened-page');
}
async waitForRender() {
await this.get().waitFor({ state: 'visible' });
await this.get().getByTestId('docs-page-title').waitFor({ state: 'visible' });
await this.get()
.getByTestId('docs-page-title')
.elementHandle()
.then(async el => {
await el?.waitForElementState('stable');
});
}
async fillTitle({ title }: { title: string }) {
await this.waitForRender();
await this.get().getByTestId('docs-page-title').click();
await this.get().getByTestId('docs-page-title').press('Meta+A');
await this.get().getByTestId('docs-page-title').press('Backspace');
await this.waitForResponse({
uiAction: () => this.get().getByTestId('docs-page-title').type(title, { delay: 0 }),
httpMethodsToMatch: ['PUT'],
requestUrlPathToMatch: `api/v1/docs/page`,
});
}
async verifyTitle({ title }: { title: string }) {
await expect.poll(() => this.get().getByTestId('docs-page-title').inputValue()).toBe(title);
}
async verifyPageOutlineOpened({ isOpened }: { isOpened: boolean }) {
if (isOpened) {
await expect(this.rootPage.getByTestId('docs-page-outline-toggle')).toBeVisible();
await expect(this.rootPage.getByTestId('docs-page-outline-toggle')).toHaveAttribute('aria-expanded', 'true');
await expect(this.rootPage.getByTestId('docs-page-outline-content')).toBeVisible();
} else {
await expect(this.rootPage.getByTestId('docs-page-outline-toggle')).toBeVisible();
await expect(this.rootPage.getByTestId('docs-page-outline-toggle')).toHaveAttribute('aria-expanded', 'false');
await expect(this.rootPage.getByTestId('docs-page-outline-content')).not.toBeVisible();
}
}
async verifyOpenedPageVisible() {
await expect(this.get()).toBeVisible();
}
async selectEmoji({ emoji }: { emoji: string }) {
await this.get().getByTestId('nc-doc-opened-page-icon-picker').hover();
await this.get().getByTestId('nc-doc-opened-page-icon-picker').click();
await this.rootPage.getByTestId('nc-emoji-filter').last().type(emoji);
await this.rootPage.waitForTimeout(500);
await this.waitForResponse({
uiAction: () =>
this.rootPage.getByTestId('nc-emoji-container').last().locator(`.nc-emoji-item >> svg`).first().click(),
httpMethodsToMatch: ['PUT'],
requestUrlPathToMatch: `api/v1/docs/page`,
});
}
async verifyTitleEmoji({ emoji }: { emoji: string }) {
await expect(
this.get().getByTestId('docs-page-title-wrapper').getByTestId(`nc-doc-page-icon-emojione:${emoji}`)
).toBeVisible();
}
async verifyChildPage({ title }: { title: string }) {
await this.get()
.locator('.docs-page-child-pages')
.locator(`.docs-page-child-page >> text=${title}`)
.scrollIntoViewIfNeeded();
await expect(
this.get().locator('.docs-page-child-pages').locator(`.docs-page-child-page >> text=${title}`)
).toBeVisible();
}
async verifyChildPagesNotVisible() {
await expect(this.get().locator('.docs-page-child-pages')).not.toBeVisible();
}
async verifyTitleIsReadOnly({ editable }: { editable: boolean }) {
await expect(this.get().getByTestId('docs-page-title')).toBeEditable({
editable: editable,
});
}
async verifyContentIsReadOnly({ editable }: { editable: boolean }) {
await expect(this.get().getByTestId('docs-page-content').locator('.ProseMirror')).toHaveAttribute(
'contenteditable',
editable ? 'true' : 'false'
);
}
async togglePageOutline() {
await this.rootPage.getByTestId('docs-page-outline-toggle').click();
}
async verifyPageOutline({ pages }: { pages: { title: string; active?: boolean; level?: number }[] }) {
for (let index = 0; index < pages.length; index++) {
const { title, active, level } = pages[index];
await expect(this.rootPage.getByTestId(`docs-page-outline-subheading-${index}`)).toHaveText(title);
if (active) {
await expect(this.rootPage.getByTestId(`docs-page-outline-subheading-${index}`)).toHaveAttribute(
'aria-current',
'page'
);
}
if (level) {
await expect(this.rootPage.getByTestId(`docs-page-outline-subheading-${index}`)).toHaveAttribute(
'aria-level',
level.toString()
);
}
}
}
async verifyBreadcrumb({ pages }: { pages: { title: string; emoji?: string }[] }) {
for (let index = 0; index < pages.length; index++) {
const { title, emoji } = pages[index];
await expect(this.get().getByTestId(`nc-doc-page-breadcrumb-${index}`)).toHaveText(title);
if (emoji) {
await expect(
this.get().getByTestId(`nc-doc-page-breadcrumb-${index}`).getByTestId(`nc-doc-page-icon-emojione:${emoji}`)
).toBeVisible();
}
}
}
}