diff --git a/pt/web/firebird/tests/App.spec.js b/pt/web/firebird/tests/App.spec.js index 793cb3a57..f0178c9c6 100644 --- a/pt/web/firebird/tests/App.spec.js +++ b/pt/web/firebird/tests/App.spec.js @@ -10,8 +10,7 @@ test.describe('pt loads', () => { }); test('sidebar is visible', async ({ page }) => { - const sidebar = page.getByRole('complementary'); - await expect(sidebar).toBeVisible; + await expect(page.locator('aside')).toBeVisible(); }); test('has main element', async ({ page }) => { diff --git a/pt/web/firebird/tests/ViewerToolbar.spec.js b/pt/web/firebird/tests/ViewerToolbar.spec.js index c83ab8f6f..028a240d0 100644 --- a/pt/web/firebird/tests/ViewerToolbar.spec.js +++ b/pt/web/firebird/tests/ViewerToolbar.spec.js @@ -77,4 +77,36 @@ test.describe('reader toolbar actions', () => { await expect(page.getByRole('button', { name: 'Zoom In', exact: true })).toBeVisible(); await expect(page.getByLabel('Page scan 1').locator('details')).toBeVisible(); }); + + test.describe('zoom limits', () => { + test('zoom-in button is disabled at maximum zoom', async ({ page }) => { + const zoomIn = page.getByLabel('Zoom').getByRole('button', { name: 'Zoom In' }); + for (let i = 0; i < 20; i++) { + if (await zoomIn.isDisabled()) break; + await zoomIn.click(); + } + await expect(zoomIn).toBeDisabled(); + }); + + test('zoom-out button is disabled at minimum zoom', async ({ page }) => { + const zoomOut = page.getByLabel('Zoom').getByRole('button', { name: 'Zoom Out' }); + for (let i = 0; i < 20; i++) { + if (await zoomOut.isDisabled()) break; + await zoomOut.click(); + } + await expect(zoomOut).toBeDisabled(); + }); + + test('zoom-out re-enables after zooming back in from minimum', async ({ page }) => { + const zoomIn = page.getByLabel('Zoom').getByRole('button', { name: 'Zoom In' }); + const zoomOut = page.getByLabel('Zoom').getByRole('button', { name: 'Zoom Out' }); + for (let i = 0; i < 20; i++) { + if (await zoomOut.isDisabled()) break; + await zoomOut.click(); + } + await expect(zoomOut).toBeDisabled(); + await zoomIn.click(); + await expect(zoomOut).toBeEnabled(); + }); + }); }); diff --git a/pt/web/firebird/tests/sidebar.spec.js b/pt/web/firebird/tests/sidebar.spec.js index 5e27a86de..9525d7a8d 100644 --- a/pt/web/firebird/tests/sidebar.spec.js +++ b/pt/web/firebird/tests/sidebar.spec.js @@ -259,6 +259,35 @@ test.describe('sidebar actions', () => { await page.getByRole('button', { name: 'Save Changes' }).click(); }); }); + test.describe('share panel', () => { + test.beforeEach(async ({ page }) => { + const shareButton = page.getByRole('button', { name: 'Share' }); + await shareButton.click(); + await expect(shareButton).toHaveAttribute('aria-expanded', 'true'); + }); + + test('shows permanent link to item', async ({ page }) => { + await expect(page.getByLabel('Permanent link to this item')).toHaveValue(/hdl\.handle\.net\/2027\/test\.pd_open/); + }); + + test('shows link to current page scan', async ({ page }) => { + // getByRole needed because the nearby copy button's aria-label contains the same substring + await expect(page.getByRole('textbox', { name: 'Link to this page scan' })).toHaveValue(/hdl\.handle\.net\/2027\/test\.pd_open.*seq=1/); + }); + + test('page scan link updates when navigating to a different page', async ({ page }) => { + await page.getByRole('button', { name: 'Next Page' }).click(); + await expect(page.getByRole('textbox', { name: 'Link to this page scan' })).toHaveValue(/seq=2/); + }); + + test('embed button opens modal with iframe code', async ({ page }) => { + await page.getByRole('button', { name: 'Embed this item' }).click(); + await expect(page.getByRole('dialog')).toBeVisible(); + await expect(page.getByLabel('Code Block')).toHaveValue(/iframe/); + await expect(page.getByLabel('Code Block')).toHaveValue(/test\.pd_open/); + }); + }); + // close and expand sidebar test.describe('toggle sidebar visibility', () => { test('close sidebar', async ({ page }) => {