2025-10-03 12:45:25 +02:00
|
|
|
import { expect, test } from '@playwright/test';
|
|
|
|
|
|
|
|
|
|
import {
|
2025-10-08 17:14:35 +02:00
|
|
|
clickInEditorMenu,
|
2025-10-03 12:45:25 +02:00
|
|
|
clickInGridMenu,
|
|
|
|
|
createDoc,
|
|
|
|
|
getGridRow,
|
|
|
|
|
verifyDocName,
|
|
|
|
|
} from './utils-common';
|
|
|
|
|
import { addNewMember } from './utils-share';
|
2025-10-08 17:14:35 +02:00
|
|
|
import {
|
|
|
|
|
addChild,
|
|
|
|
|
createRootSubPage,
|
|
|
|
|
navigateToPageFromTree,
|
|
|
|
|
} from './utils-sub-pages';
|
2025-10-03 12:45:25 +02:00
|
|
|
|
|
|
|
|
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();
|
2025-10-03 12:45:55 +02:00
|
|
|
await expect(row1.getByText(title1)).toBeHidden();
|
2025-10-03 12:45:25 +02:00
|
|
|
|
|
|
|
|
const row2 = await getGridRow(page, title2);
|
|
|
|
|
await clickInGridMenu(page, row2, 'Delete');
|
|
|
|
|
await page.getByRole('button', { name: 'Delete document' }).click();
|
2025-10-03 12:45:55 +02:00
|
|
|
await expect(row2.getByText(title2)).toBeHidden();
|
2025-10-03 12:45:25 +02:00
|
|
|
|
|
|
|
|
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();
|
2025-10-03 12:45:55 +02:00
|
|
|
|
|
|
|
|
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();
|
2025-10-03 12:45:25 +02:00
|
|
|
});
|
2025-10-08 17:14:35 +02:00
|
|
|
|
|
|
|
|
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,
|
2025-10-17 22:44:35 +02:00
|
|
|
docName: 'my-trash-editor-subsubdoc',
|
2025-10-08 17:14:35 +02:00
|
|
|
});
|
|
|
|
|
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();
|
|
|
|
|
});
|
2025-10-03 12:45:25 +02:00
|
|
|
});
|