update: screenshot tests.

This commit is contained in:
Darshan
2026-01-25 15:42:09 +05:30
parent b503965e8c
commit 2d5e64a21e
3 changed files with 107 additions and 23 deletions
+3
View File
@@ -27,3 +27,6 @@ docker-compose.web-installer.yml
# backups when testing upgrade mode.
docker-compose.web-installer.yml.**.backup
# screenshots
tests/playwright/screenshots
+1
View File
@@ -21,6 +21,7 @@
"test:installer": "TEST_MODE=install playwright test tests/playwright/installer.spec.js",
"test:installer:upgrade": "TEST_MODE=upgrade playwright test tests/playwright/installer.spec.js",
"test:screenshots": "playwright test tests/playwright/installer-screenshots.spec.js --project=chromium",
"test:screenshots:upgrade": "TEST_MODE=upgrade playwright test tests/playwright/installer-screenshots.spec.js --project=chromium",
"test:headed": "playwright test --headed",
"test:ui": "playwright test --ui"
},
+103 -23
View File
@@ -1,37 +1,58 @@
// @ts-check
const { test, expect } = require('@playwright/test');
const setMockSettings = async (page, settings) => {
await page.addInitScript((value) => {
sessionStorage.setItem('appwrite-installer-mock-settings', JSON.stringify(value));
}, settings);
};
const openAdvancedSettings = async (page) => {
const toggle = page.locator('.accordion-toggle');
if (await toggle.isVisible()) {
await toggle.click();
}
};
test.describe('Appwrite Web Installer - Screenshots', () => {
test('capture screenshots of wizard steps', async ({ page }) => {
await page.goto('/');
await page.waitForLoadState('networkidle');
await page.waitForTimeout(500);
await expect(page.locator('h1')).toContainText('Appwrite Installation');
await page.screenshot({ path: 'tests/playwright/screenshots/step-1-configuration.png', fullPage: true });
await page.locator('#httpPort').fill('8080');
await page.locator('#httpsPort').fill('8443');
await page.locator('#primaryButton').click();
await page.waitForSelector('#hostname', { state: 'visible', timeout: 10000 });
await page.waitForTimeout(300);
await expect(page.locator('.step[data-step="2"]')).toHaveClass(/active/);
await page.screenshot({ path: 'tests/playwright/screenshots/step-2-database.png', fullPage: true });
await expect(page.locator('h1')).toContainText('Setup your app');
await page.screenshot({ path: 'tests/playwright/screenshots/step-1-setup.png', fullPage: true });
await page.locator('#primaryButton').click();
await page.locator('.accordion-toggle').click();
await page.locator('#hostname').fill('appwrite.example.com');
await page.locator('#http-port').fill('8080');
await page.locator('#https-port').fill('8443');
await page.locator('#ssl-email').fill('admin@example.com');
await page.locator('button:has-text("Next")').click();
await page.waitForSelector('#secret-key', { state: 'visible', timeout: 10000 });
await page.waitForTimeout(300);
await page.screenshot({ path: 'tests/playwright/screenshots/step-3-domain.png', fullPage: true });
await page.locator('#appDomain').fill('appwrite.example.com');
await page.locator('#emailCertificates').fill('admin@example.com');
await page.locator('#primaryButton').click();
await page.waitForTimeout(300);
await page.screenshot({ path: 'tests/playwright/screenshots/step-4-security.png', fullPage: true });
await page.screenshot({ path: 'tests/playwright/screenshots/step-2-secret-key.png', fullPage: true });
await page.locator('button:has-text("Review")').click();
await page.locator('#secret-key').fill('a'.repeat(32));
await page.locator('button:has-text("Next")').click();
await page.waitForSelector('#account-name', { state: 'visible', timeout: 10000 });
await page.waitForTimeout(300);
await page.screenshot({ path: 'tests/playwright/screenshots/step-5-review.png', fullPage: true });
await page.locator('#reviewContent').screenshot({ path: 'tests/playwright/screenshots/step-5-review-detail.png' });
await page.screenshot({ path: 'tests/playwright/screenshots/step-3-account.png', fullPage: true });
await page.locator('#account-name').fill('Jane Doe');
await page.locator('#account-email').fill('jane@example.com');
await page.locator('#account-password').fill('password123');
await page.locator('button:has-text("Next")').click();
await page.waitForSelector('[data-review-value="appDomain"]', { state: 'visible', timeout: 10000 });
await page.waitForTimeout(300);
await page.screenshot({ path: 'tests/playwright/screenshots/step-4-review.png', fullPage: true });
await page.locator('button:has-text("Install")').click();
await page.waitForSelector('.install-list', { state: 'visible', timeout: 10000 });
await page.waitForTimeout(1000);
await page.screenshot({ path: 'tests/playwright/screenshots/step-5-install.png', fullPage: true });
await page.setViewportSize({ width: 375, height: 812 });
await page.waitForTimeout(300);
@@ -41,12 +62,71 @@ test.describe('Appwrite Web Installer - Screenshots', () => {
test('capture validation states', async ({ page }) => {
await page.goto('/');
await page.waitForLoadState('networkidle');
await page.waitForSelector('#hostname', { state: 'visible', timeout: 10000 });
await page.locator('#httpPort').fill('invalid');
await page.locator('#primaryButton').click();
await page.locator('#hostname').fill('');
await page.locator('.accordion-toggle').click();
await page.locator('#http-port').fill('0');
await page.locator('#https-port').fill('70000');
await page.locator('#ssl-email').fill('invalid');
await page.locator('button:has-text("Next")').click();
await page.waitForTimeout(300);
await expect(page.locator('.alert.is-error')).toBeVisible();
await expect(page.locator('.field-error.is-visible').first()).toBeVisible();
await page.screenshot({ path: 'tests/playwright/screenshots/validation-error.png', fullPage: true });
});
test('capture account validation states', async ({ page }) => {
await page.goto('/?step=3');
await page.waitForLoadState('networkidle');
await page.waitForSelector('#account-name', { state: 'visible', timeout: 10000 });
await page.locator('#account-name').fill('');
await page.locator('#account-email').fill('invalid-email');
await page.locator('#account-password').fill('short');
await page.locator('button:has-text("Next")').click();
await page.waitForTimeout(500);
await expect(page.locator('.field-error.is-visible').first()).toBeVisible();
await page.screenshot({ path: 'tests/playwright/screenshots/account-validation-error.png', fullPage: true });
});
test('capture install error state (mock)', async ({ page }) => {
await setMockSettings(page, { error: 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();
await page.waitForSelector('.install-row[data-status="error"]', { timeout: 15000 });
await page.screenshot({ path: 'tests/playwright/screenshots/install-error.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();
await page.waitForSelector('.installer-toast', { state: 'visible', timeout: 10000 });
await page.screenshot({ path: 'tests/playwright/screenshots/toast-session-expired.png', fullPage: true });
});
test('capture upgrade flow screenshots (mock upgrade)', async ({ page }) => {
await page.goto('/');
await page.waitForLoadState('networkidle');
const isUpgrade = await page.locator('body').getAttribute('data-upgrade');
test.skip(isUpgrade !== 'true', 'Upgrade mode not enabled.');
await expect(page.locator('h1')).toContainText(/Update your app/i);
await page.screenshot({ path: 'tests/playwright/screenshots/upgrade-step-1-setup.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 });
await page.locator('button:has-text("Update")').click();
await page.waitForSelector('.install-row[data-step="docker-containers"][data-status="completed"]', { timeout: 15000 });
await page.screenshot({ path: 'tests/playwright/screenshots/upgrade-step-5-install.png', fullPage: true });
});
});