diff --git a/src/frontend/apps/e2e/__tests__/app-impress/presenter-mode.spec.ts b/src/frontend/apps/e2e/__tests__/app-impress/presenter-mode.spec.ts index d426e2158..4bb4f0806 100644 --- a/src/frontend/apps/e2e/__tests__/app-impress/presenter-mode.spec.ts +++ b/src/frontend/apps/e2e/__tests__/app-impress/presenter-mode.spec.ts @@ -15,6 +15,9 @@ import { writeInEditor, } from './utils-editor'; +const dividerHintText = + 'You can use the divider to tell Docs where to split your slides'; + const openPresenter = async (page: Page) => { await page.getByLabel('Open the document options').click(); await page.getByRole('menuitem', { name: 'Present' }).click(); @@ -151,6 +154,36 @@ test.describe('Presenter Mode', () => { await expect(overlay).toBeHidden(); }); + test('shows and dismisses the divider hint on the title slide', async ({ + page, + browserName, + }) => { + await createDoc(page, 'presenter-divider-hint', browserName, 1); + await writeInEditor({ page, text: 'Hello presenter' }); + + const overlay = await openPresenter(page); + + await expect(overlay.getByText(dividerHintText)).toBeVisible(); + await overlay.getByRole('button', { name: /^Close$/ }).click(); + await expect(overlay.getByText(dividerHintText)).toBeHidden(); + + await overlay.getByRole('button', { name: 'Next slide' }).click(); + await overlay.getByRole('button', { name: 'Previous slide' }).click(); + await expect(overlay.getByText(dividerHintText)).toBeHidden(); + }); + + test('hides the divider hint when the document already has a divider', async ({ + page, + browserName, + }) => { + await createDoc(page, 'presenter-divider-hint-hidden', browserName, 1); + await writeMultiSlideDoc(page); + + const overlay = await openPresenter(page); + + await expect(overlay.getByText(dividerHintText)).toBeHidden(); + }); + test('moves focus onto the first available control when opened', async ({ page, browserName, diff --git a/src/frontend/apps/impress/src/features/docs/doc-presenter/__tests__/useSlides.spec.ts b/src/frontend/apps/impress/src/features/docs/doc-presenter/__tests__/useSlides.spec.ts index ffcdb109b..74eb60702 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-presenter/__tests__/useSlides.spec.ts +++ b/src/frontend/apps/impress/src/features/docs/doc-presenter/__tests__/useSlides.spec.ts @@ -3,6 +3,7 @@ import { describe, expect, test } from 'vitest'; import { getContentSlideIndexForBlock, getSlideTitle, + hasDividerBlock, splitBlocksIntoSlides, } from '../hooks/useSlides'; @@ -195,6 +196,23 @@ describe('splitBlocksIntoSlides', () => { }); }); +describe('hasDividerBlock', () => { + test('returns false when the document has no divider', () => { + expect(hasDividerBlock([para('a'), para('b')])).toBe(false); + }); + + test('detects dividers nested in the block tree', () => { + const parent = { + ...para('parent'), + children: [para('nested'), divider()], + }; + + expect(hasDividerBlock([para('a'), quote('intro'), para('b')])).toBe(false); + expect(hasDividerBlock([para('a'), quote('intro'), divider()])).toBe(true); + expect(hasDividerBlock([para('a'), parent])).toBe(true); + }); +}); + describe('getContentSlideIndexForBlock', () => { test('returns the slide containing a regular block', () => { expect(