- Because of parallel test execution, some tests were flaky when using goToGridDoc, the title changed between the time we got the document list and the time we clicked on the document. - Improve addChild function.
152 lines
5.0 KiB
TypeScript
152 lines
5.0 KiB
TypeScript
import { expect, test } from '@playwright/test';
|
|
|
|
import {
|
|
clickInEditorMenu,
|
|
clickInGridMenu,
|
|
createDoc,
|
|
getGridRow,
|
|
verifyDocName,
|
|
} from './utils-common';
|
|
import { addNewMember } from './utils-share';
|
|
import {
|
|
addChild,
|
|
createRootSubPage,
|
|
navigateToPageFromTree,
|
|
} from './utils-sub-pages';
|
|
|
|
test.beforeEach(async ({ page }) => {
|
|
await page.goto('/');
|
|
});
|
|
|
|
test.describe('Doc Trashbin', () => {
|
|
test('it controls UI and interaction from the grid page', async ({
|
|
page,
|
|
browserName,
|
|
}) => {
|
|
const [title1] = await createDoc(page, 'my-trash-doc-1', browserName, 1);
|
|
const [title2] = await createDoc(page, 'my-trash-doc-2', browserName, 1);
|
|
await verifyDocName(page, title2);
|
|
await page.getByRole('button', { name: 'Share' }).click();
|
|
await addNewMember(page, 0, 'Editor');
|
|
await page.getByRole('button', { name: 'close' }).click();
|
|
|
|
await page.getByRole('button', { name: 'Back to homepage' }).click();
|
|
|
|
const row1 = await getGridRow(page, title1);
|
|
await clickInGridMenu(page, row1, 'Delete');
|
|
await page.getByRole('button', { name: 'Delete document' }).click();
|
|
await expect(row1.getByText(title1)).toBeHidden();
|
|
|
|
const row2 = await getGridRow(page, title2);
|
|
await clickInGridMenu(page, row2, 'Delete');
|
|
await page.getByRole('button', { name: 'Delete document' }).click();
|
|
await expect(row2.getByText(title2)).toBeHidden();
|
|
|
|
await page.getByRole('link', { name: 'Trashbin' }).click();
|
|
|
|
const docsGrid = page.getByTestId('docs-grid');
|
|
await expect(docsGrid.getByText('Days remaining')).toBeVisible();
|
|
await expect(row1.getByText(title1)).toBeVisible();
|
|
await expect(row1.getByText('30 days')).toBeVisible();
|
|
await expect(row2.getByText(title2)).toBeVisible();
|
|
await expect(
|
|
row2.getByRole('button', {
|
|
name: 'Open the sharing settings for the document',
|
|
}),
|
|
).toBeVisible();
|
|
await expect(
|
|
row2.getByRole('button', {
|
|
name: 'Open the sharing settings for the document',
|
|
}),
|
|
).toBeDisabled();
|
|
|
|
await clickInGridMenu(page, row2, 'Restore');
|
|
|
|
await expect(row2.getByText(title2)).toBeHidden();
|
|
await page.getByRole('link', { name: 'All docs' }).click();
|
|
const row2Restored = await getGridRow(page, title2);
|
|
await expect(row2Restored.getByText(title2)).toBeVisible();
|
|
await row2Restored.getByRole('link', { name: /Open document/ }).click();
|
|
|
|
await verifyDocName(page, title2);
|
|
await page.getByRole('button', { name: 'Back to homepage' }).click();
|
|
await expect(row2.getByText(title2)).toBeVisible();
|
|
await expect(
|
|
row2.getByRole('button', {
|
|
name: 'Open the sharing settings for the document',
|
|
}),
|
|
).toBeEnabled();
|
|
|
|
await page.getByRole('link', { name: 'Trashbin' }).click();
|
|
await expect(row2.getByText(title2)).toBeHidden();
|
|
});
|
|
|
|
test('it controls UI and interaction from the doc page', async ({
|
|
page,
|
|
browserName,
|
|
}) => {
|
|
const [topParent] = await createDoc(
|
|
page,
|
|
'my-trash-editor-doc',
|
|
browserName,
|
|
1,
|
|
);
|
|
await verifyDocName(page, topParent);
|
|
const { name: subDocName } = await createRootSubPage(
|
|
page,
|
|
browserName,
|
|
'my-trash-editor-subdoc',
|
|
);
|
|
|
|
const subsubDocName = await addChild({
|
|
page,
|
|
browserName,
|
|
docParent: subDocName,
|
|
docName: 'my-trash-editor-subsubdoc',
|
|
});
|
|
await verifyDocName(page, subsubDocName);
|
|
|
|
await navigateToPageFromTree({ page, title: subDocName });
|
|
await verifyDocName(page, subDocName);
|
|
|
|
await clickInEditorMenu(page, 'Delete sub-document');
|
|
await page.getByRole('button', { name: 'Delete document' }).click();
|
|
await verifyDocName(page, topParent);
|
|
|
|
await page.getByRole('button', { name: 'Back to homepage' }).click();
|
|
await page.getByRole('link', { name: 'Trashbin' }).click();
|
|
const row = await getGridRow(page, subDocName);
|
|
await row.getByText(subDocName).click();
|
|
await verifyDocName(page, subDocName);
|
|
|
|
await expect(page.getByLabel('Alert deleted document')).toBeVisible();
|
|
await expect(page.getByRole('button', { name: 'Share' })).toBeDisabled();
|
|
await expect(page.locator('.bn-editor')).toHaveAttribute(
|
|
'contenteditable',
|
|
'false',
|
|
);
|
|
const docTree = page.getByTestId('doc-tree');
|
|
await expect(docTree.getByText(topParent)).toBeHidden();
|
|
await expect(
|
|
docTree.getByText(subDocName, {
|
|
exact: true,
|
|
}),
|
|
).toBeVisible();
|
|
await expect(docTree.getByText(subsubDocName)).toBeVisible();
|
|
await expect(
|
|
docTree
|
|
.locator(".--docs-sub-page-item[aria-disabled='true']")
|
|
.getByText(subsubDocName),
|
|
).toBeVisible();
|
|
|
|
await page.getByRole('button', { name: 'Restore' }).click();
|
|
await expect(page.getByLabel('Alert deleted document')).toBeHidden();
|
|
await expect(page.locator('.bn-editor')).toHaveAttribute(
|
|
'contenteditable',
|
|
'true',
|
|
);
|
|
await expect(page.getByRole('button', { name: 'Share' })).toBeEnabled();
|
|
await expect(docTree.getByText(topParent)).toBeVisible();
|
|
});
|
|
});
|