diff --git a/tests/playwright/installer-screenshots.spec.js b/tests/playwright/installer-screenshots.spec.js index 16c6b6ca8d..17922a5faa 100644 --- a/tests/playwright/installer-screenshots.spec.js +++ b/tests/playwright/installer-screenshots.spec.js @@ -7,6 +7,11 @@ const setMockSettings = async (page, settings) => { }, settings); }; +const isUpgradeMode = async (page) => { + const value = await page.locator('body').getAttribute('data-upgrade'); + return value === 'true'; +}; + const openAdvancedSettings = async (page) => { const toggle = page.locator('.accordion-toggle'); if (await toggle.isVisible()) { @@ -21,6 +26,10 @@ test.describe('Appwrite Web Installer - Screenshots', () => { await page.waitForSelector('#hostname', { state: 'visible', timeout: 10000 }); await page.waitForTimeout(300); + if (await isUpgradeMode(page)) { + test.skip(true, 'Install flow screenshots are not available in upgrade mode.'); + } + await expect(page.locator('h1')).toContainText('Setup your app'); await page.screenshot({ path: 'tests/playwright/screenshots/step-1-setup.png', fullPage: true }); @@ -62,6 +71,9 @@ test.describe('Appwrite Web Installer - Screenshots', () => { test('capture validation states', async ({ page }) => { await page.goto('/'); await page.waitForLoadState('networkidle'); + if (await isUpgradeMode(page)) { + test.skip(true, 'Install validation screenshots are not available in upgrade mode.'); + } await page.waitForSelector('#hostname', { state: 'visible', timeout: 10000 }); await page.locator('#hostname').fill(''); @@ -79,6 +91,9 @@ test.describe('Appwrite Web Installer - Screenshots', () => { test('capture account validation states', async ({ page }) => { await page.goto('/?step=3'); await page.waitForLoadState('networkidle'); + if (await isUpgradeMode(page)) { + test.skip(true, 'Account step is not available in upgrade mode.'); + } await page.waitForSelector('#account-name', { state: 'visible', timeout: 10000 }); await page.locator('#account-name').fill(''); @@ -96,20 +111,29 @@ test.describe('Appwrite Web Installer - Screenshots', () => { await page.goto('/?step=4'); await page.waitForLoadState('networkidle'); - await page.waitForSelector('button:has-text("Install")', { state: 'visible', timeout: 10000 }); - await page.locator('button:has-text("Install")').click(); + const upgrade = await isUpgradeMode(page); + const actionLabel = upgrade ? 'Update' : 'Install'; + const screenshotName = upgrade ? 'upgrade-error' : 'install-error'; + + await page.waitForSelector(`button:has-text("${actionLabel}")`, { state: 'visible', timeout: 10000 }); + await page.locator(`button:has-text("${actionLabel}")`).click(); await page.waitForSelector('.install-row[data-status="error"]', { timeout: 15000 }); - await page.screenshot({ path: 'tests/playwright/screenshots/install-error.png', fullPage: true }); + await page.screenshot({ path: `tests/playwright/screenshots/${screenshotName}.png`, fullPage: true }); }); test('capture toast state (mock)', async ({ page }) => { await setMockSettings(page, { toast: true }); await page.goto('/?step=4'); await page.waitForLoadState('networkidle'); - await page.waitForSelector('button:has-text("Install")', { state: 'visible', timeout: 10000 }); - await page.locator('button:has-text("Install")').click(); + const upgrade = await isUpgradeMode(page); + const actionLabel = upgrade ? 'Update' : 'Install'; + const screenshotName = upgrade ? 'toast-session-expired-upgrade' : 'toast-session-expired'; + await page.waitForSelector(`button:has-text("${actionLabel}")`, { state: 'visible', timeout: 10000 }); + await page.locator(`button:has-text("${actionLabel}")`).click(); await page.waitForSelector('.installer-toast', { state: 'visible', timeout: 10000 }); - await page.screenshot({ path: 'tests/playwright/screenshots/toast-session-expired.png', fullPage: true }); + await page.waitForSelector('.installer-toast:not(.is-entering)', { state: 'visible', timeout: 10000 }); + await page.waitForTimeout(450); + await page.screenshot({ path: `tests/playwright/screenshots/${screenshotName}.png`, fullPage: true }); }); test('capture upgrade flow screenshots (mock upgrade)', async ({ page }) => { @@ -121,6 +145,20 @@ test.describe('Appwrite Web Installer - Screenshots', () => { await expect(page.locator('h1')).toContainText(/Update your app/i); await page.screenshot({ path: 'tests/playwright/screenshots/upgrade-step-1-setup.png', fullPage: true }); + // Upgrade: advanced settings open + await openAdvancedSettings(page); + await page.waitForTimeout(200); + await page.screenshot({ path: 'tests/playwright/screenshots/upgrade-step-1-advanced.png', fullPage: true }); + + // Upgrade: locked database tooltip + const dbTooltipTrigger = page.locator('.selector-card.has-tooltip').first(); + if (await dbTooltipTrigger.isVisible()) { + await dbTooltipTrigger.hover(); + await page.waitForSelector('.tooltip-db-locked', { state: 'visible', timeout: 5000 }); + await page.waitForTimeout(200); + await page.screenshot({ path: 'tests/playwright/screenshots/upgrade-step-1-db-tooltip.png', fullPage: true }); + } + await page.locator('button:has-text("Next")').click(); await page.waitForSelector('[data-review-value="appDomain"]', { state: 'visible', timeout: 10000 }); await page.screenshot({ path: 'tests/playwright/screenshots/upgrade-step-4-review.png', fullPage: true });