From 9314d0a8f51f0e9fd38201943fb058b4d17d19d9 Mon Sep 17 00:00:00 2001 From: admin-valentin Date: Fri, 31 Jul 2026 15:18:39 +0000 Subject: [PATCH] =?UTF-8?q?test(tst-020):=20visual=20regression=20baseline?= =?UTF-8?q?=20tests=20=E2=80=94=20home=20+=20mobile=20viewport?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/visual/home.spec.ts | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 tests/visual/home.spec.ts diff --git a/tests/visual/home.spec.ts b/tests/visual/home.spec.ts new file mode 100644 index 0000000..fe23760 --- /dev/null +++ b/tests/visual/home.spec.ts @@ -0,0 +1,36 @@ +/** + * TST-020: Visual Regression — Home / Dashboard + * Snapshots are committed as baselines; CI fails on pixel diff. + */ +import { test, expect } from '@playwright/test'; + +test.describe('Visual Regression — Core Screens', () => { + test('landing / login page renders correctly', async ({ page }) => { + await page.goto('/'); + await page.waitForLoadState('networkidle'); + await expect(page).toHaveScreenshot('home.png', { + fullPage: true, + maxDiffPixelRatio: 0.02, + }); + }); + + test('login page has no console errors', async ({ page }) => { + const errors: string[] = []; + page.on('console', (msg) => { + if (msg.type() === 'error') errors.push(msg.text()); + }); + await page.goto('/'); + await page.waitForLoadState('networkidle'); + expect(errors).toHaveLength(0); + }); + + test('mobile viewport — landing page', async ({ page }) => { + await page.setViewportSize({ width: 375, height: 812 }); + await page.goto('/'); + await page.waitForLoadState('networkidle'); + await expect(page).toHaveScreenshot('home-mobile.png', { + fullPage: true, + maxDiffPixelRatio: 0.02, + }); + }); +});