diff --git a/apps/web/e2e/markdown.spec.ts b/apps/web/e2e/markdown.spec.ts index 6312d96..2b8549d 100644 --- a/apps/web/e2e/markdown.spec.ts +++ b/apps/web/e2e/markdown.spec.ts @@ -117,7 +117,15 @@ test('page menu downloads the page as Markdown matching its content', async ({ b await enterEditMode(page); await page.locator('.ProseMirror').click(); await page.keyboard.type('export me please'); - await expect(page.getByRole('status')).toHaveText(/saved|gespeichert/i, { timeout: 10000 }); + + // There is no "saved" status since #36 (collab autosaves continuously) — + // poll the export endpoint until the typed content has been persisted. + await expect + .poll( + async () => (await context.request.get(`/api/v1/pages/${pageId}/export/markdown`)).text(), + { timeout: 10000 }, + ) + .toBe('export me please'); const exported = await context.request.get(`/api/v1/pages/${pageId}/export/markdown`); expect(exported.headers()['content-disposition']).toContain(`${pageSlug}.md`); diff --git a/apps/web/e2e/trash.spec.ts b/apps/web/e2e/trash.spec.ts index 3aa7102..ab230c2 100644 --- a/apps/web/e2e/trash.spec.ts +++ b/apps/web/e2e/trash.spec.ts @@ -43,7 +43,9 @@ test('deleting a page hides it from the sidebar and shows a trash hint on direct await page.goto(`/p/${pondSlug}/${pageSlug}`); await page.getByRole('button', { name: /edit|bearbeiten/i }).click(); - await page.getByRole('button', { name: /move to trash|papierkorb verschieben/i }).click(); + // Delete sits behind the TopBar overflow menu since #101. + await page.getByRole('button', { name: /more actions|weitere aktionen/i }).click(); + await page.getByRole('menuitem', { name: /move to trash|papierkorb verschieben/i }).click(); // Deleting navigates away; going back to the same URL now 404s with a hint. await page.goto(`/p/${pondSlug}/${pageSlug}`); @@ -64,7 +66,9 @@ test('restoring a page from the trash brings it back', async ({ browser }) => { await page.goto(`/p/${pondSlug}/${pageSlug}`); await page.getByRole('button', { name: /edit|bearbeiten/i }).click(); - await page.getByRole('button', { name: /move to trash|papierkorb verschieben/i }).click(); + // Delete sits behind the TopBar overflow menu since #101. + await page.getByRole('button', { name: /more actions|weitere aktionen/i }).click(); + await page.getByRole('menuitem', { name: /move to trash|papierkorb verschieben/i }).click(); await page.goto(`/p/${pondSlug}/trash`); const item = trashItem(page, title); @@ -87,7 +91,9 @@ test('purging a page from the trash removes it for good', async ({ browser }) => await page.goto(`/p/${pondSlug}/${pageSlug}`); await page.getByRole('button', { name: /edit|bearbeiten/i }).click(); - await page.getByRole('button', { name: /move to trash|papierkorb verschieben/i }).click(); + // Delete sits behind the TopBar overflow menu since #101. + await page.getByRole('button', { name: /more actions|weitere aktionen/i }).click(); + await page.getByRole('menuitem', { name: /move to trash|papierkorb verschieben/i }).click(); await page.goto(`/p/${pondSlug}/trash`); const item = trashItem(page, title); diff --git a/apps/web/src/layout/Sidebar.tsx b/apps/web/src/layout/Sidebar.tsx index 92b2132..3bc62d8 100644 --- a/apps/web/src/layout/Sidebar.tsx +++ b/apps/web/src/layout/Sidebar.tsx @@ -126,16 +126,6 @@ export function Sidebar({ collapsed }: SidebarProps): React.JSX.Element { ))} )} - {isOwner && ( - - {tLabels('link')} - - )} - {isOwner && ( - - {t('editor:trash.link')} - - )} {flat.length > 0 && ( @@ -282,6 +272,16 @@ export function Sidebar({ collapsed }: SidebarProps): React.JSX.Element {
{announcement}
+ + {/* The trash stays a text link, pinned to the sidebar's bottom + (M10 follow-up; pond settings moved to the TopBar gear icon). */} + {isOwner && ( +