From 7e6262ee19efa9af421babac12bf7ad471fe6dae Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 3 Nov 2026 09:23:47 +0000 Subject: [PATCH] chore(web): delete unwired memory api copy and orphan scaffold Remove duplicate src/api/memory tree, legacy auth/blog/todo/nav demos, committed Playwright artifacts, and related CI baselines. Live routes remain under src/pages/api/memory and mizu/Navbar. --- .gitignore | 1 + .../error-context.md | 310 ------------ .../error-context.md | 310 ------------ .../error-context.md | 310 ------------ .../error-context.md | 280 ----------- .../error-context.md | 280 ----------- .../error-context.md | 280 ----------- .../error-context.md | 308 ------------ .../error-context.md | 186 ------- .../error-context.md | 186 ------- .../error-context.md | 186 ------- .../error-context.md | 186 ------- .../error-context.md | 186 ------- .../error-context.md | 186 ------- .../error-context.md | 186 ------- .../error-context.md | 186 ------- .../error-context.md | 186 ------- .../error-context.md | 227 --------- .../error-context.md | 227 --------- .../error-context.md | 227 --------- .../error-context.md | 227 --------- .../error-context.md | 227 --------- .../error-context.md | 227 --------- .../error-context.md | 226 --------- .../error-context.md | 226 --------- .../error-context.md | 226 --------- .../error-context.md | 137 ------ .../error-context.md | 200 -------- .../error-context.md | 200 -------- .../error-context.md | 200 -------- .../error-context.md | 205 -------- .../error-context.md | 205 -------- .../error-context.md | 205 -------- .../error-context.md | 199 -------- .../error-context.md | 199 -------- .../error-context.md | 199 -------- .../error-context.md | 321 ------------- .../error-context.md | 321 ------------- .../error-context.md | 321 ------------- .../error-context.md | 326 ------------- .../error-context.md | 326 ------------- .../error-context.md | 326 ------------- .../error-context.md | 321 ------------- .../error-context.md | 321 ------------- .../error-context.md | 321 ------------- .../error-context.md | 246 ---------- .../error-context.md | 246 ---------- .../error-context.md | 246 ---------- .../error-context.md | 244 ---------- .../error-context.md | 244 ---------- .../error-context.md | 244 ---------- .../error-context.md | 243 ---------- .../error-context.md | 243 ---------- .../error-context.md | 243 ---------- .../error-context.md | 354 -------------- .../error-context.md | 354 -------------- .../error-context.md | 354 -------------- .../error-context.md | 357 -------------- .../error-context.md | 357 -------------- .../error-context.md | 357 -------------- .../error-context.md | 353 -------------- .../error-context.md | 353 -------------- .../error-context.md | 353 -------------- .../api/memory/__tests__/[memoryId].test.ts | 60 --- .../src/api/memory/__tests__/_shared.test.ts | 453 ------------------ .../src/api/memory/__tests__/stats.test.ts | 78 --- apps/web/src/api/memory/_shared.ts | 211 -------- apps/web/src/api/memory/routes/[memoryId].ts | 220 --------- apps/web/src/api/memory/routes/create.ts | 114 ----- apps/web/src/api/memory/routes/index.ts | 19 - apps/web/src/api/memory/routes/list.ts | 72 --- apps/web/src/api/memory/routes/search.ts | 199 -------- apps/web/src/api/memory/routes/stats.ts | 59 --- apps/web/src/buffer-polyfill.js | 23 - apps/web/src/components/BlogSearch.tsx | 140 ------ apps/web/src/components/Hamburger.astro | 42 -- apps/web/src/components/Monitoring.astro | 28 -- apps/web/src/components/Navbar.astro | 346 ------------- apps/web/src/components/TodoAlpine.astro | 190 -------- apps/web/src/components/TodoComponent.astro | 29 -- apps/web/src/components/TodoIsland.astro | 29 -- .../web/src/components/TodoPreactIsland.astro | 29 -- apps/web/src/components/TodoReact.tsx | 258 ---------- .../analytics/PatternVisualization.tsx | 5 - apps/web/src/components/auth/AuthButtons.tsx | 68 --- apps/web/src/components/auth/AuthCard.astro | 33 -- apps/web/src/components/auth/Login.tsx | 147 ------ apps/web/src/components/auth/Register.tsx | 227 --------- apps/web/src/components/auth/RequireRole.tsx | 49 -- .../web/src/components/blog/ArticleCard.astro | 51 -- .../src/components/blog/ArticleHeader.astro | 43 -- apps/web/src/components/blog/AuthorBio.astro | 46 -- apps/web/src/components/blog/Divider.astro | 9 - apps/web/src/components/blog/Pagination.astro | 40 -- .../components/blog/SeriesNavigation.astro | 45 -- .../web/src/components/blog/SocialShare.astro | 59 --- apps/web/src/components/blog/Subscribe.astro | 29 -- .../src/components/blog/TableOfContents.astro | 104 ---- apps/web/src/lib/sentry/source-map.test.mjs | 6 +- scripts/ci/tech-debt-baseline.json | 90 +--- vitest.config.ts | 1 - 101 files changed, 9 insertions(+), 19679 deletions(-) delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-3518a-should-work-in-all-browsers-chromium-retry1/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-3518a-should-work-in-all-browsers-chromium-retry2/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-3518a-should-work-in-all-browsers-chromium/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-3518a-should-work-in-all-browsers-firefox-retry1/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-3518a-should-work-in-all-browsers-firefox-retry2/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-3518a-should-work-in-all-browsers-firefox/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-3518a-should-work-in-all-browsers-webkit/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-chromium-retry1/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-chromium-retry2/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-chromium/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-firefox-retry1/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-firefox-retry2/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-firefox/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-webkit-retry1/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-webkit-retry2/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-webkit/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-chromium-retry1/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-chromium-retry2/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-chromium/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-firefox-retry1/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-firefox-retry2/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-firefox/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-webkit-retry1/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-webkit-retry2/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-webkit/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-63c28-k-correctly-across-browsers-chromium/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-chromium-retry1/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-chromium-retry2/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-chromium/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-firefox-retry1/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-firefox-retry2/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-firefox/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-webkit-retry1/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-webkit-retry2/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-webkit/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-chromium-retry1/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-chromium-retry2/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-chromium/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-firefox-retry1/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-firefox-retry2/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-firefox/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-webkit-retry1/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-webkit-retry2/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-webkit/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-chromium-retry1/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-chromium-retry2/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-chromium/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-firefox-retry1/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-firefox-retry2/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-firefox/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-webkit-retry1/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-webkit-retry2/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-webkit/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-chromium-retry1/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-chromium-retry2/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-chromium/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-firefox-retry1/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-firefox-retry2/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-firefox/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-webkit-retry1/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-webkit-retry2/error-context.md delete mode 100644 apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-webkit/error-context.md delete mode 100644 apps/web/src/api/memory/__tests__/[memoryId].test.ts delete mode 100644 apps/web/src/api/memory/__tests__/_shared.test.ts delete mode 100644 apps/web/src/api/memory/__tests__/stats.test.ts delete mode 100644 apps/web/src/api/memory/_shared.ts delete mode 100644 apps/web/src/api/memory/routes/[memoryId].ts delete mode 100644 apps/web/src/api/memory/routes/create.ts delete mode 100644 apps/web/src/api/memory/routes/index.ts delete mode 100644 apps/web/src/api/memory/routes/list.ts delete mode 100644 apps/web/src/api/memory/routes/search.ts delete mode 100644 apps/web/src/api/memory/routes/stats.ts delete mode 100644 apps/web/src/buffer-polyfill.js delete mode 100644 apps/web/src/components/BlogSearch.tsx delete mode 100644 apps/web/src/components/Hamburger.astro delete mode 100644 apps/web/src/components/Monitoring.astro delete mode 100644 apps/web/src/components/Navbar.astro delete mode 100644 apps/web/src/components/TodoAlpine.astro delete mode 100644 apps/web/src/components/TodoComponent.astro delete mode 100644 apps/web/src/components/TodoIsland.astro delete mode 100644 apps/web/src/components/TodoPreactIsland.astro delete mode 100644 apps/web/src/components/TodoReact.tsx delete mode 100644 apps/web/src/components/analytics/PatternVisualization.tsx delete mode 100644 apps/web/src/components/auth/AuthButtons.tsx delete mode 100644 apps/web/src/components/auth/AuthCard.astro delete mode 100644 apps/web/src/components/auth/Login.tsx delete mode 100644 apps/web/src/components/auth/Register.tsx delete mode 100644 apps/web/src/components/auth/RequireRole.tsx delete mode 100644 apps/web/src/components/blog/ArticleCard.astro delete mode 100644 apps/web/src/components/blog/ArticleHeader.astro delete mode 100644 apps/web/src/components/blog/AuthorBio.astro delete mode 100644 apps/web/src/components/blog/Divider.astro delete mode 100644 apps/web/src/components/blog/Pagination.astro delete mode 100644 apps/web/src/components/blog/SeriesNavigation.astro delete mode 100644 apps/web/src/components/blog/SocialShare.astro delete mode 100644 apps/web/src/components/blog/Subscribe.astro delete mode 100644 apps/web/src/components/blog/TableOfContents.astro diff --git a/.gitignore b/.gitignore index c816efd9cc..2aee51ae59 100644 --- a/.gitignore +++ b/.gitignore @@ -341,6 +341,7 @@ values.yaml tests/test-results/ tests/security/security-reports/ config/test-results/ +apps/web/public/test-results/ config/playwright-report/ *_output.txt test_output.txt diff --git a/apps/web/public/test-results/cross-browser-compatibilit-3518a-should-work-in-all-browsers-chromium-retry1/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-3518a-should-work-in-all-browsers-chromium-retry1/error-context.md deleted file mode 100644 index 871b365a5e..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-3518a-should-work-in-all-browsers-chromium-retry1/error-context.md +++ /dev/null @@ -1,310 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> simulator page should work in all - browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: expect(received).toEqual(expected) // deep equality - -- Expected - 1 -+ Received + 5 - -- Array [] -+ Array [ -+ "[astro-island] Error hydrating /src/components/layout/HeaderReact.tsx ReferenceError: process is not defined -+ at getEnv (http://localhost:3000/src/config/env.config.ts:102:5) -+ at http://localhost:3000/src/config/env.config.ts:129:20", -+ ] - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:59:22 -``` - -# Page snapshot - -```yaml -- link "Skip to content": - - /url: '#main-content' -- banner: - - link "Pixelated Empathy Logo Pixelated Empathy": - - /url: / - - img "Pixelated Empathy Logo" - - text: Pixelated Empathy - - navigation: - - link "Home": - - /url: / - - link "About": - - /url: /about - - link "Contact": - - /url: /contact - - link "Login": - - /url: /login - - link "Sign Up": - - /url: /signup - - button "Search": - - img - - button: - - img - - button "Switch to dark theme": - - img - - link "Sign in": - - /url: /login -- complementary: - - complementary: - - button "Toggle Menu": - - img - - text: Toggle Menu - - button "Overview": - - text: Overview - - img - - list: - - listitem: - - link "Dashboard": - - /url: /dashboard - - img - - text: Dashboard - - listitem: - - link "Analytics": - - /url: /analytics - - img - - text: Analytics - - button "Therapy Tools": - - text: Therapy Tools - - img - - button "Account": - - text: Account - - img -- main: - - heading "Therapeutic Practice Simulator" [level=2] - - heading "Select a Practice Scenario" [level=3] - - paragraph: - Choose a scenario to practice therapeutic techniques in a safe, private - environment. All interactions are processed in real-time with no - recording or storage. - - heading "Depression Assessment" [level=4] - - paragraph: 'Difficulty: Intermediate' - - link "Start Scenario →": - - /url: '#' - - heading "Anxiety Management" [level=4] - - paragraph: 'Difficulty: Beginner' - - link "Start Scenario →": - - /url: '#' - - heading "Trauma-Informed Care" [level=4] - - paragraph: 'Difficulty: Advanced' - - link "Start Scenario →": - - /url: '#' - - heading "About This Simulator" [level=3]: - - img - - text: About This Simulator - - paragraph: - This simulator allows you to practice therapeutic techniques in a - private, safe environment. No audio or video data is recorded or stored - at any time. All processing happens in real-time with zero data - retention to ensure complete privacy and HIPAA compliance. - - text: - You can track your progress through anonymized metrics that are only - stored in your browser. - - link "Logo Pixelated Empathy": - - /url: / - - img "Logo" - - text: Pixelated Empathy - - paragraph: - Secure AI therapy platform with advanced encryption for maximum privacy - and HIPAA compliance. - - link "Twitter": - - /url: '#' - - link "GitHub": - - /url: '#' - - link "LinkedIn": - - /url: '#' - - heading "Platform" [level=3] - - list: - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "Chat": - - /url: /chat - - listitem: - - link "Profile": - - /url: /profile - - heading "Resources" [level=3] - - list: - - listitem: - - link "About": - - /url: /about - - listitem: - - link "Contact": - - /url: /contact - - listitem: - - link "FAQ": - - /url: /faq - - paragraph: © 2025 Pixelated Empathy. All rights reserved. -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible - 27 | await expect(page.locator('header')).toBeVisible() - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred -> 59 | expect(errors).toEqual([]) - | ^ Error: expect(received).toEqual(expected) // deep equality - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot - 128 | await page.screenshot({ - 129 | path: `./test-results/cross-browser/${browserName}-nav-mobile.png`, - 130 | }) - 131 | }) - 132 | - 133 | // Test form interactions across browsers - 134 | test('forms work correctly across browsers', async ({ - 135 | page, - 136 | browserName, - 137 | }) => { - 138 | // Go to contact page with a form - 139 | await page.goto('/contact') - 140 | - 141 | // Fill out form - 142 | await page.fill('input[name="name"]', 'Test User') - 143 | await page.fill('input[name="email"]', 'test@example.com') - 144 | await page.fill('textarea[name="message"]', 'This is a test message') - 145 | - 146 | // Take a screenshot of the filled form - 147 | await page.screenshot({ - 148 | path: `./test-results/cross-browser/${browserName}-form.png`, - 149 | }) - 150 | - 151 | // Submit form (but intercept the actual submission) - 152 | await page.route('**/api/contact', (route) => { - 153 | route.fulfill({ - 154 | status: 200, - 155 | body: JSON.stringify({ success: true }), - 156 | }) - 157 | }) - 158 | - 159 | await page.click('button[type="submit"]') -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-3518a-should-work-in-all-browsers-chromium-retry2/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-3518a-should-work-in-all-browsers-chromium-retry2/error-context.md deleted file mode 100644 index 871b365a5e..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-3518a-should-work-in-all-browsers-chromium-retry2/error-context.md +++ /dev/null @@ -1,310 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> simulator page should work in all - browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: expect(received).toEqual(expected) // deep equality - -- Expected - 1 -+ Received + 5 - -- Array [] -+ Array [ -+ "[astro-island] Error hydrating /src/components/layout/HeaderReact.tsx ReferenceError: process is not defined -+ at getEnv (http://localhost:3000/src/config/env.config.ts:102:5) -+ at http://localhost:3000/src/config/env.config.ts:129:20", -+ ] - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:59:22 -``` - -# Page snapshot - -```yaml -- link "Skip to content": - - /url: '#main-content' -- banner: - - link "Pixelated Empathy Logo Pixelated Empathy": - - /url: / - - img "Pixelated Empathy Logo" - - text: Pixelated Empathy - - navigation: - - link "Home": - - /url: / - - link "About": - - /url: /about - - link "Contact": - - /url: /contact - - link "Login": - - /url: /login - - link "Sign Up": - - /url: /signup - - button "Search": - - img - - button: - - img - - button "Switch to dark theme": - - img - - link "Sign in": - - /url: /login -- complementary: - - complementary: - - button "Toggle Menu": - - img - - text: Toggle Menu - - button "Overview": - - text: Overview - - img - - list: - - listitem: - - link "Dashboard": - - /url: /dashboard - - img - - text: Dashboard - - listitem: - - link "Analytics": - - /url: /analytics - - img - - text: Analytics - - button "Therapy Tools": - - text: Therapy Tools - - img - - button "Account": - - text: Account - - img -- main: - - heading "Therapeutic Practice Simulator" [level=2] - - heading "Select a Practice Scenario" [level=3] - - paragraph: - Choose a scenario to practice therapeutic techniques in a safe, private - environment. All interactions are processed in real-time with no - recording or storage. - - heading "Depression Assessment" [level=4] - - paragraph: 'Difficulty: Intermediate' - - link "Start Scenario →": - - /url: '#' - - heading "Anxiety Management" [level=4] - - paragraph: 'Difficulty: Beginner' - - link "Start Scenario →": - - /url: '#' - - heading "Trauma-Informed Care" [level=4] - - paragraph: 'Difficulty: Advanced' - - link "Start Scenario →": - - /url: '#' - - heading "About This Simulator" [level=3]: - - img - - text: About This Simulator - - paragraph: - This simulator allows you to practice therapeutic techniques in a - private, safe environment. No audio or video data is recorded or stored - at any time. All processing happens in real-time with zero data - retention to ensure complete privacy and HIPAA compliance. - - text: - You can track your progress through anonymized metrics that are only - stored in your browser. - - link "Logo Pixelated Empathy": - - /url: / - - img "Logo" - - text: Pixelated Empathy - - paragraph: - Secure AI therapy platform with advanced encryption for maximum privacy - and HIPAA compliance. - - link "Twitter": - - /url: '#' - - link "GitHub": - - /url: '#' - - link "LinkedIn": - - /url: '#' - - heading "Platform" [level=3] - - list: - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "Chat": - - /url: /chat - - listitem: - - link "Profile": - - /url: /profile - - heading "Resources" [level=3] - - list: - - listitem: - - link "About": - - /url: /about - - listitem: - - link "Contact": - - /url: /contact - - listitem: - - link "FAQ": - - /url: /faq - - paragraph: © 2025 Pixelated Empathy. All rights reserved. -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible - 27 | await expect(page.locator('header')).toBeVisible() - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred -> 59 | expect(errors).toEqual([]) - | ^ Error: expect(received).toEqual(expected) // deep equality - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot - 128 | await page.screenshot({ - 129 | path: `./test-results/cross-browser/${browserName}-nav-mobile.png`, - 130 | }) - 131 | }) - 132 | - 133 | // Test form interactions across browsers - 134 | test('forms work correctly across browsers', async ({ - 135 | page, - 136 | browserName, - 137 | }) => { - 138 | // Go to contact page with a form - 139 | await page.goto('/contact') - 140 | - 141 | // Fill out form - 142 | await page.fill('input[name="name"]', 'Test User') - 143 | await page.fill('input[name="email"]', 'test@example.com') - 144 | await page.fill('textarea[name="message"]', 'This is a test message') - 145 | - 146 | // Take a screenshot of the filled form - 147 | await page.screenshot({ - 148 | path: `./test-results/cross-browser/${browserName}-form.png`, - 149 | }) - 150 | - 151 | // Submit form (but intercept the actual submission) - 152 | await page.route('**/api/contact', (route) => { - 153 | route.fulfill({ - 154 | status: 200, - 155 | body: JSON.stringify({ success: true }), - 156 | }) - 157 | }) - 158 | - 159 | await page.click('button[type="submit"]') -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-3518a-should-work-in-all-browsers-chromium/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-3518a-should-work-in-all-browsers-chromium/error-context.md deleted file mode 100644 index 871b365a5e..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-3518a-should-work-in-all-browsers-chromium/error-context.md +++ /dev/null @@ -1,310 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> simulator page should work in all - browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: expect(received).toEqual(expected) // deep equality - -- Expected - 1 -+ Received + 5 - -- Array [] -+ Array [ -+ "[astro-island] Error hydrating /src/components/layout/HeaderReact.tsx ReferenceError: process is not defined -+ at getEnv (http://localhost:3000/src/config/env.config.ts:102:5) -+ at http://localhost:3000/src/config/env.config.ts:129:20", -+ ] - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:59:22 -``` - -# Page snapshot - -```yaml -- link "Skip to content": - - /url: '#main-content' -- banner: - - link "Pixelated Empathy Logo Pixelated Empathy": - - /url: / - - img "Pixelated Empathy Logo" - - text: Pixelated Empathy - - navigation: - - link "Home": - - /url: / - - link "About": - - /url: /about - - link "Contact": - - /url: /contact - - link "Login": - - /url: /login - - link "Sign Up": - - /url: /signup - - button "Search": - - img - - button: - - img - - button "Switch to dark theme": - - img - - link "Sign in": - - /url: /login -- complementary: - - complementary: - - button "Toggle Menu": - - img - - text: Toggle Menu - - button "Overview": - - text: Overview - - img - - list: - - listitem: - - link "Dashboard": - - /url: /dashboard - - img - - text: Dashboard - - listitem: - - link "Analytics": - - /url: /analytics - - img - - text: Analytics - - button "Therapy Tools": - - text: Therapy Tools - - img - - button "Account": - - text: Account - - img -- main: - - heading "Therapeutic Practice Simulator" [level=2] - - heading "Select a Practice Scenario" [level=3] - - paragraph: - Choose a scenario to practice therapeutic techniques in a safe, private - environment. All interactions are processed in real-time with no - recording or storage. - - heading "Depression Assessment" [level=4] - - paragraph: 'Difficulty: Intermediate' - - link "Start Scenario →": - - /url: '#' - - heading "Anxiety Management" [level=4] - - paragraph: 'Difficulty: Beginner' - - link "Start Scenario →": - - /url: '#' - - heading "Trauma-Informed Care" [level=4] - - paragraph: 'Difficulty: Advanced' - - link "Start Scenario →": - - /url: '#' - - heading "About This Simulator" [level=3]: - - img - - text: About This Simulator - - paragraph: - This simulator allows you to practice therapeutic techniques in a - private, safe environment. No audio or video data is recorded or stored - at any time. All processing happens in real-time with zero data - retention to ensure complete privacy and HIPAA compliance. - - text: - You can track your progress through anonymized metrics that are only - stored in your browser. - - link "Logo Pixelated Empathy": - - /url: / - - img "Logo" - - text: Pixelated Empathy - - paragraph: - Secure AI therapy platform with advanced encryption for maximum privacy - and HIPAA compliance. - - link "Twitter": - - /url: '#' - - link "GitHub": - - /url: '#' - - link "LinkedIn": - - /url: '#' - - heading "Platform" [level=3] - - list: - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "Chat": - - /url: /chat - - listitem: - - link "Profile": - - /url: /profile - - heading "Resources" [level=3] - - list: - - listitem: - - link "About": - - /url: /about - - listitem: - - link "Contact": - - /url: /contact - - listitem: - - link "FAQ": - - /url: /faq - - paragraph: © 2025 Pixelated Empathy. All rights reserved. -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible - 27 | await expect(page.locator('header')).toBeVisible() - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred -> 59 | expect(errors).toEqual([]) - | ^ Error: expect(received).toEqual(expected) // deep equality - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot - 128 | await page.screenshot({ - 129 | path: `./test-results/cross-browser/${browserName}-nav-mobile.png`, - 130 | }) - 131 | }) - 132 | - 133 | // Test form interactions across browsers - 134 | test('forms work correctly across browsers', async ({ - 135 | page, - 136 | browserName, - 137 | }) => { - 138 | // Go to contact page with a form - 139 | await page.goto('/contact') - 140 | - 141 | // Fill out form - 142 | await page.fill('input[name="name"]', 'Test User') - 143 | await page.fill('input[name="email"]', 'test@example.com') - 144 | await page.fill('textarea[name="message"]', 'This is a test message') - 145 | - 146 | // Take a screenshot of the filled form - 147 | await page.screenshot({ - 148 | path: `./test-results/cross-browser/${browserName}-form.png`, - 149 | }) - 150 | - 151 | // Submit form (but intercept the actual submission) - 152 | await page.route('**/api/contact', (route) => { - 153 | route.fulfill({ - 154 | status: 200, - 155 | body: JSON.stringify({ success: true }), - 156 | }) - 157 | }) - 158 | - 159 | await page.click('button[type="submit"]') -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-3518a-should-work-in-all-browsers-firefox-retry1/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-3518a-should-work-in-all-browsers-firefox-retry1/error-context.md deleted file mode 100644 index 2269552d54..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-3518a-should-work-in-all-browsers-firefox-retry1/error-context.md +++ /dev/null @@ -1,280 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> simulator page should work in all - browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 6 elements: - 1)
…
aka getByRole('banner') - 2)
…
aka getByText('5.7.10 Copy debug info') - 3)
…
aka getByText('Featured integrationsView all') - 4)
…
aka locator('header').filter({ hasText: 'Audit 0' }) - 5)
…
aka locator('header').filter({ hasText: 'No accessibility or' }) - 6)
…
aka locator('header').filter({ hasText: 'Settings' }) - -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('header') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:27:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- link "Skip to content": - - /url: '#main-content' -- banner: - - link "Pixelated Empathy Logo Pixelated Empathy": - - /url: / - - img "Pixelated Empathy Logo" - - text: Pixelated Empathy - - navigation: - - link "Home": - - /url: / - - link "About": - - /url: /about - - link "Contact": - - /url: /contact - - link "Login": - - /url: /login - - link "Sign Up": - - /url: /signup - - button "Search": - - img - - button: - - img - - button "Switch to dark theme": - - img - - link "Sign in": - - /url: /login -- complementary: - - complementary: - - button "Toggle Menu": - - img - - text: Toggle Menu - - button "Overview": - - text: Overview - - img - - list: - - listitem: - - link "Dashboard": - - /url: /dashboard - - img - - text: Dashboard - - listitem: - - link "Analytics": - - /url: /analytics - - img - - text: Analytics - - button "Therapy Tools": - - text: Therapy Tools - - img - - button "Account": - - text: Account - - img -- main: - - heading "Therapeutic Practice Simulator" [level=2] - - heading "Select a Practice Scenario" [level=3] - - paragraph: - Choose a scenario to practice therapeutic techniques in a safe, private - environment. All interactions are processed in real-time with no - recording or storage. - - heading "Depression Assessment" [level=4] - - paragraph: 'Difficulty: Intermediate' - - link "Start Scenario →": - - /url: '#' - - heading "Anxiety Management" [level=4] - - paragraph: 'Difficulty: Beginner' - - link "Start Scenario →": - - /url: '#' - - heading "Trauma-Informed Care" [level=4] - - paragraph: 'Difficulty: Advanced' - - link "Start Scenario →": - - /url: '#' - - heading "About This Simulator" [level=3]: - - img - - text: About This Simulator - - paragraph: - This simulator allows you to practice therapeutic techniques in a - private, safe environment. No audio or video data is recorded or stored - at any time. All processing happens in real-time with zero data - retention to ensure complete privacy and HIPAA compliance. - - text: - You can track your progress through anonymized metrics that are only - stored in your browser. - - link "Logo Pixelated Empathy": - - /url: / - - img "Logo" - - text: Pixelated Empathy - - paragraph: - Secure AI therapy platform with advanced encryption for maximum privacy - and HIPAA compliance. - - link "Twitter": - - /url: '#' - - link "GitHub": - - /url: '#' - - link "LinkedIn": - - /url: '#' - - heading "Platform" [level=3] - - list: - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "Chat": - - /url: /chat - - listitem: - - link "Profile": - - /url: /profile - - heading "Resources" [level=3] - - list: - - listitem: - - link "About": - - /url: /about - - listitem: - - link "Contact": - - /url: /contact - - listitem: - - link "FAQ": - - /url: /faq - - paragraph: © 2025 Pixelated Empathy. All rights reserved. -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible -> 27 | await expect(page.locator('header')).toBeVisible() - | ^ Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 6 elements: - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-3518a-should-work-in-all-browsers-firefox-retry2/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-3518a-should-work-in-all-browsers-firefox-retry2/error-context.md deleted file mode 100644 index 2269552d54..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-3518a-should-work-in-all-browsers-firefox-retry2/error-context.md +++ /dev/null @@ -1,280 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> simulator page should work in all - browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 6 elements: - 1)
…
aka getByRole('banner') - 2)
…
aka getByText('5.7.10 Copy debug info') - 3)
…
aka getByText('Featured integrationsView all') - 4)
…
aka locator('header').filter({ hasText: 'Audit 0' }) - 5)
…
aka locator('header').filter({ hasText: 'No accessibility or' }) - 6)
…
aka locator('header').filter({ hasText: 'Settings' }) - -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('header') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:27:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- link "Skip to content": - - /url: '#main-content' -- banner: - - link "Pixelated Empathy Logo Pixelated Empathy": - - /url: / - - img "Pixelated Empathy Logo" - - text: Pixelated Empathy - - navigation: - - link "Home": - - /url: / - - link "About": - - /url: /about - - link "Contact": - - /url: /contact - - link "Login": - - /url: /login - - link "Sign Up": - - /url: /signup - - button "Search": - - img - - button: - - img - - button "Switch to dark theme": - - img - - link "Sign in": - - /url: /login -- complementary: - - complementary: - - button "Toggle Menu": - - img - - text: Toggle Menu - - button "Overview": - - text: Overview - - img - - list: - - listitem: - - link "Dashboard": - - /url: /dashboard - - img - - text: Dashboard - - listitem: - - link "Analytics": - - /url: /analytics - - img - - text: Analytics - - button "Therapy Tools": - - text: Therapy Tools - - img - - button "Account": - - text: Account - - img -- main: - - heading "Therapeutic Practice Simulator" [level=2] - - heading "Select a Practice Scenario" [level=3] - - paragraph: - Choose a scenario to practice therapeutic techniques in a safe, private - environment. All interactions are processed in real-time with no - recording or storage. - - heading "Depression Assessment" [level=4] - - paragraph: 'Difficulty: Intermediate' - - link "Start Scenario →": - - /url: '#' - - heading "Anxiety Management" [level=4] - - paragraph: 'Difficulty: Beginner' - - link "Start Scenario →": - - /url: '#' - - heading "Trauma-Informed Care" [level=4] - - paragraph: 'Difficulty: Advanced' - - link "Start Scenario →": - - /url: '#' - - heading "About This Simulator" [level=3]: - - img - - text: About This Simulator - - paragraph: - This simulator allows you to practice therapeutic techniques in a - private, safe environment. No audio or video data is recorded or stored - at any time. All processing happens in real-time with zero data - retention to ensure complete privacy and HIPAA compliance. - - text: - You can track your progress through anonymized metrics that are only - stored in your browser. - - link "Logo Pixelated Empathy": - - /url: / - - img "Logo" - - text: Pixelated Empathy - - paragraph: - Secure AI therapy platform with advanced encryption for maximum privacy - and HIPAA compliance. - - link "Twitter": - - /url: '#' - - link "GitHub": - - /url: '#' - - link "LinkedIn": - - /url: '#' - - heading "Platform" [level=3] - - list: - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "Chat": - - /url: /chat - - listitem: - - link "Profile": - - /url: /profile - - heading "Resources" [level=3] - - list: - - listitem: - - link "About": - - /url: /about - - listitem: - - link "Contact": - - /url: /contact - - listitem: - - link "FAQ": - - /url: /faq - - paragraph: © 2025 Pixelated Empathy. All rights reserved. -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible -> 27 | await expect(page.locator('header')).toBeVisible() - | ^ Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 6 elements: - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-3518a-should-work-in-all-browsers-firefox/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-3518a-should-work-in-all-browsers-firefox/error-context.md deleted file mode 100644 index 2269552d54..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-3518a-should-work-in-all-browsers-firefox/error-context.md +++ /dev/null @@ -1,280 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> simulator page should work in all - browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 6 elements: - 1)
…
aka getByRole('banner') - 2)
…
aka getByText('5.7.10 Copy debug info') - 3)
…
aka getByText('Featured integrationsView all') - 4)
…
aka locator('header').filter({ hasText: 'Audit 0' }) - 5)
…
aka locator('header').filter({ hasText: 'No accessibility or' }) - 6)
…
aka locator('header').filter({ hasText: 'Settings' }) - -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('header') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:27:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- link "Skip to content": - - /url: '#main-content' -- banner: - - link "Pixelated Empathy Logo Pixelated Empathy": - - /url: / - - img "Pixelated Empathy Logo" - - text: Pixelated Empathy - - navigation: - - link "Home": - - /url: / - - link "About": - - /url: /about - - link "Contact": - - /url: /contact - - link "Login": - - /url: /login - - link "Sign Up": - - /url: /signup - - button "Search": - - img - - button: - - img - - button "Switch to dark theme": - - img - - link "Sign in": - - /url: /login -- complementary: - - complementary: - - button "Toggle Menu": - - img - - text: Toggle Menu - - button "Overview": - - text: Overview - - img - - list: - - listitem: - - link "Dashboard": - - /url: /dashboard - - img - - text: Dashboard - - listitem: - - link "Analytics": - - /url: /analytics - - img - - text: Analytics - - button "Therapy Tools": - - text: Therapy Tools - - img - - button "Account": - - text: Account - - img -- main: - - heading "Therapeutic Practice Simulator" [level=2] - - heading "Select a Practice Scenario" [level=3] - - paragraph: - Choose a scenario to practice therapeutic techniques in a safe, private - environment. All interactions are processed in real-time with no - recording or storage. - - heading "Depression Assessment" [level=4] - - paragraph: 'Difficulty: Intermediate' - - link "Start Scenario →": - - /url: '#' - - heading "Anxiety Management" [level=4] - - paragraph: 'Difficulty: Beginner' - - link "Start Scenario →": - - /url: '#' - - heading "Trauma-Informed Care" [level=4] - - paragraph: 'Difficulty: Advanced' - - link "Start Scenario →": - - /url: '#' - - heading "About This Simulator" [level=3]: - - img - - text: About This Simulator - - paragraph: - This simulator allows you to practice therapeutic techniques in a - private, safe environment. No audio or video data is recorded or stored - at any time. All processing happens in real-time with zero data - retention to ensure complete privacy and HIPAA compliance. - - text: - You can track your progress through anonymized metrics that are only - stored in your browser. - - link "Logo Pixelated Empathy": - - /url: / - - img "Logo" - - text: Pixelated Empathy - - paragraph: - Secure AI therapy platform with advanced encryption for maximum privacy - and HIPAA compliance. - - link "Twitter": - - /url: '#' - - link "GitHub": - - /url: '#' - - link "LinkedIn": - - /url: '#' - - heading "Platform" [level=3] - - list: - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "Chat": - - /url: /chat - - listitem: - - link "Profile": - - /url: /profile - - heading "Resources" [level=3] - - list: - - listitem: - - link "About": - - /url: /about - - listitem: - - link "Contact": - - /url: /contact - - listitem: - - link "FAQ": - - /url: /faq - - paragraph: © 2025 Pixelated Empathy. All rights reserved. -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible -> 27 | await expect(page.locator('header')).toBeVisible() - | ^ Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 6 elements: - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-3518a-should-work-in-all-browsers-webkit/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-3518a-should-work-in-all-browsers-webkit/error-context.md deleted file mode 100644 index 386718f763..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-3518a-should-work-in-all-browsers-webkit/error-context.md +++ /dev/null @@ -1,308 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> simulator page should work in all - browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: expect(received).toEqual(expected) // deep equality - -- Expected - 1 -+ Received + 3 - -- Array [] -+ Array [ -+ "[astro-island] Error hydrating /src/components/layout/HeaderReact.tsx ReferenceError: Cannot access uninitialized variable.", -+ ] - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:59:22 -``` - -# Page snapshot - -```yaml -- link "Skip to content": - - /url: '#main-content' -- banner: - - link "Pixelated Empathy Logo Pixelated Empathy": - - /url: / - - img "Pixelated Empathy Logo" - - text: Pixelated Empathy - - navigation: - - link "Home": - - /url: / - - link "About": - - /url: /about - - link "Contact": - - /url: /contact - - link "Login": - - /url: /login - - link "Sign Up": - - /url: /signup - - button "Search": - - img - - button: - - img - - button "Switch to dark theme": - - img - - link "Sign in": - - /url: /login -- complementary: - - complementary: - - button "Toggle Menu": - - img - - text: Toggle Menu - - button "Overview": - - text: Overview - - img - - list: - - listitem: - - link "Dashboard": - - /url: /dashboard - - img - - text: Dashboard - - listitem: - - link "Analytics": - - /url: /analytics - - img - - text: Analytics - - button "Therapy Tools": - - text: Therapy Tools - - img - - button "Account": - - text: Account - - img -- main: - - heading "Therapeutic Practice Simulator" [level=2] - - heading "Select a Practice Scenario" [level=3] - - paragraph: - Choose a scenario to practice therapeutic techniques in a safe, private - environment. All interactions are processed in real-time with no - recording or storage. - - heading "Depression Assessment" [level=4] - - paragraph: 'Difficulty: Intermediate' - - link "Start Scenario →": - - /url: '#' - - heading "Anxiety Management" [level=4] - - paragraph: 'Difficulty: Beginner' - - link "Start Scenario →": - - /url: '#' - - heading "Trauma-Informed Care" [level=4] - - paragraph: 'Difficulty: Advanced' - - link "Start Scenario →": - - /url: '#' - - heading "About This Simulator" [level=3]: - - img - - text: About This Simulator - - paragraph: - This simulator allows you to practice therapeutic techniques in a - private, safe environment. No audio or video data is recorded or stored - at any time. All processing happens in real-time with zero data - retention to ensure complete privacy and HIPAA compliance. - - text: - You can track your progress through anonymized metrics that are only - stored in your browser. - - link "Logo Pixelated Empathy": - - /url: / - - img "Logo" - - text: Pixelated Empathy - - paragraph: - Secure AI therapy platform with advanced encryption for maximum privacy - and HIPAA compliance. - - link "Twitter": - - /url: '#' - - link "GitHub": - - /url: '#' - - link "LinkedIn": - - /url: '#' - - heading "Platform" [level=3] - - list: - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "Chat": - - /url: /chat - - listitem: - - link "Profile": - - /url: /profile - - heading "Resources" [level=3] - - list: - - listitem: - - link "About": - - /url: /about - - listitem: - - link "Contact": - - /url: /contact - - listitem: - - link "FAQ": - - /url: /faq - - paragraph: © 2025 Pixelated Empathy. All rights reserved. -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible - 27 | await expect(page.locator('header')).toBeVisible() - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred -> 59 | expect(errors).toEqual([]) - | ^ Error: expect(received).toEqual(expected) // deep equality - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot - 128 | await page.screenshot({ - 129 | path: `./test-results/cross-browser/${browserName}-nav-mobile.png`, - 130 | }) - 131 | }) - 132 | - 133 | // Test form interactions across browsers - 134 | test('forms work correctly across browsers', async ({ - 135 | page, - 136 | browserName, - 137 | }) => { - 138 | // Go to contact page with a form - 139 | await page.goto('/contact') - 140 | - 141 | // Fill out form - 142 | await page.fill('input[name="name"]', 'Test User') - 143 | await page.fill('input[name="email"]', 'test@example.com') - 144 | await page.fill('textarea[name="message"]', 'This is a test message') - 145 | - 146 | // Take a screenshot of the filled form - 147 | await page.screenshot({ - 148 | path: `./test-results/cross-browser/${browserName}-form.png`, - 149 | }) - 150 | - 151 | // Submit form (but intercept the actual submission) - 152 | await page.route('**/api/contact', (route) => { - 153 | route.fulfill({ - 154 | status: 200, - 155 | body: JSON.stringify({ success: true }), - 156 | }) - 157 | }) - 158 | - 159 | await page.click('button[type="submit"]') -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-chromium-retry1/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-chromium-retry1/error-context.md deleted file mode 100644 index 3d7c4dc5ec..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-chromium-retry1/error-context.md +++ /dev/null @@ -1,186 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> dashboard page should work in all - browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - -Locator: locator('header') -Expected: visible -Received: -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('header') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:27:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- heading "404" [level=1] -- paragraph: - - strong: File not found -- paragraph: - The site configured at this address does not contain the requested file. -- paragraph: - - text: - If this is your site, make sure that the filename case matches the URL - as well as any file permissions. For root URLs (like - - code: http://example.com/ - - text: ) you must provide an - - code: index.html - - text: file. -- paragraph: - - link "Read the full documentation": - - /url: https://help.github.com/pages/ - - text: for more information about using - - strong: GitHub Pages - - text: . -- link "GitHub Status": - - /url: https://githubstatus.com -- text: — -- link "@githubstatus": - - /url: https://twitter.com/githubstatus -- link: - - /url: / -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible -> 27 | await expect(page.locator('header')).toBeVisible() - | ^ Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-chromium-retry2/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-chromium-retry2/error-context.md deleted file mode 100644 index 3d7c4dc5ec..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-chromium-retry2/error-context.md +++ /dev/null @@ -1,186 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> dashboard page should work in all - browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - -Locator: locator('header') -Expected: visible -Received: -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('header') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:27:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- heading "404" [level=1] -- paragraph: - - strong: File not found -- paragraph: - The site configured at this address does not contain the requested file. -- paragraph: - - text: - If this is your site, make sure that the filename case matches the URL - as well as any file permissions. For root URLs (like - - code: http://example.com/ - - text: ) you must provide an - - code: index.html - - text: file. -- paragraph: - - link "Read the full documentation": - - /url: https://help.github.com/pages/ - - text: for more information about using - - strong: GitHub Pages - - text: . -- link "GitHub Status": - - /url: https://githubstatus.com -- text: — -- link "@githubstatus": - - /url: https://twitter.com/githubstatus -- link: - - /url: / -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible -> 27 | await expect(page.locator('header')).toBeVisible() - | ^ Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-chromium/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-chromium/error-context.md deleted file mode 100644 index 3d7c4dc5ec..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-chromium/error-context.md +++ /dev/null @@ -1,186 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> dashboard page should work in all - browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - -Locator: locator('header') -Expected: visible -Received: -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('header') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:27:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- heading "404" [level=1] -- paragraph: - - strong: File not found -- paragraph: - The site configured at this address does not contain the requested file. -- paragraph: - - text: - If this is your site, make sure that the filename case matches the URL - as well as any file permissions. For root URLs (like - - code: http://example.com/ - - text: ) you must provide an - - code: index.html - - text: file. -- paragraph: - - link "Read the full documentation": - - /url: https://help.github.com/pages/ - - text: for more information about using - - strong: GitHub Pages - - text: . -- link "GitHub Status": - - /url: https://githubstatus.com -- text: — -- link "@githubstatus": - - /url: https://twitter.com/githubstatus -- link: - - /url: / -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible -> 27 | await expect(page.locator('header')).toBeVisible() - | ^ Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-firefox-retry1/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-firefox-retry1/error-context.md deleted file mode 100644 index 3d7c4dc5ec..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-firefox-retry1/error-context.md +++ /dev/null @@ -1,186 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> dashboard page should work in all - browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - -Locator: locator('header') -Expected: visible -Received: -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('header') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:27:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- heading "404" [level=1] -- paragraph: - - strong: File not found -- paragraph: - The site configured at this address does not contain the requested file. -- paragraph: - - text: - If this is your site, make sure that the filename case matches the URL - as well as any file permissions. For root URLs (like - - code: http://example.com/ - - text: ) you must provide an - - code: index.html - - text: file. -- paragraph: - - link "Read the full documentation": - - /url: https://help.github.com/pages/ - - text: for more information about using - - strong: GitHub Pages - - text: . -- link "GitHub Status": - - /url: https://githubstatus.com -- text: — -- link "@githubstatus": - - /url: https://twitter.com/githubstatus -- link: - - /url: / -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible -> 27 | await expect(page.locator('header')).toBeVisible() - | ^ Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-firefox-retry2/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-firefox-retry2/error-context.md deleted file mode 100644 index 3d7c4dc5ec..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-firefox-retry2/error-context.md +++ /dev/null @@ -1,186 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> dashboard page should work in all - browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - -Locator: locator('header') -Expected: visible -Received: -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('header') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:27:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- heading "404" [level=1] -- paragraph: - - strong: File not found -- paragraph: - The site configured at this address does not contain the requested file. -- paragraph: - - text: - If this is your site, make sure that the filename case matches the URL - as well as any file permissions. For root URLs (like - - code: http://example.com/ - - text: ) you must provide an - - code: index.html - - text: file. -- paragraph: - - link "Read the full documentation": - - /url: https://help.github.com/pages/ - - text: for more information about using - - strong: GitHub Pages - - text: . -- link "GitHub Status": - - /url: https://githubstatus.com -- text: — -- link "@githubstatus": - - /url: https://twitter.com/githubstatus -- link: - - /url: / -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible -> 27 | await expect(page.locator('header')).toBeVisible() - | ^ Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-firefox/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-firefox/error-context.md deleted file mode 100644 index 3d7c4dc5ec..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-firefox/error-context.md +++ /dev/null @@ -1,186 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> dashboard page should work in all - browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - -Locator: locator('header') -Expected: visible -Received: -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('header') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:27:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- heading "404" [level=1] -- paragraph: - - strong: File not found -- paragraph: - The site configured at this address does not contain the requested file. -- paragraph: - - text: - If this is your site, make sure that the filename case matches the URL - as well as any file permissions. For root URLs (like - - code: http://example.com/ - - text: ) you must provide an - - code: index.html - - text: file. -- paragraph: - - link "Read the full documentation": - - /url: https://help.github.com/pages/ - - text: for more information about using - - strong: GitHub Pages - - text: . -- link "GitHub Status": - - /url: https://githubstatus.com -- text: — -- link "@githubstatus": - - /url: https://twitter.com/githubstatus -- link: - - /url: / -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible -> 27 | await expect(page.locator('header')).toBeVisible() - | ^ Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-webkit-retry1/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-webkit-retry1/error-context.md deleted file mode 100644 index 3d7c4dc5ec..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-webkit-retry1/error-context.md +++ /dev/null @@ -1,186 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> dashboard page should work in all - browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - -Locator: locator('header') -Expected: visible -Received: -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('header') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:27:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- heading "404" [level=1] -- paragraph: - - strong: File not found -- paragraph: - The site configured at this address does not contain the requested file. -- paragraph: - - text: - If this is your site, make sure that the filename case matches the URL - as well as any file permissions. For root URLs (like - - code: http://example.com/ - - text: ) you must provide an - - code: index.html - - text: file. -- paragraph: - - link "Read the full documentation": - - /url: https://help.github.com/pages/ - - text: for more information about using - - strong: GitHub Pages - - text: . -- link "GitHub Status": - - /url: https://githubstatus.com -- text: — -- link "@githubstatus": - - /url: https://twitter.com/githubstatus -- link: - - /url: / -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible -> 27 | await expect(page.locator('header')).toBeVisible() - | ^ Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-webkit-retry2/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-webkit-retry2/error-context.md deleted file mode 100644 index 3d7c4dc5ec..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-webkit-retry2/error-context.md +++ /dev/null @@ -1,186 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> dashboard page should work in all - browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - -Locator: locator('header') -Expected: visible -Received: -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('header') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:27:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- heading "404" [level=1] -- paragraph: - - strong: File not found -- paragraph: - The site configured at this address does not contain the requested file. -- paragraph: - - text: - If this is your site, make sure that the filename case matches the URL - as well as any file permissions. For root URLs (like - - code: http://example.com/ - - text: ) you must provide an - - code: index.html - - text: file. -- paragraph: - - link "Read the full documentation": - - /url: https://help.github.com/pages/ - - text: for more information about using - - strong: GitHub Pages - - text: . -- link "GitHub Status": - - /url: https://githubstatus.com -- text: — -- link "@githubstatus": - - /url: https://twitter.com/githubstatus -- link: - - /url: / -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible -> 27 | await expect(page.locator('header')).toBeVisible() - | ^ Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-webkit/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-webkit/error-context.md deleted file mode 100644 index 3d7c4dc5ec..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-4f8fa-should-work-in-all-browsers-webkit/error-context.md +++ /dev/null @@ -1,186 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> dashboard page should work in all - browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - -Locator: locator('header') -Expected: visible -Received: -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('header') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:27:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- heading "404" [level=1] -- paragraph: - - strong: File not found -- paragraph: - The site configured at this address does not contain the requested file. -- paragraph: - - text: - If this is your site, make sure that the filename case matches the URL - as well as any file permissions. For root URLs (like - - code: http://example.com/ - - text: ) you must provide an - - code: index.html - - text: file. -- paragraph: - - link "Read the full documentation": - - /url: https://help.github.com/pages/ - - text: for more information about using - - strong: GitHub Pages - - text: . -- link "GitHub Status": - - /url: https://githubstatus.com -- text: — -- link "@githubstatus": - - /url: https://twitter.com/githubstatus -- link: - - /url: / -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible -> 27 | await expect(page.locator('header')).toBeVisible() - | ^ Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-chromium-retry1/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-chromium-retry1/error-context.md deleted file mode 100644 index 3e843be23a..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-chromium-retry1/error-context.md +++ /dev/null @@ -1,227 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> forms work correctly across browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:134:3 - -# Error details - -``` -Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - -Locator: locator('text=Thank you for your message') -Expected: visible -Received: hidden -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('text=Thank you for your message') - 19 × locator resolved to - - unexpected value "hidden" - - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:162:67 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme": - - img -- main: - - heading "Contact Us" [level=1] - - paragraph: We'd love to hear from you - - article: - - heading "Get in Touch" [level=2] - - paragraph: - Have questions about our technology, interested in partnerships, or - just want to say hello? We'd love to hear from you. - - paragraph: - - strong: 'Email:' - - link "info@pixelatedempathy.com": - - /url: mailto:info@pixelatedempathy.com - - paragraph: - - strong: 'Location:' - - text: San Francisco, CA - - heading "Connect With Us" [level=2] - - paragraph: - Follow us on social media to stay updated with our latest - developments, research insights, and community events. - - link "Twitter": - - /url: https://twitter.com/pixelated - - link "LinkedIn": - - /url: https://www.linkedin.com/company/pixelated-ascent - - link "GitHub": - - /url: https://github.com/pixelated - - heading "Send Us a Message" [level=2] - - text: Name - - textbox "Name": Test User - - text: Email - - textbox "Email": test@example.com - - text: Subject - - textbox "Subject" - - text: Message - - textbox "Message": This is a test message - - button "Send Message" -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot - 128 | await page.screenshot({ - 129 | path: `./test-results/cross-browser/${browserName}-nav-mobile.png`, - 130 | }) - 131 | }) - 132 | - 133 | // Test form interactions across browsers - 134 | test('forms work correctly across browsers', async ({ - 135 | page, - 136 | browserName, - 137 | }) => { - 138 | // Go to contact page with a form - 139 | await page.goto('/contact') - 140 | - 141 | // Fill out form - 142 | await page.fill('input[name="name"]', 'Test User') - 143 | await page.fill('input[name="email"]', 'test@example.com') - 144 | await page.fill('textarea[name="message"]', 'This is a test message') - 145 | - 146 | // Take a screenshot of the filled form - 147 | await page.screenshot({ - 148 | path: `./test-results/cross-browser/${browserName}-form.png`, - 149 | }) - 150 | - 151 | // Submit form (but intercept the actual submission) - 152 | await page.route('**/api/contact', (route) => { - 153 | route.fulfill({ - 154 | status: 200, - 155 | body: JSON.stringify({ success: true }), - 156 | }) - 157 | }) - 158 | - 159 | await page.click('button[type="submit"]') - 160 | - 161 | // Check for success message -> 162 | await expect(page.locator('text=Thank you for your message')).toBeVisible() - | ^ Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - 163 | }) - 164 | - 165 | // Test animations and transitions - 166 | test('animations and transitions work correctly across browsers', async ({ - 167 | page, - 168 | browserName, - 169 | }) => { - 170 | // Go to a page with animations - 171 | await page.goto('/') - 172 | - 173 | // Scroll to trigger animations - 174 | await page.evaluate(() => window.scrollBy(0, 300)) - 175 | - 176 | // Wait for animations to complete (this is approximate) - 177 | await page.waitForTimeout(1000) - 178 | - 179 | // Take a screenshot after animations - 180 | await page.screenshot({ - 181 | path: `./test-results/cross-browser/${browserName}-animations.png`, - 182 | }) - 183 | }) - 184 | }) - 185 | -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-chromium-retry2/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-chromium-retry2/error-context.md deleted file mode 100644 index 3e843be23a..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-chromium-retry2/error-context.md +++ /dev/null @@ -1,227 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> forms work correctly across browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:134:3 - -# Error details - -``` -Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - -Locator: locator('text=Thank you for your message') -Expected: visible -Received: hidden -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('text=Thank you for your message') - 19 × locator resolved to - - unexpected value "hidden" - - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:162:67 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme": - - img -- main: - - heading "Contact Us" [level=1] - - paragraph: We'd love to hear from you - - article: - - heading "Get in Touch" [level=2] - - paragraph: - Have questions about our technology, interested in partnerships, or - just want to say hello? We'd love to hear from you. - - paragraph: - - strong: 'Email:' - - link "info@pixelatedempathy.com": - - /url: mailto:info@pixelatedempathy.com - - paragraph: - - strong: 'Location:' - - text: San Francisco, CA - - heading "Connect With Us" [level=2] - - paragraph: - Follow us on social media to stay updated with our latest - developments, research insights, and community events. - - link "Twitter": - - /url: https://twitter.com/pixelated - - link "LinkedIn": - - /url: https://www.linkedin.com/company/pixelated-ascent - - link "GitHub": - - /url: https://github.com/pixelated - - heading "Send Us a Message" [level=2] - - text: Name - - textbox "Name": Test User - - text: Email - - textbox "Email": test@example.com - - text: Subject - - textbox "Subject" - - text: Message - - textbox "Message": This is a test message - - button "Send Message" -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot - 128 | await page.screenshot({ - 129 | path: `./test-results/cross-browser/${browserName}-nav-mobile.png`, - 130 | }) - 131 | }) - 132 | - 133 | // Test form interactions across browsers - 134 | test('forms work correctly across browsers', async ({ - 135 | page, - 136 | browserName, - 137 | }) => { - 138 | // Go to contact page with a form - 139 | await page.goto('/contact') - 140 | - 141 | // Fill out form - 142 | await page.fill('input[name="name"]', 'Test User') - 143 | await page.fill('input[name="email"]', 'test@example.com') - 144 | await page.fill('textarea[name="message"]', 'This is a test message') - 145 | - 146 | // Take a screenshot of the filled form - 147 | await page.screenshot({ - 148 | path: `./test-results/cross-browser/${browserName}-form.png`, - 149 | }) - 150 | - 151 | // Submit form (but intercept the actual submission) - 152 | await page.route('**/api/contact', (route) => { - 153 | route.fulfill({ - 154 | status: 200, - 155 | body: JSON.stringify({ success: true }), - 156 | }) - 157 | }) - 158 | - 159 | await page.click('button[type="submit"]') - 160 | - 161 | // Check for success message -> 162 | await expect(page.locator('text=Thank you for your message')).toBeVisible() - | ^ Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - 163 | }) - 164 | - 165 | // Test animations and transitions - 166 | test('animations and transitions work correctly across browsers', async ({ - 167 | page, - 168 | browserName, - 169 | }) => { - 170 | // Go to a page with animations - 171 | await page.goto('/') - 172 | - 173 | // Scroll to trigger animations - 174 | await page.evaluate(() => window.scrollBy(0, 300)) - 175 | - 176 | // Wait for animations to complete (this is approximate) - 177 | await page.waitForTimeout(1000) - 178 | - 179 | // Take a screenshot after animations - 180 | await page.screenshot({ - 181 | path: `./test-results/cross-browser/${browserName}-animations.png`, - 182 | }) - 183 | }) - 184 | }) - 185 | -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-chromium/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-chromium/error-context.md deleted file mode 100644 index 3e843be23a..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-chromium/error-context.md +++ /dev/null @@ -1,227 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> forms work correctly across browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:134:3 - -# Error details - -``` -Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - -Locator: locator('text=Thank you for your message') -Expected: visible -Received: hidden -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('text=Thank you for your message') - 19 × locator resolved to - - unexpected value "hidden" - - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:162:67 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme": - - img -- main: - - heading "Contact Us" [level=1] - - paragraph: We'd love to hear from you - - article: - - heading "Get in Touch" [level=2] - - paragraph: - Have questions about our technology, interested in partnerships, or - just want to say hello? We'd love to hear from you. - - paragraph: - - strong: 'Email:' - - link "info@pixelatedempathy.com": - - /url: mailto:info@pixelatedempathy.com - - paragraph: - - strong: 'Location:' - - text: San Francisco, CA - - heading "Connect With Us" [level=2] - - paragraph: - Follow us on social media to stay updated with our latest - developments, research insights, and community events. - - link "Twitter": - - /url: https://twitter.com/pixelated - - link "LinkedIn": - - /url: https://www.linkedin.com/company/pixelated-ascent - - link "GitHub": - - /url: https://github.com/pixelated - - heading "Send Us a Message" [level=2] - - text: Name - - textbox "Name": Test User - - text: Email - - textbox "Email": test@example.com - - text: Subject - - textbox "Subject" - - text: Message - - textbox "Message": This is a test message - - button "Send Message" -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot - 128 | await page.screenshot({ - 129 | path: `./test-results/cross-browser/${browserName}-nav-mobile.png`, - 130 | }) - 131 | }) - 132 | - 133 | // Test form interactions across browsers - 134 | test('forms work correctly across browsers', async ({ - 135 | page, - 136 | browserName, - 137 | }) => { - 138 | // Go to contact page with a form - 139 | await page.goto('/contact') - 140 | - 141 | // Fill out form - 142 | await page.fill('input[name="name"]', 'Test User') - 143 | await page.fill('input[name="email"]', 'test@example.com') - 144 | await page.fill('textarea[name="message"]', 'This is a test message') - 145 | - 146 | // Take a screenshot of the filled form - 147 | await page.screenshot({ - 148 | path: `./test-results/cross-browser/${browserName}-form.png`, - 149 | }) - 150 | - 151 | // Submit form (but intercept the actual submission) - 152 | await page.route('**/api/contact', (route) => { - 153 | route.fulfill({ - 154 | status: 200, - 155 | body: JSON.stringify({ success: true }), - 156 | }) - 157 | }) - 158 | - 159 | await page.click('button[type="submit"]') - 160 | - 161 | // Check for success message -> 162 | await expect(page.locator('text=Thank you for your message')).toBeVisible() - | ^ Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - 163 | }) - 164 | - 165 | // Test animations and transitions - 166 | test('animations and transitions work correctly across browsers', async ({ - 167 | page, - 168 | browserName, - 169 | }) => { - 170 | // Go to a page with animations - 171 | await page.goto('/') - 172 | - 173 | // Scroll to trigger animations - 174 | await page.evaluate(() => window.scrollBy(0, 300)) - 175 | - 176 | // Wait for animations to complete (this is approximate) - 177 | await page.waitForTimeout(1000) - 178 | - 179 | // Take a screenshot after animations - 180 | await page.screenshot({ - 181 | path: `./test-results/cross-browser/${browserName}-animations.png`, - 182 | }) - 183 | }) - 184 | }) - 185 | -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-firefox-retry1/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-firefox-retry1/error-context.md deleted file mode 100644 index bcec3c8147..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-firefox-retry1/error-context.md +++ /dev/null @@ -1,227 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> forms work correctly across browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:134:3 - -# Error details - -``` -Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - -Locator: locator('text=Thank you for your message') -Expected: visible -Received: hidden -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('text=Thank you for your message') - 18 × locator resolved to - - unexpected value "hidden" - - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:162:67 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme": - - img -- main: - - heading "Contact Us" [level=1] - - paragraph: We'd love to hear from you - - article: - - heading "Get in Touch" [level=2] - - paragraph: - Have questions about our technology, interested in partnerships, or - just want to say hello? We'd love to hear from you. - - paragraph: - - strong: 'Email:' - - link "info@pixelatedempathy.com": - - /url: mailto:info@pixelatedempathy.com - - paragraph: - - strong: 'Location:' - - text: San Francisco, CA - - heading "Connect With Us" [level=2] - - paragraph: - Follow us on social media to stay updated with our latest - developments, research insights, and community events. - - link "Twitter": - - /url: https://twitter.com/pixelated - - link "LinkedIn": - - /url: https://www.linkedin.com/company/pixelated-ascent - - link "GitHub": - - /url: https://github.com/pixelated - - heading "Send Us a Message" [level=2] - - text: Name - - textbox "Name": Test User - - text: Email - - textbox "Email": test@example.com - - text: Subject - - textbox "Subject" - - text: Message - - textbox "Message": This is a test message - - button "Send Message" -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot - 128 | await page.screenshot({ - 129 | path: `./test-results/cross-browser/${browserName}-nav-mobile.png`, - 130 | }) - 131 | }) - 132 | - 133 | // Test form interactions across browsers - 134 | test('forms work correctly across browsers', async ({ - 135 | page, - 136 | browserName, - 137 | }) => { - 138 | // Go to contact page with a form - 139 | await page.goto('/contact') - 140 | - 141 | // Fill out form - 142 | await page.fill('input[name="name"]', 'Test User') - 143 | await page.fill('input[name="email"]', 'test@example.com') - 144 | await page.fill('textarea[name="message"]', 'This is a test message') - 145 | - 146 | // Take a screenshot of the filled form - 147 | await page.screenshot({ - 148 | path: `./test-results/cross-browser/${browserName}-form.png`, - 149 | }) - 150 | - 151 | // Submit form (but intercept the actual submission) - 152 | await page.route('**/api/contact', (route) => { - 153 | route.fulfill({ - 154 | status: 200, - 155 | body: JSON.stringify({ success: true }), - 156 | }) - 157 | }) - 158 | - 159 | await page.click('button[type="submit"]') - 160 | - 161 | // Check for success message -> 162 | await expect(page.locator('text=Thank you for your message')).toBeVisible() - | ^ Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - 163 | }) - 164 | - 165 | // Test animations and transitions - 166 | test('animations and transitions work correctly across browsers', async ({ - 167 | page, - 168 | browserName, - 169 | }) => { - 170 | // Go to a page with animations - 171 | await page.goto('/') - 172 | - 173 | // Scroll to trigger animations - 174 | await page.evaluate(() => window.scrollBy(0, 300)) - 175 | - 176 | // Wait for animations to complete (this is approximate) - 177 | await page.waitForTimeout(1000) - 178 | - 179 | // Take a screenshot after animations - 180 | await page.screenshot({ - 181 | path: `./test-results/cross-browser/${browserName}-animations.png`, - 182 | }) - 183 | }) - 184 | }) - 185 | -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-firefox-retry2/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-firefox-retry2/error-context.md deleted file mode 100644 index bcec3c8147..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-firefox-retry2/error-context.md +++ /dev/null @@ -1,227 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> forms work correctly across browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:134:3 - -# Error details - -``` -Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - -Locator: locator('text=Thank you for your message') -Expected: visible -Received: hidden -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('text=Thank you for your message') - 18 × locator resolved to - - unexpected value "hidden" - - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:162:67 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme": - - img -- main: - - heading "Contact Us" [level=1] - - paragraph: We'd love to hear from you - - article: - - heading "Get in Touch" [level=2] - - paragraph: - Have questions about our technology, interested in partnerships, or - just want to say hello? We'd love to hear from you. - - paragraph: - - strong: 'Email:' - - link "info@pixelatedempathy.com": - - /url: mailto:info@pixelatedempathy.com - - paragraph: - - strong: 'Location:' - - text: San Francisco, CA - - heading "Connect With Us" [level=2] - - paragraph: - Follow us on social media to stay updated with our latest - developments, research insights, and community events. - - link "Twitter": - - /url: https://twitter.com/pixelated - - link "LinkedIn": - - /url: https://www.linkedin.com/company/pixelated-ascent - - link "GitHub": - - /url: https://github.com/pixelated - - heading "Send Us a Message" [level=2] - - text: Name - - textbox "Name": Test User - - text: Email - - textbox "Email": test@example.com - - text: Subject - - textbox "Subject" - - text: Message - - textbox "Message": This is a test message - - button "Send Message" -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot - 128 | await page.screenshot({ - 129 | path: `./test-results/cross-browser/${browserName}-nav-mobile.png`, - 130 | }) - 131 | }) - 132 | - 133 | // Test form interactions across browsers - 134 | test('forms work correctly across browsers', async ({ - 135 | page, - 136 | browserName, - 137 | }) => { - 138 | // Go to contact page with a form - 139 | await page.goto('/contact') - 140 | - 141 | // Fill out form - 142 | await page.fill('input[name="name"]', 'Test User') - 143 | await page.fill('input[name="email"]', 'test@example.com') - 144 | await page.fill('textarea[name="message"]', 'This is a test message') - 145 | - 146 | // Take a screenshot of the filled form - 147 | await page.screenshot({ - 148 | path: `./test-results/cross-browser/${browserName}-form.png`, - 149 | }) - 150 | - 151 | // Submit form (but intercept the actual submission) - 152 | await page.route('**/api/contact', (route) => { - 153 | route.fulfill({ - 154 | status: 200, - 155 | body: JSON.stringify({ success: true }), - 156 | }) - 157 | }) - 158 | - 159 | await page.click('button[type="submit"]') - 160 | - 161 | // Check for success message -> 162 | await expect(page.locator('text=Thank you for your message')).toBeVisible() - | ^ Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - 163 | }) - 164 | - 165 | // Test animations and transitions - 166 | test('animations and transitions work correctly across browsers', async ({ - 167 | page, - 168 | browserName, - 169 | }) => { - 170 | // Go to a page with animations - 171 | await page.goto('/') - 172 | - 173 | // Scroll to trigger animations - 174 | await page.evaluate(() => window.scrollBy(0, 300)) - 175 | - 176 | // Wait for animations to complete (this is approximate) - 177 | await page.waitForTimeout(1000) - 178 | - 179 | // Take a screenshot after animations - 180 | await page.screenshot({ - 181 | path: `./test-results/cross-browser/${browserName}-animations.png`, - 182 | }) - 183 | }) - 184 | }) - 185 | -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-firefox/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-firefox/error-context.md deleted file mode 100644 index bcec3c8147..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-firefox/error-context.md +++ /dev/null @@ -1,227 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> forms work correctly across browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:134:3 - -# Error details - -``` -Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - -Locator: locator('text=Thank you for your message') -Expected: visible -Received: hidden -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('text=Thank you for your message') - 18 × locator resolved to - - unexpected value "hidden" - - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:162:67 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme": - - img -- main: - - heading "Contact Us" [level=1] - - paragraph: We'd love to hear from you - - article: - - heading "Get in Touch" [level=2] - - paragraph: - Have questions about our technology, interested in partnerships, or - just want to say hello? We'd love to hear from you. - - paragraph: - - strong: 'Email:' - - link "info@pixelatedempathy.com": - - /url: mailto:info@pixelatedempathy.com - - paragraph: - - strong: 'Location:' - - text: San Francisco, CA - - heading "Connect With Us" [level=2] - - paragraph: - Follow us on social media to stay updated with our latest - developments, research insights, and community events. - - link "Twitter": - - /url: https://twitter.com/pixelated - - link "LinkedIn": - - /url: https://www.linkedin.com/company/pixelated-ascent - - link "GitHub": - - /url: https://github.com/pixelated - - heading "Send Us a Message" [level=2] - - text: Name - - textbox "Name": Test User - - text: Email - - textbox "Email": test@example.com - - text: Subject - - textbox "Subject" - - text: Message - - textbox "Message": This is a test message - - button "Send Message" -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot - 128 | await page.screenshot({ - 129 | path: `./test-results/cross-browser/${browserName}-nav-mobile.png`, - 130 | }) - 131 | }) - 132 | - 133 | // Test form interactions across browsers - 134 | test('forms work correctly across browsers', async ({ - 135 | page, - 136 | browserName, - 137 | }) => { - 138 | // Go to contact page with a form - 139 | await page.goto('/contact') - 140 | - 141 | // Fill out form - 142 | await page.fill('input[name="name"]', 'Test User') - 143 | await page.fill('input[name="email"]', 'test@example.com') - 144 | await page.fill('textarea[name="message"]', 'This is a test message') - 145 | - 146 | // Take a screenshot of the filled form - 147 | await page.screenshot({ - 148 | path: `./test-results/cross-browser/${browserName}-form.png`, - 149 | }) - 150 | - 151 | // Submit form (but intercept the actual submission) - 152 | await page.route('**/api/contact', (route) => { - 153 | route.fulfill({ - 154 | status: 200, - 155 | body: JSON.stringify({ success: true }), - 156 | }) - 157 | }) - 158 | - 159 | await page.click('button[type="submit"]') - 160 | - 161 | // Check for success message -> 162 | await expect(page.locator('text=Thank you for your message')).toBeVisible() - | ^ Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - 163 | }) - 164 | - 165 | // Test animations and transitions - 166 | test('animations and transitions work correctly across browsers', async ({ - 167 | page, - 168 | browserName, - 169 | }) => { - 170 | // Go to a page with animations - 171 | await page.goto('/') - 172 | - 173 | // Scroll to trigger animations - 174 | await page.evaluate(() => window.scrollBy(0, 300)) - 175 | - 176 | // Wait for animations to complete (this is approximate) - 177 | await page.waitForTimeout(1000) - 178 | - 179 | // Take a screenshot after animations - 180 | await page.screenshot({ - 181 | path: `./test-results/cross-browser/${browserName}-animations.png`, - 182 | }) - 183 | }) - 184 | }) - 185 | -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-webkit-retry1/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-webkit-retry1/error-context.md deleted file mode 100644 index 96de9e43c8..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-webkit-retry1/error-context.md +++ /dev/null @@ -1,226 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> forms work correctly across browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:134:3 - -# Error details - -``` -Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - -Locator: locator('text=Thank you for your message') -Expected: visible -Received: hidden -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('text=Thank you for your message') - 19 × locator resolved to - - unexpected value "hidden" - - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:162:67 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme" -- main: - - heading "Contact Us" [level=1] - - paragraph: We'd love to hear from you - - article: - - heading "Get in Touch" [level=2] - - paragraph: - Have questions about our technology, interested in partnerships, or - just want to say hello? We'd love to hear from you. - - paragraph: - - strong: 'Email:' - - link "info@pixelatedempathy.com": - - /url: mailto:info@pixelatedempathy.com - - paragraph: - - strong: 'Location:' - - text: San Francisco, CA - - heading "Connect With Us" [level=2] - - paragraph: - Follow us on social media to stay updated with our latest - developments, research insights, and community events. - - link "Twitter": - - /url: https://twitter.com/pixelated - - link "LinkedIn": - - /url: https://www.linkedin.com/company/pixelated-ascent - - link "GitHub": - - /url: https://github.com/pixelated - - heading "Send Us a Message" [level=2] - - text: Name - - textbox "Name": Test User - - text: Email - - textbox "Email": test@example.com - - text: Subject - - textbox "Subject" - - text: Message - - textbox "Message": This is a test message - - button "Send Message" -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot - 128 | await page.screenshot({ - 129 | path: `./test-results/cross-browser/${browserName}-nav-mobile.png`, - 130 | }) - 131 | }) - 132 | - 133 | // Test form interactions across browsers - 134 | test('forms work correctly across browsers', async ({ - 135 | page, - 136 | browserName, - 137 | }) => { - 138 | // Go to contact page with a form - 139 | await page.goto('/contact') - 140 | - 141 | // Fill out form - 142 | await page.fill('input[name="name"]', 'Test User') - 143 | await page.fill('input[name="email"]', 'test@example.com') - 144 | await page.fill('textarea[name="message"]', 'This is a test message') - 145 | - 146 | // Take a screenshot of the filled form - 147 | await page.screenshot({ - 148 | path: `./test-results/cross-browser/${browserName}-form.png`, - 149 | }) - 150 | - 151 | // Submit form (but intercept the actual submission) - 152 | await page.route('**/api/contact', (route) => { - 153 | route.fulfill({ - 154 | status: 200, - 155 | body: JSON.stringify({ success: true }), - 156 | }) - 157 | }) - 158 | - 159 | await page.click('button[type="submit"]') - 160 | - 161 | // Check for success message -> 162 | await expect(page.locator('text=Thank you for your message')).toBeVisible() - | ^ Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - 163 | }) - 164 | - 165 | // Test animations and transitions - 166 | test('animations and transitions work correctly across browsers', async ({ - 167 | page, - 168 | browserName, - 169 | }) => { - 170 | // Go to a page with animations - 171 | await page.goto('/') - 172 | - 173 | // Scroll to trigger animations - 174 | await page.evaluate(() => window.scrollBy(0, 300)) - 175 | - 176 | // Wait for animations to complete (this is approximate) - 177 | await page.waitForTimeout(1000) - 178 | - 179 | // Take a screenshot after animations - 180 | await page.screenshot({ - 181 | path: `./test-results/cross-browser/${browserName}-animations.png`, - 182 | }) - 183 | }) - 184 | }) - 185 | -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-webkit-retry2/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-webkit-retry2/error-context.md deleted file mode 100644 index 96de9e43c8..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-webkit-retry2/error-context.md +++ /dev/null @@ -1,226 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> forms work correctly across browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:134:3 - -# Error details - -``` -Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - -Locator: locator('text=Thank you for your message') -Expected: visible -Received: hidden -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('text=Thank you for your message') - 19 × locator resolved to - - unexpected value "hidden" - - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:162:67 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme" -- main: - - heading "Contact Us" [level=1] - - paragraph: We'd love to hear from you - - article: - - heading "Get in Touch" [level=2] - - paragraph: - Have questions about our technology, interested in partnerships, or - just want to say hello? We'd love to hear from you. - - paragraph: - - strong: 'Email:' - - link "info@pixelatedempathy.com": - - /url: mailto:info@pixelatedempathy.com - - paragraph: - - strong: 'Location:' - - text: San Francisco, CA - - heading "Connect With Us" [level=2] - - paragraph: - Follow us on social media to stay updated with our latest - developments, research insights, and community events. - - link "Twitter": - - /url: https://twitter.com/pixelated - - link "LinkedIn": - - /url: https://www.linkedin.com/company/pixelated-ascent - - link "GitHub": - - /url: https://github.com/pixelated - - heading "Send Us a Message" [level=2] - - text: Name - - textbox "Name": Test User - - text: Email - - textbox "Email": test@example.com - - text: Subject - - textbox "Subject" - - text: Message - - textbox "Message": This is a test message - - button "Send Message" -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot - 128 | await page.screenshot({ - 129 | path: `./test-results/cross-browser/${browserName}-nav-mobile.png`, - 130 | }) - 131 | }) - 132 | - 133 | // Test form interactions across browsers - 134 | test('forms work correctly across browsers', async ({ - 135 | page, - 136 | browserName, - 137 | }) => { - 138 | // Go to contact page with a form - 139 | await page.goto('/contact') - 140 | - 141 | // Fill out form - 142 | await page.fill('input[name="name"]', 'Test User') - 143 | await page.fill('input[name="email"]', 'test@example.com') - 144 | await page.fill('textarea[name="message"]', 'This is a test message') - 145 | - 146 | // Take a screenshot of the filled form - 147 | await page.screenshot({ - 148 | path: `./test-results/cross-browser/${browserName}-form.png`, - 149 | }) - 150 | - 151 | // Submit form (but intercept the actual submission) - 152 | await page.route('**/api/contact', (route) => { - 153 | route.fulfill({ - 154 | status: 200, - 155 | body: JSON.stringify({ success: true }), - 156 | }) - 157 | }) - 158 | - 159 | await page.click('button[type="submit"]') - 160 | - 161 | // Check for success message -> 162 | await expect(page.locator('text=Thank you for your message')).toBeVisible() - | ^ Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - 163 | }) - 164 | - 165 | // Test animations and transitions - 166 | test('animations and transitions work correctly across browsers', async ({ - 167 | page, - 168 | browserName, - 169 | }) => { - 170 | // Go to a page with animations - 171 | await page.goto('/') - 172 | - 173 | // Scroll to trigger animations - 174 | await page.evaluate(() => window.scrollBy(0, 300)) - 175 | - 176 | // Wait for animations to complete (this is approximate) - 177 | await page.waitForTimeout(1000) - 178 | - 179 | // Take a screenshot after animations - 180 | await page.screenshot({ - 181 | path: `./test-results/cross-browser/${browserName}-animations.png`, - 182 | }) - 183 | }) - 184 | }) - 185 | -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-webkit/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-webkit/error-context.md deleted file mode 100644 index 96de9e43c8..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-548b1-k-correctly-across-browsers-webkit/error-context.md +++ /dev/null @@ -1,226 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> forms work correctly across browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:134:3 - -# Error details - -``` -Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - -Locator: locator('text=Thank you for your message') -Expected: visible -Received: hidden -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('text=Thank you for your message') - 19 × locator resolved to - - unexpected value "hidden" - - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:162:67 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme" -- main: - - heading "Contact Us" [level=1] - - paragraph: We'd love to hear from you - - article: - - heading "Get in Touch" [level=2] - - paragraph: - Have questions about our technology, interested in partnerships, or - just want to say hello? We'd love to hear from you. - - paragraph: - - strong: 'Email:' - - link "info@pixelatedempathy.com": - - /url: mailto:info@pixelatedempathy.com - - paragraph: - - strong: 'Location:' - - text: San Francisco, CA - - heading "Connect With Us" [level=2] - - paragraph: - Follow us on social media to stay updated with our latest - developments, research insights, and community events. - - link "Twitter": - - /url: https://twitter.com/pixelated - - link "LinkedIn": - - /url: https://www.linkedin.com/company/pixelated-ascent - - link "GitHub": - - /url: https://github.com/pixelated - - heading "Send Us a Message" [level=2] - - text: Name - - textbox "Name": Test User - - text: Email - - textbox "Email": test@example.com - - text: Subject - - textbox "Subject" - - text: Message - - textbox "Message": This is a test message - - button "Send Message" -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot - 128 | await page.screenshot({ - 129 | path: `./test-results/cross-browser/${browserName}-nav-mobile.png`, - 130 | }) - 131 | }) - 132 | - 133 | // Test form interactions across browsers - 134 | test('forms work correctly across browsers', async ({ - 135 | page, - 136 | browserName, - 137 | }) => { - 138 | // Go to contact page with a form - 139 | await page.goto('/contact') - 140 | - 141 | // Fill out form - 142 | await page.fill('input[name="name"]', 'Test User') - 143 | await page.fill('input[name="email"]', 'test@example.com') - 144 | await page.fill('textarea[name="message"]', 'This is a test message') - 145 | - 146 | // Take a screenshot of the filled form - 147 | await page.screenshot({ - 148 | path: `./test-results/cross-browser/${browserName}-form.png`, - 149 | }) - 150 | - 151 | // Submit form (but intercept the actual submission) - 152 | await page.route('**/api/contact', (route) => { - 153 | route.fulfill({ - 154 | status: 200, - 155 | body: JSON.stringify({ success: true }), - 156 | }) - 157 | }) - 158 | - 159 | await page.click('button[type="submit"]') - 160 | - 161 | // Check for success message -> 162 | await expect(page.locator('text=Thank you for your message')).toBeVisible() - | ^ Error: Timed out 15000ms waiting for expect(locator).toBeVisible() - 163 | }) - 164 | - 165 | // Test animations and transitions - 166 | test('animations and transitions work correctly across browsers', async ({ - 167 | page, - 168 | browserName, - 169 | }) => { - 170 | // Go to a page with animations - 171 | await page.goto('/') - 172 | - 173 | // Scroll to trigger animations - 174 | await page.evaluate(() => window.scrollBy(0, 300)) - 175 | - 176 | // Wait for animations to complete (this is approximate) - 177 | await page.waitForTimeout(1000) - 178 | - 179 | // Take a screenshot after animations - 180 | await page.screenshot({ - 181 | path: `./test-results/cross-browser/${browserName}-animations.png`, - 182 | }) - 183 | }) - 184 | }) - 185 | -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-63c28-k-correctly-across-browsers-chromium/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-63c28-k-correctly-across-browsers-chromium/error-context.md deleted file mode 100644 index f6f7454857..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-63c28-k-correctly-across-browsers-chromium/error-context.md +++ /dev/null @@ -1,137 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> animations and transitions work correctly - across browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:166:3 - -# Error details - -``` -Error: page.goto: Test timeout of 120000ms exceeded. -Call log: - - navigating to "http://localhost:3000/", waiting until "load" - - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:171:16 -``` - -# Test source - -```ts - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot - 128 | await page.screenshot({ - 129 | path: `./test-results/cross-browser/${browserName}-nav-mobile.png`, - 130 | }) - 131 | }) - 132 | - 133 | // Test form interactions across browsers - 134 | test('forms work correctly across browsers', async ({ - 135 | page, - 136 | browserName, - 137 | }) => { - 138 | // Go to contact page with a form - 139 | await page.goto('/contact') - 140 | - 141 | // Fill out form - 142 | await page.fill('input[name="name"]', 'Test User') - 143 | await page.fill('input[name="email"]', 'test@example.com') - 144 | await page.fill('textarea[name="message"]', 'This is a test message') - 145 | - 146 | // Take a screenshot of the filled form - 147 | await page.screenshot({ - 148 | path: `./test-results/cross-browser/${browserName}-form.png`, - 149 | }) - 150 | - 151 | // Submit form (but intercept the actual submission) - 152 | await page.route('**/api/contact', (route) => { - 153 | route.fulfill({ - 154 | status: 200, - 155 | body: JSON.stringify({ success: true }), - 156 | }) - 157 | }) - 158 | - 159 | await page.click('button[type="submit"]') - 160 | - 161 | // Check for success message - 162 | await expect(page.locator('text=Thank you for your message')).toBeVisible() - 163 | }) - 164 | - 165 | // Test animations and transitions - 166 | test('animations and transitions work correctly across browsers', async ({ - 167 | page, - 168 | browserName, - 169 | }) => { - 170 | // Go to a page with animations -> 171 | await page.goto('/') - | ^ Error: page.goto: Test timeout of 120000ms exceeded. - 172 | - 173 | // Scroll to trigger animations - 174 | await page.evaluate(() => window.scrollBy(0, 300)) - 175 | - 176 | // Wait for animations to complete (this is approximate) - 177 | await page.waitForTimeout(1000) - 178 | - 179 | // Take a screenshot after animations - 180 | await page.screenshot({ - 181 | path: `./test-results/cross-browser/${browserName}-animations.png`, - 182 | }) - 183 | }) - 184 | }) - 185 | -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-chromium-retry1/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-chromium-retry1/error-context.md deleted file mode 100644 index c9da6e688e..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-chromium-retry1/error-context.md +++ /dev/null @@ -1,200 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> home page should work in all browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 2 elements: - 1)
…
aka getByRole('banner') - 2)
aka locator('#main header') - -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('header') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:27:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme": - - img -- main: - - paragraph: - - text: - Pixelated Empathy - the premier destination for the world of - AI-assisted emotional intelligence. Therapy training has never been - more accessible, or more effective. - - strong: Ever. -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible -> 27 | await expect(page.locator('header')).toBeVisible() - | ^ Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 2 elements: - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-chromium-retry2/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-chromium-retry2/error-context.md deleted file mode 100644 index c9da6e688e..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-chromium-retry2/error-context.md +++ /dev/null @@ -1,200 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> home page should work in all browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 2 elements: - 1)
…
aka getByRole('banner') - 2)
aka locator('#main header') - -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('header') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:27:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme": - - img -- main: - - paragraph: - - text: - Pixelated Empathy - the premier destination for the world of - AI-assisted emotional intelligence. Therapy training has never been - more accessible, or more effective. - - strong: Ever. -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible -> 27 | await expect(page.locator('header')).toBeVisible() - | ^ Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 2 elements: - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-chromium/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-chromium/error-context.md deleted file mode 100644 index c9da6e688e..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-chromium/error-context.md +++ /dev/null @@ -1,200 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> home page should work in all browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 2 elements: - 1)
…
aka getByRole('banner') - 2)
aka locator('#main header') - -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('header') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:27:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme": - - img -- main: - - paragraph: - - text: - Pixelated Empathy - the premier destination for the world of - AI-assisted emotional intelligence. Therapy training has never been - more accessible, or more effective. - - strong: Ever. -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible -> 27 | await expect(page.locator('header')).toBeVisible() - | ^ Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 2 elements: - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-firefox-retry1/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-firefox-retry1/error-context.md deleted file mode 100644 index 279c648347..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-firefox-retry1/error-context.md +++ /dev/null @@ -1,205 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> home page should work in all browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 7 elements: - 1)
…
aka getByRole('banner') - 2)
aka locator('#main header') - 3)
…
aka getByText('5.7.10 Copy debug info') - 4)
…
aka getByText('Featured integrationsView all') - 5)
…
aka locator('header').filter({ hasText: 'Audit 0' }) - 6)
…
aka locator('header').filter({ hasText: 'No accessibility or' }) - 7)
…
aka locator('header').filter({ hasText: 'Settings' }) - -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('header') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:27:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme": - - img -- main: - - paragraph: - - text: - Pixelated Empathy - the premier destination for the world of - AI-assisted emotional intelligence. Therapy training has never been - more accessible, or more effective. - - strong: Ever. -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible -> 27 | await expect(page.locator('header')).toBeVisible() - | ^ Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 7 elements: - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-firefox-retry2/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-firefox-retry2/error-context.md deleted file mode 100644 index 279c648347..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-firefox-retry2/error-context.md +++ /dev/null @@ -1,205 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> home page should work in all browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 7 elements: - 1)
…
aka getByRole('banner') - 2)
aka locator('#main header') - 3)
…
aka getByText('5.7.10 Copy debug info') - 4)
…
aka getByText('Featured integrationsView all') - 5)
…
aka locator('header').filter({ hasText: 'Audit 0' }) - 6)
…
aka locator('header').filter({ hasText: 'No accessibility or' }) - 7)
…
aka locator('header').filter({ hasText: 'Settings' }) - -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('header') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:27:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme": - - img -- main: - - paragraph: - - text: - Pixelated Empathy - the premier destination for the world of - AI-assisted emotional intelligence. Therapy training has never been - more accessible, or more effective. - - strong: Ever. -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible -> 27 | await expect(page.locator('header')).toBeVisible() - | ^ Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 7 elements: - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-firefox/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-firefox/error-context.md deleted file mode 100644 index 279c648347..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-firefox/error-context.md +++ /dev/null @@ -1,205 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> home page should work in all browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 7 elements: - 1)
…
aka getByRole('banner') - 2)
aka locator('#main header') - 3)
…
aka getByText('5.7.10 Copy debug info') - 4)
…
aka getByText('Featured integrationsView all') - 5)
…
aka locator('header').filter({ hasText: 'Audit 0' }) - 6)
…
aka locator('header').filter({ hasText: 'No accessibility or' }) - 7)
…
aka locator('header').filter({ hasText: 'Settings' }) - -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('header') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:27:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme": - - img -- main: - - paragraph: - - text: - Pixelated Empathy - the premier destination for the world of - AI-assisted emotional intelligence. Therapy training has never been - more accessible, or more effective. - - strong: Ever. -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible -> 27 | await expect(page.locator('header')).toBeVisible() - | ^ Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 7 elements: - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-webkit-retry1/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-webkit-retry1/error-context.md deleted file mode 100644 index a509430801..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-webkit-retry1/error-context.md +++ /dev/null @@ -1,199 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> home page should work in all browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 2 elements: - 1)
…
aka getByRole('banner') - 2)
aka locator('#main header') - -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('header') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:27:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme" -- main: - - paragraph: - - text: - Pixelated Empathy - the premier destination for the world of - AI-assisted emotional intelligence. Therapy training has never been - more accessible, or more effective. - - strong: Ever. -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible -> 27 | await expect(page.locator('header')).toBeVisible() - | ^ Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 2 elements: - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-webkit-retry2/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-webkit-retry2/error-context.md deleted file mode 100644 index a509430801..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-webkit-retry2/error-context.md +++ /dev/null @@ -1,199 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> home page should work in all browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 2 elements: - 1)
…
aka getByRole('banner') - 2)
aka locator('#main header') - -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('header') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:27:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme" -- main: - - paragraph: - - text: - Pixelated Empathy - the premier destination for the world of - AI-assisted emotional intelligence. Therapy training has never been - more accessible, or more effective. - - strong: Ever. -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible -> 27 | await expect(page.locator('header')).toBeVisible() - | ^ Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 2 elements: - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-webkit/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-webkit/error-context.md deleted file mode 100644 index a509430801..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-65472-should-work-in-all-browsers-webkit/error-context.md +++ /dev/null @@ -1,199 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> home page should work in all browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 2 elements: - 1)
…
aka getByRole('banner') - 2)
aka locator('#main header') - -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('header') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:27:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme" -- main: - - paragraph: - - text: - Pixelated Empathy - the premier destination for the world of - AI-assisted emotional intelligence. Therapy training has never been - more accessible, or more effective. - - strong: Ever. -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible -> 27 | await expect(page.locator('header')).toBeVisible() - | ^ Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 2 elements: - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-chromium-retry1/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-chromium-retry1/error-context.md deleted file mode 100644 index 9a685f39d9..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-chromium-retry1/error-context.md +++ /dev/null @@ -1,321 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> documentation page should work in all - browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 2 elements: - 1)
…
aka getByRole('banner') - 2)
…
aka getByText('Documentation Welcome to the Pixelated Empathy Documentation', { exact: true }) - -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('header') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:27:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- banner: - - link "Pixelated Empathy Logo Pixelated Empathy": - - /url: / - - img "Pixelated Empathy Logo" - - text: Pixelated Empathy - - navigation: - - link "Home": - - /url: / - - link "About": - - /url: /about - - link "Contact": - - /url: /contact - - link "Login": - - /url: /login - - link "Sign Up": - - /url: /signup - - button "Search": - - img - - button: - - img - - button "Switch to dark theme": - - img - - link "Sign in": - - /url: /login -- complementary: - - heading "Documentation" [level=3] - - button "Toggle theme": - - img - - navigation: - - link "Home": - - /url: /docs - - link "API Reference": - - /url: /docs/api - - link "Components": - - /url: /docs/components - - link "Security": - - /url: /docs/security - - link "Guides": - - /url: /docs/guides - - heading "ON THIS PAGE" [level=4] - - link "Latest Updates": - - /url: '#latest-updates' - - link "Popular Topics": - - /url: '#popular-topics' - - link "Get Support": - - /url: '#get-support' -- main: - - article: - - heading "Documentation" [level=1] - - paragraph: Welcome to the Pixelated Empathy Documentation - - heading "Pixelated Empathy Documentation" [level=1] - - paragraph: - Welcome to the Pixelated Empathy documentation. Here you'll find - comprehensive guides and documentation to help you start working - with Pixelated Empathy as quickly as possible. - - link "Tutorial Get up and running with Pixelated Empathy quickly": - - /url: /docs/getting-started - - img - - text: Tutorial - - paragraph: Get up and running with Pixelated Empathy quickly - - link "API Reference Complete API documentation for developers": - - /url: /docs/api - - img - - text: API Reference - - paragraph: Complete API documentation for developers - - link "Components Explore our UI component library": - - /url: /docs/components - - img - - text: Components - - paragraph: Explore our UI component library - - link "Security Learn about our security features and best practices": - - /url: /docs/security - - img - - text: Security - - paragraph: Learn about our security features and best practices - - heading "Latest Updates" [level=2] - - img - - text: Version 2.0 Released - - paragraph: - - text: - We've released version 2.0 of Pixelated Empathy with many new - features and improvements. Check out the - - link "changelog": - - /url: /docs/changelog - - text: for details. - - text: New Feature Performance Security - - heading "Popular Topics" [level=2] - - list: - - listitem: - - link "Authentication and Authorization": - - /url: /docs/authentication - - listitem: - - link "AI Integration": - - /url: /docs/ai-integration - - listitem: - - link "Deployment Guide": - - /url: /docs/deployment - - listitem: - - link "Troubleshooting": - - /url: /docs/troubleshooting - - listitem: - - link "Frequently Asked Questions": - - /url: /docs/faq - - heading "Get Support" [level=2] - - paragraph: - Need help? Our support team is available to assist you with any - questions or issues. - - link "Email Support Contact our support team directly": - - /url: mailto:support@pixelated.dev - - img - - text: Email Support - - paragraph: Contact our support team directly - - link "Discord Community Join our community on Discord": - - /url: https://discord.gg/pixelated - - img - - text: Discord Community - - paragraph: Join our community on Discord - - link "Previous Page": - - /url: '#' - - img - - text: Previous Page - - link "Next Page": - - /url: '#' - - text: Next Page - - img -- contentinfo: - - link "Logo Pixelated Empathy": - - /url: / - - img "Logo" - - text: Pixelated Empathy - - paragraph: - Secure AI therapy platform with advanced encryption for maximum privacy - and HIPAA compliance. - - link "Twitter": - - /url: '#' - - link "GitHub": - - /url: '#' - - link "LinkedIn": - - /url: '#' - - heading "Platform" [level=3] - - list: - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "Chat": - - /url: /chat - - listitem: - - link "Profile": - - /url: /profile - - heading "Resources" [level=3] - - list: - - listitem: - - link "About": - - /url: /about - - listitem: - - link "Contact": - - /url: /contact - - listitem: - - link "FAQ": - - /url: /faq - - paragraph: © 2025 Pixelated Empathy. All rights reserved. -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible -> 27 | await expect(page.locator('header')).toBeVisible() - | ^ Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 2 elements: - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-chromium-retry2/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-chromium-retry2/error-context.md deleted file mode 100644 index 9a685f39d9..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-chromium-retry2/error-context.md +++ /dev/null @@ -1,321 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> documentation page should work in all - browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 2 elements: - 1)
…
aka getByRole('banner') - 2)
…
aka getByText('Documentation Welcome to the Pixelated Empathy Documentation', { exact: true }) - -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('header') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:27:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- banner: - - link "Pixelated Empathy Logo Pixelated Empathy": - - /url: / - - img "Pixelated Empathy Logo" - - text: Pixelated Empathy - - navigation: - - link "Home": - - /url: / - - link "About": - - /url: /about - - link "Contact": - - /url: /contact - - link "Login": - - /url: /login - - link "Sign Up": - - /url: /signup - - button "Search": - - img - - button: - - img - - button "Switch to dark theme": - - img - - link "Sign in": - - /url: /login -- complementary: - - heading "Documentation" [level=3] - - button "Toggle theme": - - img - - navigation: - - link "Home": - - /url: /docs - - link "API Reference": - - /url: /docs/api - - link "Components": - - /url: /docs/components - - link "Security": - - /url: /docs/security - - link "Guides": - - /url: /docs/guides - - heading "ON THIS PAGE" [level=4] - - link "Latest Updates": - - /url: '#latest-updates' - - link "Popular Topics": - - /url: '#popular-topics' - - link "Get Support": - - /url: '#get-support' -- main: - - article: - - heading "Documentation" [level=1] - - paragraph: Welcome to the Pixelated Empathy Documentation - - heading "Pixelated Empathy Documentation" [level=1] - - paragraph: - Welcome to the Pixelated Empathy documentation. Here you'll find - comprehensive guides and documentation to help you start working - with Pixelated Empathy as quickly as possible. - - link "Tutorial Get up and running with Pixelated Empathy quickly": - - /url: /docs/getting-started - - img - - text: Tutorial - - paragraph: Get up and running with Pixelated Empathy quickly - - link "API Reference Complete API documentation for developers": - - /url: /docs/api - - img - - text: API Reference - - paragraph: Complete API documentation for developers - - link "Components Explore our UI component library": - - /url: /docs/components - - img - - text: Components - - paragraph: Explore our UI component library - - link "Security Learn about our security features and best practices": - - /url: /docs/security - - img - - text: Security - - paragraph: Learn about our security features and best practices - - heading "Latest Updates" [level=2] - - img - - text: Version 2.0 Released - - paragraph: - - text: - We've released version 2.0 of Pixelated Empathy with many new - features and improvements. Check out the - - link "changelog": - - /url: /docs/changelog - - text: for details. - - text: New Feature Performance Security - - heading "Popular Topics" [level=2] - - list: - - listitem: - - link "Authentication and Authorization": - - /url: /docs/authentication - - listitem: - - link "AI Integration": - - /url: /docs/ai-integration - - listitem: - - link "Deployment Guide": - - /url: /docs/deployment - - listitem: - - link "Troubleshooting": - - /url: /docs/troubleshooting - - listitem: - - link "Frequently Asked Questions": - - /url: /docs/faq - - heading "Get Support" [level=2] - - paragraph: - Need help? Our support team is available to assist you with any - questions or issues. - - link "Email Support Contact our support team directly": - - /url: mailto:support@pixelated.dev - - img - - text: Email Support - - paragraph: Contact our support team directly - - link "Discord Community Join our community on Discord": - - /url: https://discord.gg/pixelated - - img - - text: Discord Community - - paragraph: Join our community on Discord - - link "Previous Page": - - /url: '#' - - img - - text: Previous Page - - link "Next Page": - - /url: '#' - - text: Next Page - - img -- contentinfo: - - link "Logo Pixelated Empathy": - - /url: / - - img "Logo" - - text: Pixelated Empathy - - paragraph: - Secure AI therapy platform with advanced encryption for maximum privacy - and HIPAA compliance. - - link "Twitter": - - /url: '#' - - link "GitHub": - - /url: '#' - - link "LinkedIn": - - /url: '#' - - heading "Platform" [level=3] - - list: - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "Chat": - - /url: /chat - - listitem: - - link "Profile": - - /url: /profile - - heading "Resources" [level=3] - - list: - - listitem: - - link "About": - - /url: /about - - listitem: - - link "Contact": - - /url: /contact - - listitem: - - link "FAQ": - - /url: /faq - - paragraph: © 2025 Pixelated Empathy. All rights reserved. -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible -> 27 | await expect(page.locator('header')).toBeVisible() - | ^ Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 2 elements: - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-chromium/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-chromium/error-context.md deleted file mode 100644 index 9a685f39d9..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-chromium/error-context.md +++ /dev/null @@ -1,321 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> documentation page should work in all - browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 2 elements: - 1)
…
aka getByRole('banner') - 2)
…
aka getByText('Documentation Welcome to the Pixelated Empathy Documentation', { exact: true }) - -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('header') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:27:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- banner: - - link "Pixelated Empathy Logo Pixelated Empathy": - - /url: / - - img "Pixelated Empathy Logo" - - text: Pixelated Empathy - - navigation: - - link "Home": - - /url: / - - link "About": - - /url: /about - - link "Contact": - - /url: /contact - - link "Login": - - /url: /login - - link "Sign Up": - - /url: /signup - - button "Search": - - img - - button: - - img - - button "Switch to dark theme": - - img - - link "Sign in": - - /url: /login -- complementary: - - heading "Documentation" [level=3] - - button "Toggle theme": - - img - - navigation: - - link "Home": - - /url: /docs - - link "API Reference": - - /url: /docs/api - - link "Components": - - /url: /docs/components - - link "Security": - - /url: /docs/security - - link "Guides": - - /url: /docs/guides - - heading "ON THIS PAGE" [level=4] - - link "Latest Updates": - - /url: '#latest-updates' - - link "Popular Topics": - - /url: '#popular-topics' - - link "Get Support": - - /url: '#get-support' -- main: - - article: - - heading "Documentation" [level=1] - - paragraph: Welcome to the Pixelated Empathy Documentation - - heading "Pixelated Empathy Documentation" [level=1] - - paragraph: - Welcome to the Pixelated Empathy documentation. Here you'll find - comprehensive guides and documentation to help you start working - with Pixelated Empathy as quickly as possible. - - link "Tutorial Get up and running with Pixelated Empathy quickly": - - /url: /docs/getting-started - - img - - text: Tutorial - - paragraph: Get up and running with Pixelated Empathy quickly - - link "API Reference Complete API documentation for developers": - - /url: /docs/api - - img - - text: API Reference - - paragraph: Complete API documentation for developers - - link "Components Explore our UI component library": - - /url: /docs/components - - img - - text: Components - - paragraph: Explore our UI component library - - link "Security Learn about our security features and best practices": - - /url: /docs/security - - img - - text: Security - - paragraph: Learn about our security features and best practices - - heading "Latest Updates" [level=2] - - img - - text: Version 2.0 Released - - paragraph: - - text: - We've released version 2.0 of Pixelated Empathy with many new - features and improvements. Check out the - - link "changelog": - - /url: /docs/changelog - - text: for details. - - text: New Feature Performance Security - - heading "Popular Topics" [level=2] - - list: - - listitem: - - link "Authentication and Authorization": - - /url: /docs/authentication - - listitem: - - link "AI Integration": - - /url: /docs/ai-integration - - listitem: - - link "Deployment Guide": - - /url: /docs/deployment - - listitem: - - link "Troubleshooting": - - /url: /docs/troubleshooting - - listitem: - - link "Frequently Asked Questions": - - /url: /docs/faq - - heading "Get Support" [level=2] - - paragraph: - Need help? Our support team is available to assist you with any - questions or issues. - - link "Email Support Contact our support team directly": - - /url: mailto:support@pixelated.dev - - img - - text: Email Support - - paragraph: Contact our support team directly - - link "Discord Community Join our community on Discord": - - /url: https://discord.gg/pixelated - - img - - text: Discord Community - - paragraph: Join our community on Discord - - link "Previous Page": - - /url: '#' - - img - - text: Previous Page - - link "Next Page": - - /url: '#' - - text: Next Page - - img -- contentinfo: - - link "Logo Pixelated Empathy": - - /url: / - - img "Logo" - - text: Pixelated Empathy - - paragraph: - Secure AI therapy platform with advanced encryption for maximum privacy - and HIPAA compliance. - - link "Twitter": - - /url: '#' - - link "GitHub": - - /url: '#' - - link "LinkedIn": - - /url: '#' - - heading "Platform" [level=3] - - list: - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "Chat": - - /url: /chat - - listitem: - - link "Profile": - - /url: /profile - - heading "Resources" [level=3] - - list: - - listitem: - - link "About": - - /url: /about - - listitem: - - link "Contact": - - /url: /contact - - listitem: - - link "FAQ": - - /url: /faq - - paragraph: © 2025 Pixelated Empathy. All rights reserved. -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible -> 27 | await expect(page.locator('header')).toBeVisible() - | ^ Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 2 elements: - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-firefox-retry1/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-firefox-retry1/error-context.md deleted file mode 100644 index 55276ade6a..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-firefox-retry1/error-context.md +++ /dev/null @@ -1,326 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> documentation page should work in all - browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 7 elements: - 1)
…
aka getByRole('banner') - 2)
…
aka getByText('Documentation Welcome to the Pixelated Empathy Documentation', { exact: true }) - 3)
…
aka getByText('5.7.10 Copy debug info') - 4)
…
aka getByText('Featured integrationsView all') - 5)
…
aka locator('header').filter({ hasText: 'Audit 0' }) - 6)
…
aka locator('header').filter({ hasText: 'No accessibility or' }) - 7)
…
aka locator('header').filter({ hasText: 'Settings' }) - -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('header') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:27:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- banner: - - link "Pixelated Empathy Logo Pixelated Empathy": - - /url: / - - img "Pixelated Empathy Logo" - - text: Pixelated Empathy - - navigation: - - link "Home": - - /url: / - - link "About": - - /url: /about - - link "Contact": - - /url: /contact - - link "Login": - - /url: /login - - link "Sign Up": - - /url: /signup - - button "Search": - - img - - button: - - img - - button "Switch to dark theme": - - img - - link "Sign in": - - /url: /login -- complementary: - - heading "Documentation" [level=3] - - button "Toggle theme": - - img - - navigation: - - link "Home": - - /url: /docs - - link "API Reference": - - /url: /docs/api - - link "Components": - - /url: /docs/components - - link "Security": - - /url: /docs/security - - link "Guides": - - /url: /docs/guides - - heading "ON THIS PAGE" [level=4] - - link "Latest Updates": - - /url: '#latest-updates' - - link "Popular Topics": - - /url: '#popular-topics' - - link "Get Support": - - /url: '#get-support' -- main: - - article: - - heading "Documentation" [level=1] - - paragraph: Welcome to the Pixelated Empathy Documentation - - heading "Pixelated Empathy Documentation" [level=1] - - paragraph: - Welcome to the Pixelated Empathy documentation. Here you'll find - comprehensive guides and documentation to help you start working - with Pixelated Empathy as quickly as possible. - - link "Tutorial Get up and running with Pixelated Empathy quickly": - - /url: /docs/getting-started - - img - - text: Tutorial - - paragraph: Get up and running with Pixelated Empathy quickly - - link "API Reference Complete API documentation for developers": - - /url: /docs/api - - img - - text: API Reference - - paragraph: Complete API documentation for developers - - link "Components Explore our UI component library": - - /url: /docs/components - - img - - text: Components - - paragraph: Explore our UI component library - - link "Security Learn about our security features and best practices": - - /url: /docs/security - - img - - text: Security - - paragraph: Learn about our security features and best practices - - heading "Latest Updates" [level=2] - - img - - text: Version 2.0 Released - - paragraph: - - text: - We've released version 2.0 of Pixelated Empathy with many new - features and improvements. Check out the - - link "changelog": - - /url: /docs/changelog - - text: for details. - - text: New Feature Performance Security - - heading "Popular Topics" [level=2] - - list: - - listitem: - - link "Authentication and Authorization": - - /url: /docs/authentication - - listitem: - - link "AI Integration": - - /url: /docs/ai-integration - - listitem: - - link "Deployment Guide": - - /url: /docs/deployment - - listitem: - - link "Troubleshooting": - - /url: /docs/troubleshooting - - listitem: - - link "Frequently Asked Questions": - - /url: /docs/faq - - heading "Get Support" [level=2] - - paragraph: - Need help? Our support team is available to assist you with any - questions or issues. - - link "Email Support Contact our support team directly": - - /url: mailto:support@pixelated.dev - - img - - text: Email Support - - paragraph: Contact our support team directly - - link "Discord Community Join our community on Discord": - - /url: https://discord.gg/pixelated - - img - - text: Discord Community - - paragraph: Join our community on Discord - - link "Previous Page": - - /url: '#' - - img - - text: Previous Page - - link "Next Page": - - /url: '#' - - text: Next Page - - img -- contentinfo: - - link "Logo Pixelated Empathy": - - /url: / - - img "Logo" - - text: Pixelated Empathy - - paragraph: - Secure AI therapy platform with advanced encryption for maximum privacy - and HIPAA compliance. - - link "Twitter": - - /url: '#' - - link "GitHub": - - /url: '#' - - link "LinkedIn": - - /url: '#' - - heading "Platform" [level=3] - - list: - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "Chat": - - /url: /chat - - listitem: - - link "Profile": - - /url: /profile - - heading "Resources" [level=3] - - list: - - listitem: - - link "About": - - /url: /about - - listitem: - - link "Contact": - - /url: /contact - - listitem: - - link "FAQ": - - /url: /faq - - paragraph: © 2025 Pixelated Empathy. All rights reserved. -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible -> 27 | await expect(page.locator('header')).toBeVisible() - | ^ Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 7 elements: - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-firefox-retry2/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-firefox-retry2/error-context.md deleted file mode 100644 index 55276ade6a..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-firefox-retry2/error-context.md +++ /dev/null @@ -1,326 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> documentation page should work in all - browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 7 elements: - 1)
…
aka getByRole('banner') - 2)
…
aka getByText('Documentation Welcome to the Pixelated Empathy Documentation', { exact: true }) - 3)
…
aka getByText('5.7.10 Copy debug info') - 4)
…
aka getByText('Featured integrationsView all') - 5)
…
aka locator('header').filter({ hasText: 'Audit 0' }) - 6)
…
aka locator('header').filter({ hasText: 'No accessibility or' }) - 7)
…
aka locator('header').filter({ hasText: 'Settings' }) - -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('header') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:27:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- banner: - - link "Pixelated Empathy Logo Pixelated Empathy": - - /url: / - - img "Pixelated Empathy Logo" - - text: Pixelated Empathy - - navigation: - - link "Home": - - /url: / - - link "About": - - /url: /about - - link "Contact": - - /url: /contact - - link "Login": - - /url: /login - - link "Sign Up": - - /url: /signup - - button "Search": - - img - - button: - - img - - button "Switch to dark theme": - - img - - link "Sign in": - - /url: /login -- complementary: - - heading "Documentation" [level=3] - - button "Toggle theme": - - img - - navigation: - - link "Home": - - /url: /docs - - link "API Reference": - - /url: /docs/api - - link "Components": - - /url: /docs/components - - link "Security": - - /url: /docs/security - - link "Guides": - - /url: /docs/guides - - heading "ON THIS PAGE" [level=4] - - link "Latest Updates": - - /url: '#latest-updates' - - link "Popular Topics": - - /url: '#popular-topics' - - link "Get Support": - - /url: '#get-support' -- main: - - article: - - heading "Documentation" [level=1] - - paragraph: Welcome to the Pixelated Empathy Documentation - - heading "Pixelated Empathy Documentation" [level=1] - - paragraph: - Welcome to the Pixelated Empathy documentation. Here you'll find - comprehensive guides and documentation to help you start working - with Pixelated Empathy as quickly as possible. - - link "Tutorial Get up and running with Pixelated Empathy quickly": - - /url: /docs/getting-started - - img - - text: Tutorial - - paragraph: Get up and running with Pixelated Empathy quickly - - link "API Reference Complete API documentation for developers": - - /url: /docs/api - - img - - text: API Reference - - paragraph: Complete API documentation for developers - - link "Components Explore our UI component library": - - /url: /docs/components - - img - - text: Components - - paragraph: Explore our UI component library - - link "Security Learn about our security features and best practices": - - /url: /docs/security - - img - - text: Security - - paragraph: Learn about our security features and best practices - - heading "Latest Updates" [level=2] - - img - - text: Version 2.0 Released - - paragraph: - - text: - We've released version 2.0 of Pixelated Empathy with many new - features and improvements. Check out the - - link "changelog": - - /url: /docs/changelog - - text: for details. - - text: New Feature Performance Security - - heading "Popular Topics" [level=2] - - list: - - listitem: - - link "Authentication and Authorization": - - /url: /docs/authentication - - listitem: - - link "AI Integration": - - /url: /docs/ai-integration - - listitem: - - link "Deployment Guide": - - /url: /docs/deployment - - listitem: - - link "Troubleshooting": - - /url: /docs/troubleshooting - - listitem: - - link "Frequently Asked Questions": - - /url: /docs/faq - - heading "Get Support" [level=2] - - paragraph: - Need help? Our support team is available to assist you with any - questions or issues. - - link "Email Support Contact our support team directly": - - /url: mailto:support@pixelated.dev - - img - - text: Email Support - - paragraph: Contact our support team directly - - link "Discord Community Join our community on Discord": - - /url: https://discord.gg/pixelated - - img - - text: Discord Community - - paragraph: Join our community on Discord - - link "Previous Page": - - /url: '#' - - img - - text: Previous Page - - link "Next Page": - - /url: '#' - - text: Next Page - - img -- contentinfo: - - link "Logo Pixelated Empathy": - - /url: / - - img "Logo" - - text: Pixelated Empathy - - paragraph: - Secure AI therapy platform with advanced encryption for maximum privacy - and HIPAA compliance. - - link "Twitter": - - /url: '#' - - link "GitHub": - - /url: '#' - - link "LinkedIn": - - /url: '#' - - heading "Platform" [level=3] - - list: - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "Chat": - - /url: /chat - - listitem: - - link "Profile": - - /url: /profile - - heading "Resources" [level=3] - - list: - - listitem: - - link "About": - - /url: /about - - listitem: - - link "Contact": - - /url: /contact - - listitem: - - link "FAQ": - - /url: /faq - - paragraph: © 2025 Pixelated Empathy. All rights reserved. -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible -> 27 | await expect(page.locator('header')).toBeVisible() - | ^ Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 7 elements: - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-firefox/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-firefox/error-context.md deleted file mode 100644 index 55276ade6a..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-firefox/error-context.md +++ /dev/null @@ -1,326 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> documentation page should work in all - browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 7 elements: - 1)
…
aka getByRole('banner') - 2)
…
aka getByText('Documentation Welcome to the Pixelated Empathy Documentation', { exact: true }) - 3)
…
aka getByText('5.7.10 Copy debug info') - 4)
…
aka getByText('Featured integrationsView all') - 5)
…
aka locator('header').filter({ hasText: 'Audit 0' }) - 6)
…
aka locator('header').filter({ hasText: 'No accessibility or' }) - 7)
…
aka locator('header').filter({ hasText: 'Settings' }) - -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('header') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:27:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- banner: - - link "Pixelated Empathy Logo Pixelated Empathy": - - /url: / - - img "Pixelated Empathy Logo" - - text: Pixelated Empathy - - navigation: - - link "Home": - - /url: / - - link "About": - - /url: /about - - link "Contact": - - /url: /contact - - link "Login": - - /url: /login - - link "Sign Up": - - /url: /signup - - button "Search": - - img - - button: - - img - - button "Switch to dark theme": - - img - - link "Sign in": - - /url: /login -- complementary: - - heading "Documentation" [level=3] - - button "Toggle theme": - - img - - navigation: - - link "Home": - - /url: /docs - - link "API Reference": - - /url: /docs/api - - link "Components": - - /url: /docs/components - - link "Security": - - /url: /docs/security - - link "Guides": - - /url: /docs/guides - - heading "ON THIS PAGE" [level=4] - - link "Latest Updates": - - /url: '#latest-updates' - - link "Popular Topics": - - /url: '#popular-topics' - - link "Get Support": - - /url: '#get-support' -- main: - - article: - - heading "Documentation" [level=1] - - paragraph: Welcome to the Pixelated Empathy Documentation - - heading "Pixelated Empathy Documentation" [level=1] - - paragraph: - Welcome to the Pixelated Empathy documentation. Here you'll find - comprehensive guides and documentation to help you start working - with Pixelated Empathy as quickly as possible. - - link "Tutorial Get up and running with Pixelated Empathy quickly": - - /url: /docs/getting-started - - img - - text: Tutorial - - paragraph: Get up and running with Pixelated Empathy quickly - - link "API Reference Complete API documentation for developers": - - /url: /docs/api - - img - - text: API Reference - - paragraph: Complete API documentation for developers - - link "Components Explore our UI component library": - - /url: /docs/components - - img - - text: Components - - paragraph: Explore our UI component library - - link "Security Learn about our security features and best practices": - - /url: /docs/security - - img - - text: Security - - paragraph: Learn about our security features and best practices - - heading "Latest Updates" [level=2] - - img - - text: Version 2.0 Released - - paragraph: - - text: - We've released version 2.0 of Pixelated Empathy with many new - features and improvements. Check out the - - link "changelog": - - /url: /docs/changelog - - text: for details. - - text: New Feature Performance Security - - heading "Popular Topics" [level=2] - - list: - - listitem: - - link "Authentication and Authorization": - - /url: /docs/authentication - - listitem: - - link "AI Integration": - - /url: /docs/ai-integration - - listitem: - - link "Deployment Guide": - - /url: /docs/deployment - - listitem: - - link "Troubleshooting": - - /url: /docs/troubleshooting - - listitem: - - link "Frequently Asked Questions": - - /url: /docs/faq - - heading "Get Support" [level=2] - - paragraph: - Need help? Our support team is available to assist you with any - questions or issues. - - link "Email Support Contact our support team directly": - - /url: mailto:support@pixelated.dev - - img - - text: Email Support - - paragraph: Contact our support team directly - - link "Discord Community Join our community on Discord": - - /url: https://discord.gg/pixelated - - img - - text: Discord Community - - paragraph: Join our community on Discord - - link "Previous Page": - - /url: '#' - - img - - text: Previous Page - - link "Next Page": - - /url: '#' - - text: Next Page - - img -- contentinfo: - - link "Logo Pixelated Empathy": - - /url: / - - img "Logo" - - text: Pixelated Empathy - - paragraph: - Secure AI therapy platform with advanced encryption for maximum privacy - and HIPAA compliance. - - link "Twitter": - - /url: '#' - - link "GitHub": - - /url: '#' - - link "LinkedIn": - - /url: '#' - - heading "Platform" [level=3] - - list: - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "Chat": - - /url: /chat - - listitem: - - link "Profile": - - /url: /profile - - heading "Resources" [level=3] - - list: - - listitem: - - link "About": - - /url: /about - - listitem: - - link "Contact": - - /url: /contact - - listitem: - - link "FAQ": - - /url: /faq - - paragraph: © 2025 Pixelated Empathy. All rights reserved. -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible -> 27 | await expect(page.locator('header')).toBeVisible() - | ^ Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 7 elements: - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-webkit-retry1/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-webkit-retry1/error-context.md deleted file mode 100644 index 9a685f39d9..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-webkit-retry1/error-context.md +++ /dev/null @@ -1,321 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> documentation page should work in all - browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 2 elements: - 1)
…
aka getByRole('banner') - 2)
…
aka getByText('Documentation Welcome to the Pixelated Empathy Documentation', { exact: true }) - -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('header') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:27:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- banner: - - link "Pixelated Empathy Logo Pixelated Empathy": - - /url: / - - img "Pixelated Empathy Logo" - - text: Pixelated Empathy - - navigation: - - link "Home": - - /url: / - - link "About": - - /url: /about - - link "Contact": - - /url: /contact - - link "Login": - - /url: /login - - link "Sign Up": - - /url: /signup - - button "Search": - - img - - button: - - img - - button "Switch to dark theme": - - img - - link "Sign in": - - /url: /login -- complementary: - - heading "Documentation" [level=3] - - button "Toggle theme": - - img - - navigation: - - link "Home": - - /url: /docs - - link "API Reference": - - /url: /docs/api - - link "Components": - - /url: /docs/components - - link "Security": - - /url: /docs/security - - link "Guides": - - /url: /docs/guides - - heading "ON THIS PAGE" [level=4] - - link "Latest Updates": - - /url: '#latest-updates' - - link "Popular Topics": - - /url: '#popular-topics' - - link "Get Support": - - /url: '#get-support' -- main: - - article: - - heading "Documentation" [level=1] - - paragraph: Welcome to the Pixelated Empathy Documentation - - heading "Pixelated Empathy Documentation" [level=1] - - paragraph: - Welcome to the Pixelated Empathy documentation. Here you'll find - comprehensive guides and documentation to help you start working - with Pixelated Empathy as quickly as possible. - - link "Tutorial Get up and running with Pixelated Empathy quickly": - - /url: /docs/getting-started - - img - - text: Tutorial - - paragraph: Get up and running with Pixelated Empathy quickly - - link "API Reference Complete API documentation for developers": - - /url: /docs/api - - img - - text: API Reference - - paragraph: Complete API documentation for developers - - link "Components Explore our UI component library": - - /url: /docs/components - - img - - text: Components - - paragraph: Explore our UI component library - - link "Security Learn about our security features and best practices": - - /url: /docs/security - - img - - text: Security - - paragraph: Learn about our security features and best practices - - heading "Latest Updates" [level=2] - - img - - text: Version 2.0 Released - - paragraph: - - text: - We've released version 2.0 of Pixelated Empathy with many new - features and improvements. Check out the - - link "changelog": - - /url: /docs/changelog - - text: for details. - - text: New Feature Performance Security - - heading "Popular Topics" [level=2] - - list: - - listitem: - - link "Authentication and Authorization": - - /url: /docs/authentication - - listitem: - - link "AI Integration": - - /url: /docs/ai-integration - - listitem: - - link "Deployment Guide": - - /url: /docs/deployment - - listitem: - - link "Troubleshooting": - - /url: /docs/troubleshooting - - listitem: - - link "Frequently Asked Questions": - - /url: /docs/faq - - heading "Get Support" [level=2] - - paragraph: - Need help? Our support team is available to assist you with any - questions or issues. - - link "Email Support Contact our support team directly": - - /url: mailto:support@pixelated.dev - - img - - text: Email Support - - paragraph: Contact our support team directly - - link "Discord Community Join our community on Discord": - - /url: https://discord.gg/pixelated - - img - - text: Discord Community - - paragraph: Join our community on Discord - - link "Previous Page": - - /url: '#' - - img - - text: Previous Page - - link "Next Page": - - /url: '#' - - text: Next Page - - img -- contentinfo: - - link "Logo Pixelated Empathy": - - /url: / - - img "Logo" - - text: Pixelated Empathy - - paragraph: - Secure AI therapy platform with advanced encryption for maximum privacy - and HIPAA compliance. - - link "Twitter": - - /url: '#' - - link "GitHub": - - /url: '#' - - link "LinkedIn": - - /url: '#' - - heading "Platform" [level=3] - - list: - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "Chat": - - /url: /chat - - listitem: - - link "Profile": - - /url: /profile - - heading "Resources" [level=3] - - list: - - listitem: - - link "About": - - /url: /about - - listitem: - - link "Contact": - - /url: /contact - - listitem: - - link "FAQ": - - /url: /faq - - paragraph: © 2025 Pixelated Empathy. All rights reserved. -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible -> 27 | await expect(page.locator('header')).toBeVisible() - | ^ Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 2 elements: - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-webkit-retry2/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-webkit-retry2/error-context.md deleted file mode 100644 index 9a685f39d9..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-webkit-retry2/error-context.md +++ /dev/null @@ -1,321 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> documentation page should work in all - browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 2 elements: - 1)
…
aka getByRole('banner') - 2)
…
aka getByText('Documentation Welcome to the Pixelated Empathy Documentation', { exact: true }) - -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('header') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:27:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- banner: - - link "Pixelated Empathy Logo Pixelated Empathy": - - /url: / - - img "Pixelated Empathy Logo" - - text: Pixelated Empathy - - navigation: - - link "Home": - - /url: / - - link "About": - - /url: /about - - link "Contact": - - /url: /contact - - link "Login": - - /url: /login - - link "Sign Up": - - /url: /signup - - button "Search": - - img - - button: - - img - - button "Switch to dark theme": - - img - - link "Sign in": - - /url: /login -- complementary: - - heading "Documentation" [level=3] - - button "Toggle theme": - - img - - navigation: - - link "Home": - - /url: /docs - - link "API Reference": - - /url: /docs/api - - link "Components": - - /url: /docs/components - - link "Security": - - /url: /docs/security - - link "Guides": - - /url: /docs/guides - - heading "ON THIS PAGE" [level=4] - - link "Latest Updates": - - /url: '#latest-updates' - - link "Popular Topics": - - /url: '#popular-topics' - - link "Get Support": - - /url: '#get-support' -- main: - - article: - - heading "Documentation" [level=1] - - paragraph: Welcome to the Pixelated Empathy Documentation - - heading "Pixelated Empathy Documentation" [level=1] - - paragraph: - Welcome to the Pixelated Empathy documentation. Here you'll find - comprehensive guides and documentation to help you start working - with Pixelated Empathy as quickly as possible. - - link "Tutorial Get up and running with Pixelated Empathy quickly": - - /url: /docs/getting-started - - img - - text: Tutorial - - paragraph: Get up and running with Pixelated Empathy quickly - - link "API Reference Complete API documentation for developers": - - /url: /docs/api - - img - - text: API Reference - - paragraph: Complete API documentation for developers - - link "Components Explore our UI component library": - - /url: /docs/components - - img - - text: Components - - paragraph: Explore our UI component library - - link "Security Learn about our security features and best practices": - - /url: /docs/security - - img - - text: Security - - paragraph: Learn about our security features and best practices - - heading "Latest Updates" [level=2] - - img - - text: Version 2.0 Released - - paragraph: - - text: - We've released version 2.0 of Pixelated Empathy with many new - features and improvements. Check out the - - link "changelog": - - /url: /docs/changelog - - text: for details. - - text: New Feature Performance Security - - heading "Popular Topics" [level=2] - - list: - - listitem: - - link "Authentication and Authorization": - - /url: /docs/authentication - - listitem: - - link "AI Integration": - - /url: /docs/ai-integration - - listitem: - - link "Deployment Guide": - - /url: /docs/deployment - - listitem: - - link "Troubleshooting": - - /url: /docs/troubleshooting - - listitem: - - link "Frequently Asked Questions": - - /url: /docs/faq - - heading "Get Support" [level=2] - - paragraph: - Need help? Our support team is available to assist you with any - questions or issues. - - link "Email Support Contact our support team directly": - - /url: mailto:support@pixelated.dev - - img - - text: Email Support - - paragraph: Contact our support team directly - - link "Discord Community Join our community on Discord": - - /url: https://discord.gg/pixelated - - img - - text: Discord Community - - paragraph: Join our community on Discord - - link "Previous Page": - - /url: '#' - - img - - text: Previous Page - - link "Next Page": - - /url: '#' - - text: Next Page - - img -- contentinfo: - - link "Logo Pixelated Empathy": - - /url: / - - img "Logo" - - text: Pixelated Empathy - - paragraph: - Secure AI therapy platform with advanced encryption for maximum privacy - and HIPAA compliance. - - link "Twitter": - - /url: '#' - - link "GitHub": - - /url: '#' - - link "LinkedIn": - - /url: '#' - - heading "Platform" [level=3] - - list: - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "Chat": - - /url: /chat - - listitem: - - link "Profile": - - /url: /profile - - heading "Resources" [level=3] - - list: - - listitem: - - link "About": - - /url: /about - - listitem: - - link "Contact": - - /url: /contact - - listitem: - - link "FAQ": - - /url: /faq - - paragraph: © 2025 Pixelated Empathy. All rights reserved. -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible -> 27 | await expect(page.locator('header')).toBeVisible() - | ^ Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 2 elements: - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-webkit/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-webkit/error-context.md deleted file mode 100644 index 9a685f39d9..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-8bfdd-should-work-in-all-browsers-webkit/error-context.md +++ /dev/null @@ -1,321 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> documentation page should work in all - browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 2 elements: - 1)
…
aka getByRole('banner') - 2)
…
aka getByText('Documentation Welcome to the Pixelated Empathy Documentation', { exact: true }) - -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('header') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:27:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- banner: - - link "Pixelated Empathy Logo Pixelated Empathy": - - /url: / - - img "Pixelated Empathy Logo" - - text: Pixelated Empathy - - navigation: - - link "Home": - - /url: / - - link "About": - - /url: /about - - link "Contact": - - /url: /contact - - link "Login": - - /url: /login - - link "Sign Up": - - /url: /signup - - button "Search": - - img - - button: - - img - - button "Switch to dark theme": - - img - - link "Sign in": - - /url: /login -- complementary: - - heading "Documentation" [level=3] - - button "Toggle theme": - - img - - navigation: - - link "Home": - - /url: /docs - - link "API Reference": - - /url: /docs/api - - link "Components": - - /url: /docs/components - - link "Security": - - /url: /docs/security - - link "Guides": - - /url: /docs/guides - - heading "ON THIS PAGE" [level=4] - - link "Latest Updates": - - /url: '#latest-updates' - - link "Popular Topics": - - /url: '#popular-topics' - - link "Get Support": - - /url: '#get-support' -- main: - - article: - - heading "Documentation" [level=1] - - paragraph: Welcome to the Pixelated Empathy Documentation - - heading "Pixelated Empathy Documentation" [level=1] - - paragraph: - Welcome to the Pixelated Empathy documentation. Here you'll find - comprehensive guides and documentation to help you start working - with Pixelated Empathy as quickly as possible. - - link "Tutorial Get up and running with Pixelated Empathy quickly": - - /url: /docs/getting-started - - img - - text: Tutorial - - paragraph: Get up and running with Pixelated Empathy quickly - - link "API Reference Complete API documentation for developers": - - /url: /docs/api - - img - - text: API Reference - - paragraph: Complete API documentation for developers - - link "Components Explore our UI component library": - - /url: /docs/components - - img - - text: Components - - paragraph: Explore our UI component library - - link "Security Learn about our security features and best practices": - - /url: /docs/security - - img - - text: Security - - paragraph: Learn about our security features and best practices - - heading "Latest Updates" [level=2] - - img - - text: Version 2.0 Released - - paragraph: - - text: - We've released version 2.0 of Pixelated Empathy with many new - features and improvements. Check out the - - link "changelog": - - /url: /docs/changelog - - text: for details. - - text: New Feature Performance Security - - heading "Popular Topics" [level=2] - - list: - - listitem: - - link "Authentication and Authorization": - - /url: /docs/authentication - - listitem: - - link "AI Integration": - - /url: /docs/ai-integration - - listitem: - - link "Deployment Guide": - - /url: /docs/deployment - - listitem: - - link "Troubleshooting": - - /url: /docs/troubleshooting - - listitem: - - link "Frequently Asked Questions": - - /url: /docs/faq - - heading "Get Support" [level=2] - - paragraph: - Need help? Our support team is available to assist you with any - questions or issues. - - link "Email Support Contact our support team directly": - - /url: mailto:support@pixelated.dev - - img - - text: Email Support - - paragraph: Contact our support team directly - - link "Discord Community Join our community on Discord": - - /url: https://discord.gg/pixelated - - img - - text: Discord Community - - paragraph: Join our community on Discord - - link "Previous Page": - - /url: '#' - - img - - text: Previous Page - - link "Next Page": - - /url: '#' - - text: Next Page - - img -- contentinfo: - - link "Logo Pixelated Empathy": - - /url: / - - img "Logo" - - text: Pixelated Empathy - - paragraph: - Secure AI therapy platform with advanced encryption for maximum privacy - and HIPAA compliance. - - link "Twitter": - - /url: '#' - - link "GitHub": - - /url: '#' - - link "LinkedIn": - - /url: '#' - - heading "Platform" [level=3] - - list: - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "Chat": - - /url: /chat - - listitem: - - link "Profile": - - /url: /profile - - heading "Resources" [level=3] - - list: - - listitem: - - link "About": - - /url: /about - - listitem: - - link "Contact": - - /url: /contact - - listitem: - - link "FAQ": - - /url: /faq - - paragraph: © 2025 Pixelated Empathy. All rights reserved. -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible -> 27 | await expect(page.locator('header')).toBeVisible() - | ^ Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 2 elements: - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-chromium-retry1/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-chromium-retry1/error-context.md deleted file mode 100644 index 936b937ac4..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-chromium-retry1/error-context.md +++ /dev/null @@ -1,246 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> responsive navigation works correctly in - all browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:98:3 - -# Error details - -``` -Error: Timed out 15000ms waiting for expect(locator).not.toBeVisible() - -Locator: locator('nav ul') -Expected: not visible -Received: visible -Call log: - - expect.not.toBeVisible with timeout 15000ms - - waiting for locator('nav ul') - 3 × locator resolved to
    …
- - unexpected value "visible" - 15 × locator resolved to
    …
- - unexpected value "visible" - - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:118:46 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme": - - img -- main: - - paragraph: - - text: - Pixelated Empathy - the premier destination for the world of - AI-assisted emotional intelligence. Therapy training has never been - more accessible, or more effective. - - strong: Ever. -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible - 27 | await expect(page.locator('header')).toBeVisible() - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile -> 118 | await expect(page.locator('nav ul')).not.toBeVisible() - | ^ Error: Timed out 15000ms waiting for expect(locator).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot - 128 | await page.screenshot({ - 129 | path: `./test-results/cross-browser/${browserName}-nav-mobile.png`, - 130 | }) - 131 | }) - 132 | - 133 | // Test form interactions across browsers - 134 | test('forms work correctly across browsers', async ({ - 135 | page, - 136 | browserName, - 137 | }) => { - 138 | // Go to contact page with a form - 139 | await page.goto('/contact') - 140 | - 141 | // Fill out form - 142 | await page.fill('input[name="name"]', 'Test User') - 143 | await page.fill('input[name="email"]', 'test@example.com') - 144 | await page.fill('textarea[name="message"]', 'This is a test message') - 145 | - 146 | // Take a screenshot of the filled form - 147 | await page.screenshot({ - 148 | path: `./test-results/cross-browser/${browserName}-form.png`, - 149 | }) - 150 | - 151 | // Submit form (but intercept the actual submission) - 152 | await page.route('**/api/contact', (route) => { - 153 | route.fulfill({ - 154 | status: 200, - 155 | body: JSON.stringify({ success: true }), - 156 | }) - 157 | }) - 158 | - 159 | await page.click('button[type="submit"]') - 160 | - 161 | // Check for success message - 162 | await expect(page.locator('text=Thank you for your message')).toBeVisible() - 163 | }) - 164 | - 165 | // Test animations and transitions - 166 | test('animations and transitions work correctly across browsers', async ({ - 167 | page, - 168 | browserName, - 169 | }) => { - 170 | // Go to a page with animations - 171 | await page.goto('/') - 172 | - 173 | // Scroll to trigger animations - 174 | await page.evaluate(() => window.scrollBy(0, 300)) - 175 | - 176 | // Wait for animations to complete (this is approximate) - 177 | await page.waitForTimeout(1000) - 178 | - 179 | // Take a screenshot after animations - 180 | await page.screenshot({ - 181 | path: `./test-results/cross-browser/${browserName}-animations.png`, - 182 | }) - 183 | }) - 184 | }) - 185 | -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-chromium-retry2/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-chromium-retry2/error-context.md deleted file mode 100644 index e6bc6db208..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-chromium-retry2/error-context.md +++ /dev/null @@ -1,246 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> responsive navigation works correctly in - all browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:98:3 - -# Error details - -``` -Error: Timed out 15000ms waiting for expect(locator).not.toBeVisible() - -Locator: locator('nav ul') -Expected: not visible -Received: visible -Call log: - - expect.not.toBeVisible with timeout 15000ms - - waiting for locator('nav ul') - 2 × locator resolved to
    …
- - unexpected value "visible" - 17 × locator resolved to
    …
- - unexpected value "visible" - - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:118:46 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme": - - img -- main: - - paragraph: - - text: - Pixelated Empathy - the premier destination for the world of - AI-assisted emotional intelligence. Therapy training has never been - more accessible, or more effective. - - strong: Ever. -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible - 27 | await expect(page.locator('header')).toBeVisible() - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile -> 118 | await expect(page.locator('nav ul')).not.toBeVisible() - | ^ Error: Timed out 15000ms waiting for expect(locator).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot - 128 | await page.screenshot({ - 129 | path: `./test-results/cross-browser/${browserName}-nav-mobile.png`, - 130 | }) - 131 | }) - 132 | - 133 | // Test form interactions across browsers - 134 | test('forms work correctly across browsers', async ({ - 135 | page, - 136 | browserName, - 137 | }) => { - 138 | // Go to contact page with a form - 139 | await page.goto('/contact') - 140 | - 141 | // Fill out form - 142 | await page.fill('input[name="name"]', 'Test User') - 143 | await page.fill('input[name="email"]', 'test@example.com') - 144 | await page.fill('textarea[name="message"]', 'This is a test message') - 145 | - 146 | // Take a screenshot of the filled form - 147 | await page.screenshot({ - 148 | path: `./test-results/cross-browser/${browserName}-form.png`, - 149 | }) - 150 | - 151 | // Submit form (but intercept the actual submission) - 152 | await page.route('**/api/contact', (route) => { - 153 | route.fulfill({ - 154 | status: 200, - 155 | body: JSON.stringify({ success: true }), - 156 | }) - 157 | }) - 158 | - 159 | await page.click('button[type="submit"]') - 160 | - 161 | // Check for success message - 162 | await expect(page.locator('text=Thank you for your message')).toBeVisible() - 163 | }) - 164 | - 165 | // Test animations and transitions - 166 | test('animations and transitions work correctly across browsers', async ({ - 167 | page, - 168 | browserName, - 169 | }) => { - 170 | // Go to a page with animations - 171 | await page.goto('/') - 172 | - 173 | // Scroll to trigger animations - 174 | await page.evaluate(() => window.scrollBy(0, 300)) - 175 | - 176 | // Wait for animations to complete (this is approximate) - 177 | await page.waitForTimeout(1000) - 178 | - 179 | // Take a screenshot after animations - 180 | await page.screenshot({ - 181 | path: `./test-results/cross-browser/${browserName}-animations.png`, - 182 | }) - 183 | }) - 184 | }) - 185 | -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-chromium/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-chromium/error-context.md deleted file mode 100644 index e6bc6db208..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-chromium/error-context.md +++ /dev/null @@ -1,246 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> responsive navigation works correctly in - all browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:98:3 - -# Error details - -``` -Error: Timed out 15000ms waiting for expect(locator).not.toBeVisible() - -Locator: locator('nav ul') -Expected: not visible -Received: visible -Call log: - - expect.not.toBeVisible with timeout 15000ms - - waiting for locator('nav ul') - 2 × locator resolved to
    …
- - unexpected value "visible" - 17 × locator resolved to
    …
- - unexpected value "visible" - - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:118:46 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme": - - img -- main: - - paragraph: - - text: - Pixelated Empathy - the premier destination for the world of - AI-assisted emotional intelligence. Therapy training has never been - more accessible, or more effective. - - strong: Ever. -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible - 27 | await expect(page.locator('header')).toBeVisible() - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile -> 118 | await expect(page.locator('nav ul')).not.toBeVisible() - | ^ Error: Timed out 15000ms waiting for expect(locator).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot - 128 | await page.screenshot({ - 129 | path: `./test-results/cross-browser/${browserName}-nav-mobile.png`, - 130 | }) - 131 | }) - 132 | - 133 | // Test form interactions across browsers - 134 | test('forms work correctly across browsers', async ({ - 135 | page, - 136 | browserName, - 137 | }) => { - 138 | // Go to contact page with a form - 139 | await page.goto('/contact') - 140 | - 141 | // Fill out form - 142 | await page.fill('input[name="name"]', 'Test User') - 143 | await page.fill('input[name="email"]', 'test@example.com') - 144 | await page.fill('textarea[name="message"]', 'This is a test message') - 145 | - 146 | // Take a screenshot of the filled form - 147 | await page.screenshot({ - 148 | path: `./test-results/cross-browser/${browserName}-form.png`, - 149 | }) - 150 | - 151 | // Submit form (but intercept the actual submission) - 152 | await page.route('**/api/contact', (route) => { - 153 | route.fulfill({ - 154 | status: 200, - 155 | body: JSON.stringify({ success: true }), - 156 | }) - 157 | }) - 158 | - 159 | await page.click('button[type="submit"]') - 160 | - 161 | // Check for success message - 162 | await expect(page.locator('text=Thank you for your message')).toBeVisible() - 163 | }) - 164 | - 165 | // Test animations and transitions - 166 | test('animations and transitions work correctly across browsers', async ({ - 167 | page, - 168 | browserName, - 169 | }) => { - 170 | // Go to a page with animations - 171 | await page.goto('/') - 172 | - 173 | // Scroll to trigger animations - 174 | await page.evaluate(() => window.scrollBy(0, 300)) - 175 | - 176 | // Wait for animations to complete (this is approximate) - 177 | await page.waitForTimeout(1000) - 178 | - 179 | // Take a screenshot after animations - 180 | await page.screenshot({ - 181 | path: `./test-results/cross-browser/${browserName}-animations.png`, - 182 | }) - 183 | }) - 184 | }) - 185 | -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-firefox-retry1/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-firefox-retry1/error-context.md deleted file mode 100644 index dd21737ab6..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-firefox-retry1/error-context.md +++ /dev/null @@ -1,244 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> responsive navigation works correctly in - all browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:98:3 - -# Error details - -``` -Error: Timed out 15000ms waiting for expect(locator).not.toBeVisible() - -Locator: locator('nav ul') -Expected: not visible -Received: visible -Call log: - - expect.not.toBeVisible with timeout 15000ms - - waiting for locator('nav ul') - 19 × locator resolved to
    …
- - unexpected value "visible" - - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:118:46 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme": - - img -- main: - - paragraph: - - text: - Pixelated Empathy - the premier destination for the world of - AI-assisted emotional intelligence. Therapy training has never been - more accessible, or more effective. - - strong: Ever. -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible - 27 | await expect(page.locator('header')).toBeVisible() - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile -> 118 | await expect(page.locator('nav ul')).not.toBeVisible() - | ^ Error: Timed out 15000ms waiting for expect(locator).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot - 128 | await page.screenshot({ - 129 | path: `./test-results/cross-browser/${browserName}-nav-mobile.png`, - 130 | }) - 131 | }) - 132 | - 133 | // Test form interactions across browsers - 134 | test('forms work correctly across browsers', async ({ - 135 | page, - 136 | browserName, - 137 | }) => { - 138 | // Go to contact page with a form - 139 | await page.goto('/contact') - 140 | - 141 | // Fill out form - 142 | await page.fill('input[name="name"]', 'Test User') - 143 | await page.fill('input[name="email"]', 'test@example.com') - 144 | await page.fill('textarea[name="message"]', 'This is a test message') - 145 | - 146 | // Take a screenshot of the filled form - 147 | await page.screenshot({ - 148 | path: `./test-results/cross-browser/${browserName}-form.png`, - 149 | }) - 150 | - 151 | // Submit form (but intercept the actual submission) - 152 | await page.route('**/api/contact', (route) => { - 153 | route.fulfill({ - 154 | status: 200, - 155 | body: JSON.stringify({ success: true }), - 156 | }) - 157 | }) - 158 | - 159 | await page.click('button[type="submit"]') - 160 | - 161 | // Check for success message - 162 | await expect(page.locator('text=Thank you for your message')).toBeVisible() - 163 | }) - 164 | - 165 | // Test animations and transitions - 166 | test('animations and transitions work correctly across browsers', async ({ - 167 | page, - 168 | browserName, - 169 | }) => { - 170 | // Go to a page with animations - 171 | await page.goto('/') - 172 | - 173 | // Scroll to trigger animations - 174 | await page.evaluate(() => window.scrollBy(0, 300)) - 175 | - 176 | // Wait for animations to complete (this is approximate) - 177 | await page.waitForTimeout(1000) - 178 | - 179 | // Take a screenshot after animations - 180 | await page.screenshot({ - 181 | path: `./test-results/cross-browser/${browserName}-animations.png`, - 182 | }) - 183 | }) - 184 | }) - 185 | -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-firefox-retry2/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-firefox-retry2/error-context.md deleted file mode 100644 index dd21737ab6..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-firefox-retry2/error-context.md +++ /dev/null @@ -1,244 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> responsive navigation works correctly in - all browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:98:3 - -# Error details - -``` -Error: Timed out 15000ms waiting for expect(locator).not.toBeVisible() - -Locator: locator('nav ul') -Expected: not visible -Received: visible -Call log: - - expect.not.toBeVisible with timeout 15000ms - - waiting for locator('nav ul') - 19 × locator resolved to
    …
- - unexpected value "visible" - - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:118:46 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme": - - img -- main: - - paragraph: - - text: - Pixelated Empathy - the premier destination for the world of - AI-assisted emotional intelligence. Therapy training has never been - more accessible, or more effective. - - strong: Ever. -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible - 27 | await expect(page.locator('header')).toBeVisible() - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile -> 118 | await expect(page.locator('nav ul')).not.toBeVisible() - | ^ Error: Timed out 15000ms waiting for expect(locator).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot - 128 | await page.screenshot({ - 129 | path: `./test-results/cross-browser/${browserName}-nav-mobile.png`, - 130 | }) - 131 | }) - 132 | - 133 | // Test form interactions across browsers - 134 | test('forms work correctly across browsers', async ({ - 135 | page, - 136 | browserName, - 137 | }) => { - 138 | // Go to contact page with a form - 139 | await page.goto('/contact') - 140 | - 141 | // Fill out form - 142 | await page.fill('input[name="name"]', 'Test User') - 143 | await page.fill('input[name="email"]', 'test@example.com') - 144 | await page.fill('textarea[name="message"]', 'This is a test message') - 145 | - 146 | // Take a screenshot of the filled form - 147 | await page.screenshot({ - 148 | path: `./test-results/cross-browser/${browserName}-form.png`, - 149 | }) - 150 | - 151 | // Submit form (but intercept the actual submission) - 152 | await page.route('**/api/contact', (route) => { - 153 | route.fulfill({ - 154 | status: 200, - 155 | body: JSON.stringify({ success: true }), - 156 | }) - 157 | }) - 158 | - 159 | await page.click('button[type="submit"]') - 160 | - 161 | // Check for success message - 162 | await expect(page.locator('text=Thank you for your message')).toBeVisible() - 163 | }) - 164 | - 165 | // Test animations and transitions - 166 | test('animations and transitions work correctly across browsers', async ({ - 167 | page, - 168 | browserName, - 169 | }) => { - 170 | // Go to a page with animations - 171 | await page.goto('/') - 172 | - 173 | // Scroll to trigger animations - 174 | await page.evaluate(() => window.scrollBy(0, 300)) - 175 | - 176 | // Wait for animations to complete (this is approximate) - 177 | await page.waitForTimeout(1000) - 178 | - 179 | // Take a screenshot after animations - 180 | await page.screenshot({ - 181 | path: `./test-results/cross-browser/${browserName}-animations.png`, - 182 | }) - 183 | }) - 184 | }) - 185 | -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-firefox/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-firefox/error-context.md deleted file mode 100644 index dd21737ab6..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-firefox/error-context.md +++ /dev/null @@ -1,244 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> responsive navigation works correctly in - all browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:98:3 - -# Error details - -``` -Error: Timed out 15000ms waiting for expect(locator).not.toBeVisible() - -Locator: locator('nav ul') -Expected: not visible -Received: visible -Call log: - - expect.not.toBeVisible with timeout 15000ms - - waiting for locator('nav ul') - 19 × locator resolved to
    …
- - unexpected value "visible" - - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:118:46 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme": - - img -- main: - - paragraph: - - text: - Pixelated Empathy - the premier destination for the world of - AI-assisted emotional intelligence. Therapy training has never been - more accessible, or more effective. - - strong: Ever. -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible - 27 | await expect(page.locator('header')).toBeVisible() - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile -> 118 | await expect(page.locator('nav ul')).not.toBeVisible() - | ^ Error: Timed out 15000ms waiting for expect(locator).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot - 128 | await page.screenshot({ - 129 | path: `./test-results/cross-browser/${browserName}-nav-mobile.png`, - 130 | }) - 131 | }) - 132 | - 133 | // Test form interactions across browsers - 134 | test('forms work correctly across browsers', async ({ - 135 | page, - 136 | browserName, - 137 | }) => { - 138 | // Go to contact page with a form - 139 | await page.goto('/contact') - 140 | - 141 | // Fill out form - 142 | await page.fill('input[name="name"]', 'Test User') - 143 | await page.fill('input[name="email"]', 'test@example.com') - 144 | await page.fill('textarea[name="message"]', 'This is a test message') - 145 | - 146 | // Take a screenshot of the filled form - 147 | await page.screenshot({ - 148 | path: `./test-results/cross-browser/${browserName}-form.png`, - 149 | }) - 150 | - 151 | // Submit form (but intercept the actual submission) - 152 | await page.route('**/api/contact', (route) => { - 153 | route.fulfill({ - 154 | status: 200, - 155 | body: JSON.stringify({ success: true }), - 156 | }) - 157 | }) - 158 | - 159 | await page.click('button[type="submit"]') - 160 | - 161 | // Check for success message - 162 | await expect(page.locator('text=Thank you for your message')).toBeVisible() - 163 | }) - 164 | - 165 | // Test animations and transitions - 166 | test('animations and transitions work correctly across browsers', async ({ - 167 | page, - 168 | browserName, - 169 | }) => { - 170 | // Go to a page with animations - 171 | await page.goto('/') - 172 | - 173 | // Scroll to trigger animations - 174 | await page.evaluate(() => window.scrollBy(0, 300)) - 175 | - 176 | // Wait for animations to complete (this is approximate) - 177 | await page.waitForTimeout(1000) - 178 | - 179 | // Take a screenshot after animations - 180 | await page.screenshot({ - 181 | path: `./test-results/cross-browser/${browserName}-animations.png`, - 182 | }) - 183 | }) - 184 | }) - 185 | -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-webkit-retry1/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-webkit-retry1/error-context.md deleted file mode 100644 index dc6097696e..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-webkit-retry1/error-context.md +++ /dev/null @@ -1,243 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> responsive navigation works correctly in - all browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:98:3 - -# Error details - -``` -Error: Timed out 15000ms waiting for expect(locator).not.toBeVisible() - -Locator: locator('nav ul') -Expected: not visible -Received: visible -Call log: - - expect.not.toBeVisible with timeout 15000ms - - waiting for locator('nav ul') - 19 × locator resolved to
    …
- - unexpected value "visible" - - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:118:46 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme" -- main: - - paragraph: - - text: - Pixelated Empathy - the premier destination for the world of - AI-assisted emotional intelligence. Therapy training has never been - more accessible, or more effective. - - strong: Ever. -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible - 27 | await expect(page.locator('header')).toBeVisible() - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile -> 118 | await expect(page.locator('nav ul')).not.toBeVisible() - | ^ Error: Timed out 15000ms waiting for expect(locator).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot - 128 | await page.screenshot({ - 129 | path: `./test-results/cross-browser/${browserName}-nav-mobile.png`, - 130 | }) - 131 | }) - 132 | - 133 | // Test form interactions across browsers - 134 | test('forms work correctly across browsers', async ({ - 135 | page, - 136 | browserName, - 137 | }) => { - 138 | // Go to contact page with a form - 139 | await page.goto('/contact') - 140 | - 141 | // Fill out form - 142 | await page.fill('input[name="name"]', 'Test User') - 143 | await page.fill('input[name="email"]', 'test@example.com') - 144 | await page.fill('textarea[name="message"]', 'This is a test message') - 145 | - 146 | // Take a screenshot of the filled form - 147 | await page.screenshot({ - 148 | path: `./test-results/cross-browser/${browserName}-form.png`, - 149 | }) - 150 | - 151 | // Submit form (but intercept the actual submission) - 152 | await page.route('**/api/contact', (route) => { - 153 | route.fulfill({ - 154 | status: 200, - 155 | body: JSON.stringify({ success: true }), - 156 | }) - 157 | }) - 158 | - 159 | await page.click('button[type="submit"]') - 160 | - 161 | // Check for success message - 162 | await expect(page.locator('text=Thank you for your message')).toBeVisible() - 163 | }) - 164 | - 165 | // Test animations and transitions - 166 | test('animations and transitions work correctly across browsers', async ({ - 167 | page, - 168 | browserName, - 169 | }) => { - 170 | // Go to a page with animations - 171 | await page.goto('/') - 172 | - 173 | // Scroll to trigger animations - 174 | await page.evaluate(() => window.scrollBy(0, 300)) - 175 | - 176 | // Wait for animations to complete (this is approximate) - 177 | await page.waitForTimeout(1000) - 178 | - 179 | // Take a screenshot after animations - 180 | await page.screenshot({ - 181 | path: `./test-results/cross-browser/${browserName}-animations.png`, - 182 | }) - 183 | }) - 184 | }) - 185 | -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-webkit-retry2/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-webkit-retry2/error-context.md deleted file mode 100644 index dc6097696e..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-webkit-retry2/error-context.md +++ /dev/null @@ -1,243 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> responsive navigation works correctly in - all browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:98:3 - -# Error details - -``` -Error: Timed out 15000ms waiting for expect(locator).not.toBeVisible() - -Locator: locator('nav ul') -Expected: not visible -Received: visible -Call log: - - expect.not.toBeVisible with timeout 15000ms - - waiting for locator('nav ul') - 19 × locator resolved to
    …
- - unexpected value "visible" - - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:118:46 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme" -- main: - - paragraph: - - text: - Pixelated Empathy - the premier destination for the world of - AI-assisted emotional intelligence. Therapy training has never been - more accessible, or more effective. - - strong: Ever. -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible - 27 | await expect(page.locator('header')).toBeVisible() - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile -> 118 | await expect(page.locator('nav ul')).not.toBeVisible() - | ^ Error: Timed out 15000ms waiting for expect(locator).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot - 128 | await page.screenshot({ - 129 | path: `./test-results/cross-browser/${browserName}-nav-mobile.png`, - 130 | }) - 131 | }) - 132 | - 133 | // Test form interactions across browsers - 134 | test('forms work correctly across browsers', async ({ - 135 | page, - 136 | browserName, - 137 | }) => { - 138 | // Go to contact page with a form - 139 | await page.goto('/contact') - 140 | - 141 | // Fill out form - 142 | await page.fill('input[name="name"]', 'Test User') - 143 | await page.fill('input[name="email"]', 'test@example.com') - 144 | await page.fill('textarea[name="message"]', 'This is a test message') - 145 | - 146 | // Take a screenshot of the filled form - 147 | await page.screenshot({ - 148 | path: `./test-results/cross-browser/${browserName}-form.png`, - 149 | }) - 150 | - 151 | // Submit form (but intercept the actual submission) - 152 | await page.route('**/api/contact', (route) => { - 153 | route.fulfill({ - 154 | status: 200, - 155 | body: JSON.stringify({ success: true }), - 156 | }) - 157 | }) - 158 | - 159 | await page.click('button[type="submit"]') - 160 | - 161 | // Check for success message - 162 | await expect(page.locator('text=Thank you for your message')).toBeVisible() - 163 | }) - 164 | - 165 | // Test animations and transitions - 166 | test('animations and transitions work correctly across browsers', async ({ - 167 | page, - 168 | browserName, - 169 | }) => { - 170 | // Go to a page with animations - 171 | await page.goto('/') - 172 | - 173 | // Scroll to trigger animations - 174 | await page.evaluate(() => window.scrollBy(0, 300)) - 175 | - 176 | // Wait for animations to complete (this is approximate) - 177 | await page.waitForTimeout(1000) - 178 | - 179 | // Take a screenshot after animations - 180 | await page.screenshot({ - 181 | path: `./test-results/cross-browser/${browserName}-animations.png`, - 182 | }) - 183 | }) - 184 | }) - 185 | -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-webkit/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-webkit/error-context.md deleted file mode 100644 index dc6097696e..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-96bdb-s-correctly-in-all-browsers-webkit/error-context.md +++ /dev/null @@ -1,243 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> responsive navigation works correctly in - all browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:98:3 - -# Error details - -``` -Error: Timed out 15000ms waiting for expect(locator).not.toBeVisible() - -Locator: locator('nav ul') -Expected: not visible -Received: visible -Call log: - - expect.not.toBeVisible with timeout 15000ms - - waiting for locator('nav ul') - 19 × locator resolved to
    …
- - unexpected value "visible" - - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:118:46 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme" -- main: - - paragraph: - - text: - Pixelated Empathy - the premier destination for the world of - AI-assisted emotional intelligence. Therapy training has never been - more accessible, or more effective. - - strong: Ever. -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible - 27 | await expect(page.locator('header')).toBeVisible() - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile -> 118 | await expect(page.locator('nav ul')).not.toBeVisible() - | ^ Error: Timed out 15000ms waiting for expect(locator).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot - 128 | await page.screenshot({ - 129 | path: `./test-results/cross-browser/${browserName}-nav-mobile.png`, - 130 | }) - 131 | }) - 132 | - 133 | // Test form interactions across browsers - 134 | test('forms work correctly across browsers', async ({ - 135 | page, - 136 | browserName, - 137 | }) => { - 138 | // Go to contact page with a form - 139 | await page.goto('/contact') - 140 | - 141 | // Fill out form - 142 | await page.fill('input[name="name"]', 'Test User') - 143 | await page.fill('input[name="email"]', 'test@example.com') - 144 | await page.fill('textarea[name="message"]', 'This is a test message') - 145 | - 146 | // Take a screenshot of the filled form - 147 | await page.screenshot({ - 148 | path: `./test-results/cross-browser/${browserName}-form.png`, - 149 | }) - 150 | - 151 | // Submit form (but intercept the actual submission) - 152 | await page.route('**/api/contact', (route) => { - 153 | route.fulfill({ - 154 | status: 200, - 155 | body: JSON.stringify({ success: true }), - 156 | }) - 157 | }) - 158 | - 159 | await page.click('button[type="submit"]') - 160 | - 161 | // Check for success message - 162 | await expect(page.locator('text=Thank you for your message')).toBeVisible() - 163 | }) - 164 | - 165 | // Test animations and transitions - 166 | test('animations and transitions work correctly across browsers', async ({ - 167 | page, - 168 | browserName, - 169 | }) => { - 170 | // Go to a page with animations - 171 | await page.goto('/') - 172 | - 173 | // Scroll to trigger animations - 174 | await page.evaluate(() => window.scrollBy(0, 300)) - 175 | - 176 | // Wait for animations to complete (this is approximate) - 177 | await page.waitForTimeout(1000) - 178 | - 179 | // Take a screenshot after animations - 180 | await page.screenshot({ - 181 | path: `./test-results/cross-browser/${browserName}-animations.png`, - 182 | }) - 183 | }) - 184 | }) - 185 | -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-chromium-retry1/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-chromium-retry1/error-context.md deleted file mode 100644 index 1c4291a547..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-chromium-retry1/error-context.md +++ /dev/null @@ -1,354 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> blog page should work in all browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: expect.toBeVisible: Error: strict mode violation: locator('footer') resolved to 2 elements: - 1)
aka locator('#main footer') - 2)
…
aka getByRole('contentinfo') - -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('footer') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:28:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme": - - img -- main: - - heading "Blog" [level=1] - - heading "2025" [level=2] - - list: - - listitem: - - link "The Dance of Minds - When AI and Human Psychology Collide": - - /url: /blog/convergence-of-minds - - text: Mar 15 - - listitem: - - ? link "AI in the Therapy Room - Promise, Pitfalls, and My - Patients' Reality" - : - /url: /blog/ai-mental-health-assistance - - text: Mar 9 - - listitem: - - link "When Machines Think But Can't Feel - The EQ Crisis": - - /url: /blog/emotional-intelligence-in-ai-world - - text: Mar 2 - - heading "2024" [level=2] - - list: - - listitem: - - ? 'link "Integrative Approaches to Trauma Treatment: Synthesizing - Modern Modalities"' - : - /url: /blog/neuroplasticity/integrative-approaches - - text: May 29 - - listitem: - - link "AI in Mental Health Crisis Prevention": - - /url: /blog/ai/crisis-prevention - - text: May 27 - - listitem: - - 'link "Nature''s Therapy: Outdoor Wellness Practices"': - - /url: /blog/wellness/nature-therapy - - text: May 25 - - listitem: - - link "Psychedelic Medicine & Neuroplasticity in Trauma Treatment": - - /url: /blog/neuroplasticity/psychedelic-medicine - - text: May 22 - - listitem: - - 'link "Emotional AI: Understanding Human Feelings"': - - /url: /blog/ai/emotional-ai - - text: May 20 - - listitem: - - link "Creative Expression for Mental Wellness": - - /url: /blog/wellness/creative-expression - - text: May 18 - - listitem: - - link "Advanced Somatic Technologies in Trauma Treatment": - - /url: /blog/neuroplasticity/somatic-technologies - - text: May 15 - - listitem: - - 'link "Digital Therapeutics: AI-Enhanced Mental Health Tools"': - - /url: /blog/ai/digital-therapeutics - - text: May 13 - - listitem: - - 'link "Friendship as Medicine: Nurturing Social Wellness"': - - /url: /blog/wellness/friendship-medicine - - text: May 11 - - listitem: - - 'link "Quantum Biology & Trauma: A New Frontier"': - - /url: /blog/neuroplasticity/quantum-biology - - text: May 8 - - listitem: - - 'link "AI Companions: The Future of Emotional Support"': - - /url: /blog/ai/ai-companions - - text: May 6 - - listitem: - - ? 'link "The Art of Micro-Joys: Finding Happiness in Small - Moments"' - : - /url: /blog/wellness/micro-joys - - text: May 4 - - listitem: - - link "The Neuroscience Revolution in Trauma Treatment": - - /url: /blog/neuroplasticity/neuroscience-revolution - - text: May 1 - - listitem: - - ? 'link "AI & Emotional Intelligence: The Future of Mental - Wellness"' - : - /url: /blog/ai/series-outline - - text: Apr 26 - - listitem: - - 'link "Everyday Joy: Simple Practices for Mental Wellness"': - - /url: /blog/wellness/series-outline - - text: Apr 19 - - listitem: - - link "🧬 Research Article Template": - - /url: /blog/planning/article-template - - text: Apr 12 - - listitem: - - link "Editorial Roadmap 2024": - - /url: /blog/planning/content-calendar - - text: Apr 12 - - listitem: - - 'link "Neuroplasticity & Trauma: A Revolutionary Approach"': - - /url: /blog/planning/series-outline - - text: Apr 12 - - listitem: - - 'link "Breaking the Silence: Our Journey Begins"': - - /url: /blog/welcome - - text: Apr 11 · 4 min - - listitem: - - link "Breaking Free from Trauma Bonds": - - /url: /blog/trauma-series/trauma-bonds - - text: Mar 19 · 11 min - - listitem: - - link "Emotional Unavail": - - /url: /blog/healing-series/emotional-unavailability - - text: Mar 15 - - listitem: - - link "Healing Journey Series": - - /url: /blog/healing-series - - text: Mar 15 - - listitem: - - 'link "Silencing the Inner Critic: Finding Your Authentic Voice"': - - /url: /blog/trauma-series/inner-critic - - text: Mar 12 · 10 min - - listitem: - - 'link "Healing Your Inner Child: A Path to Wholeness"': - - /url: /blog/trauma-series/healing-inner-child - - text: Mar 5 · 12 min - - listitem: - - link "The Physical Impact of Trauma": - - /url: /blog/trauma-body-series/physical-impact - - text: Mar 4 · 15 min - - listitem: - - link "Trauma and the Body Series": - - /url: /blog/trauma-body-series - - text: Mar 1 - - listitem: - - link "The Dance of Wounded Souls": - - /url: /blog/healing-series/dance-of-wounded-souls - - text: Feb 21 - - listitem: - - link "The Dark Side of Love": - - /url: /blog/trauma-series/dark-side-of-love - - text: Feb 20 · 8 min - - listitem: - - link "Understanding the Scapegoat Dynamic": - - /url: /blog/trauma-series/scapegoat-dynamics - - text: Feb 20 · 10 min - - listitem: - - link "Understanding Narcissism and Complex Trauma": - - /url: /blog/trauma-series/understanding-narcissism - - text: Feb 18 · 10 min - - listitem: - - link "The Heart of Codependency": - - /url: /blog/trauma-series/heart-of-codependency - - text: Feb 15 · 12 min - - listitem: - - link "Understanding Trauma Series": - - /url: /blog/trauma-series - - text: Feb 10 - - listitem: - - link "Codependency & Complex Trauma": - - /url: /blog/healing-series/codependency-and-trauma - - text: Jan 25 · 15 min - - link "all posts": - - /url: /blog - - link "tags": - - /url: /blog/tags - - link "RSS": - - /url: /rss.xml -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible - 27 | await expect(page.locator('header')).toBeVisible() -> 28 | await expect(page.locator('footer')).toBeVisible() - | ^ Error: expect.toBeVisible: Error: strict mode violation: locator('footer') resolved to 2 elements: - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot - 128 | await page.screenshot({ -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-chromium-retry2/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-chromium-retry2/error-context.md deleted file mode 100644 index 1c4291a547..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-chromium-retry2/error-context.md +++ /dev/null @@ -1,354 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> blog page should work in all browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: expect.toBeVisible: Error: strict mode violation: locator('footer') resolved to 2 elements: - 1)
aka locator('#main footer') - 2)
…
aka getByRole('contentinfo') - -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('footer') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:28:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme": - - img -- main: - - heading "Blog" [level=1] - - heading "2025" [level=2] - - list: - - listitem: - - link "The Dance of Minds - When AI and Human Psychology Collide": - - /url: /blog/convergence-of-minds - - text: Mar 15 - - listitem: - - ? link "AI in the Therapy Room - Promise, Pitfalls, and My - Patients' Reality" - : - /url: /blog/ai-mental-health-assistance - - text: Mar 9 - - listitem: - - link "When Machines Think But Can't Feel - The EQ Crisis": - - /url: /blog/emotional-intelligence-in-ai-world - - text: Mar 2 - - heading "2024" [level=2] - - list: - - listitem: - - ? 'link "Integrative Approaches to Trauma Treatment: Synthesizing - Modern Modalities"' - : - /url: /blog/neuroplasticity/integrative-approaches - - text: May 29 - - listitem: - - link "AI in Mental Health Crisis Prevention": - - /url: /blog/ai/crisis-prevention - - text: May 27 - - listitem: - - 'link "Nature''s Therapy: Outdoor Wellness Practices"': - - /url: /blog/wellness/nature-therapy - - text: May 25 - - listitem: - - link "Psychedelic Medicine & Neuroplasticity in Trauma Treatment": - - /url: /blog/neuroplasticity/psychedelic-medicine - - text: May 22 - - listitem: - - 'link "Emotional AI: Understanding Human Feelings"': - - /url: /blog/ai/emotional-ai - - text: May 20 - - listitem: - - link "Creative Expression for Mental Wellness": - - /url: /blog/wellness/creative-expression - - text: May 18 - - listitem: - - link "Advanced Somatic Technologies in Trauma Treatment": - - /url: /blog/neuroplasticity/somatic-technologies - - text: May 15 - - listitem: - - 'link "Digital Therapeutics: AI-Enhanced Mental Health Tools"': - - /url: /blog/ai/digital-therapeutics - - text: May 13 - - listitem: - - 'link "Friendship as Medicine: Nurturing Social Wellness"': - - /url: /blog/wellness/friendship-medicine - - text: May 11 - - listitem: - - 'link "Quantum Biology & Trauma: A New Frontier"': - - /url: /blog/neuroplasticity/quantum-biology - - text: May 8 - - listitem: - - 'link "AI Companions: The Future of Emotional Support"': - - /url: /blog/ai/ai-companions - - text: May 6 - - listitem: - - ? 'link "The Art of Micro-Joys: Finding Happiness in Small - Moments"' - : - /url: /blog/wellness/micro-joys - - text: May 4 - - listitem: - - link "The Neuroscience Revolution in Trauma Treatment": - - /url: /blog/neuroplasticity/neuroscience-revolution - - text: May 1 - - listitem: - - ? 'link "AI & Emotional Intelligence: The Future of Mental - Wellness"' - : - /url: /blog/ai/series-outline - - text: Apr 26 - - listitem: - - 'link "Everyday Joy: Simple Practices for Mental Wellness"': - - /url: /blog/wellness/series-outline - - text: Apr 19 - - listitem: - - link "🧬 Research Article Template": - - /url: /blog/planning/article-template - - text: Apr 12 - - listitem: - - link "Editorial Roadmap 2024": - - /url: /blog/planning/content-calendar - - text: Apr 12 - - listitem: - - 'link "Neuroplasticity & Trauma: A Revolutionary Approach"': - - /url: /blog/planning/series-outline - - text: Apr 12 - - listitem: - - 'link "Breaking the Silence: Our Journey Begins"': - - /url: /blog/welcome - - text: Apr 11 · 4 min - - listitem: - - link "Breaking Free from Trauma Bonds": - - /url: /blog/trauma-series/trauma-bonds - - text: Mar 19 · 11 min - - listitem: - - link "Emotional Unavail": - - /url: /blog/healing-series/emotional-unavailability - - text: Mar 15 - - listitem: - - link "Healing Journey Series": - - /url: /blog/healing-series - - text: Mar 15 - - listitem: - - 'link "Silencing the Inner Critic: Finding Your Authentic Voice"': - - /url: /blog/trauma-series/inner-critic - - text: Mar 12 · 10 min - - listitem: - - 'link "Healing Your Inner Child: A Path to Wholeness"': - - /url: /blog/trauma-series/healing-inner-child - - text: Mar 5 · 12 min - - listitem: - - link "The Physical Impact of Trauma": - - /url: /blog/trauma-body-series/physical-impact - - text: Mar 4 · 15 min - - listitem: - - link "Trauma and the Body Series": - - /url: /blog/trauma-body-series - - text: Mar 1 - - listitem: - - link "The Dance of Wounded Souls": - - /url: /blog/healing-series/dance-of-wounded-souls - - text: Feb 21 - - listitem: - - link "The Dark Side of Love": - - /url: /blog/trauma-series/dark-side-of-love - - text: Feb 20 · 8 min - - listitem: - - link "Understanding the Scapegoat Dynamic": - - /url: /blog/trauma-series/scapegoat-dynamics - - text: Feb 20 · 10 min - - listitem: - - link "Understanding Narcissism and Complex Trauma": - - /url: /blog/trauma-series/understanding-narcissism - - text: Feb 18 · 10 min - - listitem: - - link "The Heart of Codependency": - - /url: /blog/trauma-series/heart-of-codependency - - text: Feb 15 · 12 min - - listitem: - - link "Understanding Trauma Series": - - /url: /blog/trauma-series - - text: Feb 10 - - listitem: - - link "Codependency & Complex Trauma": - - /url: /blog/healing-series/codependency-and-trauma - - text: Jan 25 · 15 min - - link "all posts": - - /url: /blog - - link "tags": - - /url: /blog/tags - - link "RSS": - - /url: /rss.xml -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible - 27 | await expect(page.locator('header')).toBeVisible() -> 28 | await expect(page.locator('footer')).toBeVisible() - | ^ Error: expect.toBeVisible: Error: strict mode violation: locator('footer') resolved to 2 elements: - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot - 128 | await page.screenshot({ -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-chromium/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-chromium/error-context.md deleted file mode 100644 index 1c4291a547..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-chromium/error-context.md +++ /dev/null @@ -1,354 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> blog page should work in all browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: expect.toBeVisible: Error: strict mode violation: locator('footer') resolved to 2 elements: - 1)
aka locator('#main footer') - 2)
…
aka getByRole('contentinfo') - -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('footer') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:28:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme": - - img -- main: - - heading "Blog" [level=1] - - heading "2025" [level=2] - - list: - - listitem: - - link "The Dance of Minds - When AI and Human Psychology Collide": - - /url: /blog/convergence-of-minds - - text: Mar 15 - - listitem: - - ? link "AI in the Therapy Room - Promise, Pitfalls, and My - Patients' Reality" - : - /url: /blog/ai-mental-health-assistance - - text: Mar 9 - - listitem: - - link "When Machines Think But Can't Feel - The EQ Crisis": - - /url: /blog/emotional-intelligence-in-ai-world - - text: Mar 2 - - heading "2024" [level=2] - - list: - - listitem: - - ? 'link "Integrative Approaches to Trauma Treatment: Synthesizing - Modern Modalities"' - : - /url: /blog/neuroplasticity/integrative-approaches - - text: May 29 - - listitem: - - link "AI in Mental Health Crisis Prevention": - - /url: /blog/ai/crisis-prevention - - text: May 27 - - listitem: - - 'link "Nature''s Therapy: Outdoor Wellness Practices"': - - /url: /blog/wellness/nature-therapy - - text: May 25 - - listitem: - - link "Psychedelic Medicine & Neuroplasticity in Trauma Treatment": - - /url: /blog/neuroplasticity/psychedelic-medicine - - text: May 22 - - listitem: - - 'link "Emotional AI: Understanding Human Feelings"': - - /url: /blog/ai/emotional-ai - - text: May 20 - - listitem: - - link "Creative Expression for Mental Wellness": - - /url: /blog/wellness/creative-expression - - text: May 18 - - listitem: - - link "Advanced Somatic Technologies in Trauma Treatment": - - /url: /blog/neuroplasticity/somatic-technologies - - text: May 15 - - listitem: - - 'link "Digital Therapeutics: AI-Enhanced Mental Health Tools"': - - /url: /blog/ai/digital-therapeutics - - text: May 13 - - listitem: - - 'link "Friendship as Medicine: Nurturing Social Wellness"': - - /url: /blog/wellness/friendship-medicine - - text: May 11 - - listitem: - - 'link "Quantum Biology & Trauma: A New Frontier"': - - /url: /blog/neuroplasticity/quantum-biology - - text: May 8 - - listitem: - - 'link "AI Companions: The Future of Emotional Support"': - - /url: /blog/ai/ai-companions - - text: May 6 - - listitem: - - ? 'link "The Art of Micro-Joys: Finding Happiness in Small - Moments"' - : - /url: /blog/wellness/micro-joys - - text: May 4 - - listitem: - - link "The Neuroscience Revolution in Trauma Treatment": - - /url: /blog/neuroplasticity/neuroscience-revolution - - text: May 1 - - listitem: - - ? 'link "AI & Emotional Intelligence: The Future of Mental - Wellness"' - : - /url: /blog/ai/series-outline - - text: Apr 26 - - listitem: - - 'link "Everyday Joy: Simple Practices for Mental Wellness"': - - /url: /blog/wellness/series-outline - - text: Apr 19 - - listitem: - - link "🧬 Research Article Template": - - /url: /blog/planning/article-template - - text: Apr 12 - - listitem: - - link "Editorial Roadmap 2024": - - /url: /blog/planning/content-calendar - - text: Apr 12 - - listitem: - - 'link "Neuroplasticity & Trauma: A Revolutionary Approach"': - - /url: /blog/planning/series-outline - - text: Apr 12 - - listitem: - - 'link "Breaking the Silence: Our Journey Begins"': - - /url: /blog/welcome - - text: Apr 11 · 4 min - - listitem: - - link "Breaking Free from Trauma Bonds": - - /url: /blog/trauma-series/trauma-bonds - - text: Mar 19 · 11 min - - listitem: - - link "Emotional Unavail": - - /url: /blog/healing-series/emotional-unavailability - - text: Mar 15 - - listitem: - - link "Healing Journey Series": - - /url: /blog/healing-series - - text: Mar 15 - - listitem: - - 'link "Silencing the Inner Critic: Finding Your Authentic Voice"': - - /url: /blog/trauma-series/inner-critic - - text: Mar 12 · 10 min - - listitem: - - 'link "Healing Your Inner Child: A Path to Wholeness"': - - /url: /blog/trauma-series/healing-inner-child - - text: Mar 5 · 12 min - - listitem: - - link "The Physical Impact of Trauma": - - /url: /blog/trauma-body-series/physical-impact - - text: Mar 4 · 15 min - - listitem: - - link "Trauma and the Body Series": - - /url: /blog/trauma-body-series - - text: Mar 1 - - listitem: - - link "The Dance of Wounded Souls": - - /url: /blog/healing-series/dance-of-wounded-souls - - text: Feb 21 - - listitem: - - link "The Dark Side of Love": - - /url: /blog/trauma-series/dark-side-of-love - - text: Feb 20 · 8 min - - listitem: - - link "Understanding the Scapegoat Dynamic": - - /url: /blog/trauma-series/scapegoat-dynamics - - text: Feb 20 · 10 min - - listitem: - - link "Understanding Narcissism and Complex Trauma": - - /url: /blog/trauma-series/understanding-narcissism - - text: Feb 18 · 10 min - - listitem: - - link "The Heart of Codependency": - - /url: /blog/trauma-series/heart-of-codependency - - text: Feb 15 · 12 min - - listitem: - - link "Understanding Trauma Series": - - /url: /blog/trauma-series - - text: Feb 10 - - listitem: - - link "Codependency & Complex Trauma": - - /url: /blog/healing-series/codependency-and-trauma - - text: Jan 25 · 15 min - - link "all posts": - - /url: /blog - - link "tags": - - /url: /blog/tags - - link "RSS": - - /url: /rss.xml -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible - 27 | await expect(page.locator('header')).toBeVisible() -> 28 | await expect(page.locator('footer')).toBeVisible() - | ^ Error: expect.toBeVisible: Error: strict mode violation: locator('footer') resolved to 2 elements: - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot - 128 | await page.screenshot({ -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-firefox-retry1/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-firefox-retry1/error-context.md deleted file mode 100644 index 0f99fa6cde..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-firefox-retry1/error-context.md +++ /dev/null @@ -1,357 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> blog page should work in all browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 6 elements: - 1)
…
aka getByRole('banner') - 2)
…
aka getByText('5.7.10 Copy debug info') - 3)
…
aka getByText('Featured integrationsView all') - 4)
…
aka locator('header').filter({ hasText: 'Audit 0' }) - 5)
…
aka locator('header').filter({ hasText: 'No accessibility or' }) - 6)
…
aka locator('header').filter({ hasText: 'Settings' }) - -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('header') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:27:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme": - - img -- main: - - heading "Blog" [level=1] - - heading "2025" [level=2] - - list: - - listitem: - - link "The Dance of Minds - When AI and Human Psychology Collide": - - /url: /blog/convergence-of-minds - - text: Mar 15 - - listitem: - - ? link "AI in the Therapy Room - Promise, Pitfalls, and My - Patients' Reality" - : - /url: /blog/ai-mental-health-assistance - - text: Mar 9 - - listitem: - - link "When Machines Think But Can't Feel - The EQ Crisis": - - /url: /blog/emotional-intelligence-in-ai-world - - text: Mar 2 - - heading "2024" [level=2] - - list: - - listitem: - - ? 'link "Integrative Approaches to Trauma Treatment: Synthesizing - Modern Modalities"' - : - /url: /blog/neuroplasticity/integrative-approaches - - text: May 29 - - listitem: - - link "AI in Mental Health Crisis Prevention": - - /url: /blog/ai/crisis-prevention - - text: May 27 - - listitem: - - 'link "Nature''s Therapy: Outdoor Wellness Practices"': - - /url: /blog/wellness/nature-therapy - - text: May 25 - - listitem: - - link "Psychedelic Medicine & Neuroplasticity in Trauma Treatment": - - /url: /blog/neuroplasticity/psychedelic-medicine - - text: May 22 - - listitem: - - 'link "Emotional AI: Understanding Human Feelings"': - - /url: /blog/ai/emotional-ai - - text: May 20 - - listitem: - - link "Creative Expression for Mental Wellness": - - /url: /blog/wellness/creative-expression - - text: May 18 - - listitem: - - link "Advanced Somatic Technologies in Trauma Treatment": - - /url: /blog/neuroplasticity/somatic-technologies - - text: May 15 - - listitem: - - 'link "Digital Therapeutics: AI-Enhanced Mental Health Tools"': - - /url: /blog/ai/digital-therapeutics - - text: May 13 - - listitem: - - 'link "Friendship as Medicine: Nurturing Social Wellness"': - - /url: /blog/wellness/friendship-medicine - - text: May 11 - - listitem: - - 'link "Quantum Biology & Trauma: A New Frontier"': - - /url: /blog/neuroplasticity/quantum-biology - - text: May 8 - - listitem: - - 'link "AI Companions: The Future of Emotional Support"': - - /url: /blog/ai/ai-companions - - text: May 6 - - listitem: - - ? 'link "The Art of Micro-Joys: Finding Happiness in Small - Moments"' - : - /url: /blog/wellness/micro-joys - - text: May 4 - - listitem: - - link "The Neuroscience Revolution in Trauma Treatment": - - /url: /blog/neuroplasticity/neuroscience-revolution - - text: May 1 - - listitem: - - ? 'link "AI & Emotional Intelligence: The Future of Mental - Wellness"' - : - /url: /blog/ai/series-outline - - text: Apr 26 - - listitem: - - 'link "Everyday Joy: Simple Practices for Mental Wellness"': - - /url: /blog/wellness/series-outline - - text: Apr 19 - - listitem: - - link "🧬 Research Article Template": - - /url: /blog/planning/article-template - - text: Apr 12 - - listitem: - - link "Editorial Roadmap 2024": - - /url: /blog/planning/content-calendar - - text: Apr 12 - - listitem: - - 'link "Neuroplasticity & Trauma: A Revolutionary Approach"': - - /url: /blog/planning/series-outline - - text: Apr 12 - - listitem: - - 'link "Breaking the Silence: Our Journey Begins"': - - /url: /blog/welcome - - text: Apr 11 · 4 min - - listitem: - - link "Breaking Free from Trauma Bonds": - - /url: /blog/trauma-series/trauma-bonds - - text: Mar 19 · 11 min - - listitem: - - link "Emotional Unavail": - - /url: /blog/healing-series/emotional-unavailability - - text: Mar 15 - - listitem: - - link "Healing Journey Series": - - /url: /blog/healing-series - - text: Mar 15 - - listitem: - - 'link "Silencing the Inner Critic: Finding Your Authentic Voice"': - - /url: /blog/trauma-series/inner-critic - - text: Mar 12 · 10 min - - listitem: - - 'link "Healing Your Inner Child: A Path to Wholeness"': - - /url: /blog/trauma-series/healing-inner-child - - text: Mar 5 · 12 min - - listitem: - - link "The Physical Impact of Trauma": - - /url: /blog/trauma-body-series/physical-impact - - text: Mar 4 · 15 min - - listitem: - - link "Trauma and the Body Series": - - /url: /blog/trauma-body-series - - text: Mar 1 - - listitem: - - link "The Dance of Wounded Souls": - - /url: /blog/healing-series/dance-of-wounded-souls - - text: Feb 21 - - listitem: - - link "The Dark Side of Love": - - /url: /blog/trauma-series/dark-side-of-love - - text: Feb 20 · 8 min - - listitem: - - link "Understanding the Scapegoat Dynamic": - - /url: /blog/trauma-series/scapegoat-dynamics - - text: Feb 20 · 10 min - - listitem: - - link "Understanding Narcissism and Complex Trauma": - - /url: /blog/trauma-series/understanding-narcissism - - text: Feb 18 · 10 min - - listitem: - - link "The Heart of Codependency": - - /url: /blog/trauma-series/heart-of-codependency - - text: Feb 15 · 12 min - - listitem: - - link "Understanding Trauma Series": - - /url: /blog/trauma-series - - text: Feb 10 - - listitem: - - link "Codependency & Complex Trauma": - - /url: /blog/healing-series/codependency-and-trauma - - text: Jan 25 · 15 min - - link "all posts": - - /url: /blog - - link "tags": - - /url: /blog/tags - - link "RSS": - - /url: /rss.xml -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible -> 27 | await expect(page.locator('header')).toBeVisible() - | ^ Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 6 elements: - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-firefox-retry2/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-firefox-retry2/error-context.md deleted file mode 100644 index 0f99fa6cde..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-firefox-retry2/error-context.md +++ /dev/null @@ -1,357 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> blog page should work in all browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 6 elements: - 1)
…
aka getByRole('banner') - 2)
…
aka getByText('5.7.10 Copy debug info') - 3)
…
aka getByText('Featured integrationsView all') - 4)
…
aka locator('header').filter({ hasText: 'Audit 0' }) - 5)
…
aka locator('header').filter({ hasText: 'No accessibility or' }) - 6)
…
aka locator('header').filter({ hasText: 'Settings' }) - -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('header') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:27:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme": - - img -- main: - - heading "Blog" [level=1] - - heading "2025" [level=2] - - list: - - listitem: - - link "The Dance of Minds - When AI and Human Psychology Collide": - - /url: /blog/convergence-of-minds - - text: Mar 15 - - listitem: - - ? link "AI in the Therapy Room - Promise, Pitfalls, and My - Patients' Reality" - : - /url: /blog/ai-mental-health-assistance - - text: Mar 9 - - listitem: - - link "When Machines Think But Can't Feel - The EQ Crisis": - - /url: /blog/emotional-intelligence-in-ai-world - - text: Mar 2 - - heading "2024" [level=2] - - list: - - listitem: - - ? 'link "Integrative Approaches to Trauma Treatment: Synthesizing - Modern Modalities"' - : - /url: /blog/neuroplasticity/integrative-approaches - - text: May 29 - - listitem: - - link "AI in Mental Health Crisis Prevention": - - /url: /blog/ai/crisis-prevention - - text: May 27 - - listitem: - - 'link "Nature''s Therapy: Outdoor Wellness Practices"': - - /url: /blog/wellness/nature-therapy - - text: May 25 - - listitem: - - link "Psychedelic Medicine & Neuroplasticity in Trauma Treatment": - - /url: /blog/neuroplasticity/psychedelic-medicine - - text: May 22 - - listitem: - - 'link "Emotional AI: Understanding Human Feelings"': - - /url: /blog/ai/emotional-ai - - text: May 20 - - listitem: - - link "Creative Expression for Mental Wellness": - - /url: /blog/wellness/creative-expression - - text: May 18 - - listitem: - - link "Advanced Somatic Technologies in Trauma Treatment": - - /url: /blog/neuroplasticity/somatic-technologies - - text: May 15 - - listitem: - - 'link "Digital Therapeutics: AI-Enhanced Mental Health Tools"': - - /url: /blog/ai/digital-therapeutics - - text: May 13 - - listitem: - - 'link "Friendship as Medicine: Nurturing Social Wellness"': - - /url: /blog/wellness/friendship-medicine - - text: May 11 - - listitem: - - 'link "Quantum Biology & Trauma: A New Frontier"': - - /url: /blog/neuroplasticity/quantum-biology - - text: May 8 - - listitem: - - 'link "AI Companions: The Future of Emotional Support"': - - /url: /blog/ai/ai-companions - - text: May 6 - - listitem: - - ? 'link "The Art of Micro-Joys: Finding Happiness in Small - Moments"' - : - /url: /blog/wellness/micro-joys - - text: May 4 - - listitem: - - link "The Neuroscience Revolution in Trauma Treatment": - - /url: /blog/neuroplasticity/neuroscience-revolution - - text: May 1 - - listitem: - - ? 'link "AI & Emotional Intelligence: The Future of Mental - Wellness"' - : - /url: /blog/ai/series-outline - - text: Apr 26 - - listitem: - - 'link "Everyday Joy: Simple Practices for Mental Wellness"': - - /url: /blog/wellness/series-outline - - text: Apr 19 - - listitem: - - link "🧬 Research Article Template": - - /url: /blog/planning/article-template - - text: Apr 12 - - listitem: - - link "Editorial Roadmap 2024": - - /url: /blog/planning/content-calendar - - text: Apr 12 - - listitem: - - 'link "Neuroplasticity & Trauma: A Revolutionary Approach"': - - /url: /blog/planning/series-outline - - text: Apr 12 - - listitem: - - 'link "Breaking the Silence: Our Journey Begins"': - - /url: /blog/welcome - - text: Apr 11 · 4 min - - listitem: - - link "Breaking Free from Trauma Bonds": - - /url: /blog/trauma-series/trauma-bonds - - text: Mar 19 · 11 min - - listitem: - - link "Emotional Unavail": - - /url: /blog/healing-series/emotional-unavailability - - text: Mar 15 - - listitem: - - link "Healing Journey Series": - - /url: /blog/healing-series - - text: Mar 15 - - listitem: - - 'link "Silencing the Inner Critic: Finding Your Authentic Voice"': - - /url: /blog/trauma-series/inner-critic - - text: Mar 12 · 10 min - - listitem: - - 'link "Healing Your Inner Child: A Path to Wholeness"': - - /url: /blog/trauma-series/healing-inner-child - - text: Mar 5 · 12 min - - listitem: - - link "The Physical Impact of Trauma": - - /url: /blog/trauma-body-series/physical-impact - - text: Mar 4 · 15 min - - listitem: - - link "Trauma and the Body Series": - - /url: /blog/trauma-body-series - - text: Mar 1 - - listitem: - - link "The Dance of Wounded Souls": - - /url: /blog/healing-series/dance-of-wounded-souls - - text: Feb 21 - - listitem: - - link "The Dark Side of Love": - - /url: /blog/trauma-series/dark-side-of-love - - text: Feb 20 · 8 min - - listitem: - - link "Understanding the Scapegoat Dynamic": - - /url: /blog/trauma-series/scapegoat-dynamics - - text: Feb 20 · 10 min - - listitem: - - link "Understanding Narcissism and Complex Trauma": - - /url: /blog/trauma-series/understanding-narcissism - - text: Feb 18 · 10 min - - listitem: - - link "The Heart of Codependency": - - /url: /blog/trauma-series/heart-of-codependency - - text: Feb 15 · 12 min - - listitem: - - link "Understanding Trauma Series": - - /url: /blog/trauma-series - - text: Feb 10 - - listitem: - - link "Codependency & Complex Trauma": - - /url: /blog/healing-series/codependency-and-trauma - - text: Jan 25 · 15 min - - link "all posts": - - /url: /blog - - link "tags": - - /url: /blog/tags - - link "RSS": - - /url: /rss.xml -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible -> 27 | await expect(page.locator('header')).toBeVisible() - | ^ Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 6 elements: - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-firefox/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-firefox/error-context.md deleted file mode 100644 index 0f99fa6cde..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-firefox/error-context.md +++ /dev/null @@ -1,357 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> blog page should work in all browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 6 elements: - 1)
…
aka getByRole('banner') - 2)
…
aka getByText('5.7.10 Copy debug info') - 3)
…
aka getByText('Featured integrationsView all') - 4)
…
aka locator('header').filter({ hasText: 'Audit 0' }) - 5)
…
aka locator('header').filter({ hasText: 'No accessibility or' }) - 6)
…
aka locator('header').filter({ hasText: 'Settings' }) - -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('header') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:27:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme": - - img -- main: - - heading "Blog" [level=1] - - heading "2025" [level=2] - - list: - - listitem: - - link "The Dance of Minds - When AI and Human Psychology Collide": - - /url: /blog/convergence-of-minds - - text: Mar 15 - - listitem: - - ? link "AI in the Therapy Room - Promise, Pitfalls, and My - Patients' Reality" - : - /url: /blog/ai-mental-health-assistance - - text: Mar 9 - - listitem: - - link "When Machines Think But Can't Feel - The EQ Crisis": - - /url: /blog/emotional-intelligence-in-ai-world - - text: Mar 2 - - heading "2024" [level=2] - - list: - - listitem: - - ? 'link "Integrative Approaches to Trauma Treatment: Synthesizing - Modern Modalities"' - : - /url: /blog/neuroplasticity/integrative-approaches - - text: May 29 - - listitem: - - link "AI in Mental Health Crisis Prevention": - - /url: /blog/ai/crisis-prevention - - text: May 27 - - listitem: - - 'link "Nature''s Therapy: Outdoor Wellness Practices"': - - /url: /blog/wellness/nature-therapy - - text: May 25 - - listitem: - - link "Psychedelic Medicine & Neuroplasticity in Trauma Treatment": - - /url: /blog/neuroplasticity/psychedelic-medicine - - text: May 22 - - listitem: - - 'link "Emotional AI: Understanding Human Feelings"': - - /url: /blog/ai/emotional-ai - - text: May 20 - - listitem: - - link "Creative Expression for Mental Wellness": - - /url: /blog/wellness/creative-expression - - text: May 18 - - listitem: - - link "Advanced Somatic Technologies in Trauma Treatment": - - /url: /blog/neuroplasticity/somatic-technologies - - text: May 15 - - listitem: - - 'link "Digital Therapeutics: AI-Enhanced Mental Health Tools"': - - /url: /blog/ai/digital-therapeutics - - text: May 13 - - listitem: - - 'link "Friendship as Medicine: Nurturing Social Wellness"': - - /url: /blog/wellness/friendship-medicine - - text: May 11 - - listitem: - - 'link "Quantum Biology & Trauma: A New Frontier"': - - /url: /blog/neuroplasticity/quantum-biology - - text: May 8 - - listitem: - - 'link "AI Companions: The Future of Emotional Support"': - - /url: /blog/ai/ai-companions - - text: May 6 - - listitem: - - ? 'link "The Art of Micro-Joys: Finding Happiness in Small - Moments"' - : - /url: /blog/wellness/micro-joys - - text: May 4 - - listitem: - - link "The Neuroscience Revolution in Trauma Treatment": - - /url: /blog/neuroplasticity/neuroscience-revolution - - text: May 1 - - listitem: - - ? 'link "AI & Emotional Intelligence: The Future of Mental - Wellness"' - : - /url: /blog/ai/series-outline - - text: Apr 26 - - listitem: - - 'link "Everyday Joy: Simple Practices for Mental Wellness"': - - /url: /blog/wellness/series-outline - - text: Apr 19 - - listitem: - - link "🧬 Research Article Template": - - /url: /blog/planning/article-template - - text: Apr 12 - - listitem: - - link "Editorial Roadmap 2024": - - /url: /blog/planning/content-calendar - - text: Apr 12 - - listitem: - - 'link "Neuroplasticity & Trauma: A Revolutionary Approach"': - - /url: /blog/planning/series-outline - - text: Apr 12 - - listitem: - - 'link "Breaking the Silence: Our Journey Begins"': - - /url: /blog/welcome - - text: Apr 11 · 4 min - - listitem: - - link "Breaking Free from Trauma Bonds": - - /url: /blog/trauma-series/trauma-bonds - - text: Mar 19 · 11 min - - listitem: - - link "Emotional Unavail": - - /url: /blog/healing-series/emotional-unavailability - - text: Mar 15 - - listitem: - - link "Healing Journey Series": - - /url: /blog/healing-series - - text: Mar 15 - - listitem: - - 'link "Silencing the Inner Critic: Finding Your Authentic Voice"': - - /url: /blog/trauma-series/inner-critic - - text: Mar 12 · 10 min - - listitem: - - 'link "Healing Your Inner Child: A Path to Wholeness"': - - /url: /blog/trauma-series/healing-inner-child - - text: Mar 5 · 12 min - - listitem: - - link "The Physical Impact of Trauma": - - /url: /blog/trauma-body-series/physical-impact - - text: Mar 4 · 15 min - - listitem: - - link "Trauma and the Body Series": - - /url: /blog/trauma-body-series - - text: Mar 1 - - listitem: - - link "The Dance of Wounded Souls": - - /url: /blog/healing-series/dance-of-wounded-souls - - text: Feb 21 - - listitem: - - link "The Dark Side of Love": - - /url: /blog/trauma-series/dark-side-of-love - - text: Feb 20 · 8 min - - listitem: - - link "Understanding the Scapegoat Dynamic": - - /url: /blog/trauma-series/scapegoat-dynamics - - text: Feb 20 · 10 min - - listitem: - - link "Understanding Narcissism and Complex Trauma": - - /url: /blog/trauma-series/understanding-narcissism - - text: Feb 18 · 10 min - - listitem: - - link "The Heart of Codependency": - - /url: /blog/trauma-series/heart-of-codependency - - text: Feb 15 · 12 min - - listitem: - - link "Understanding Trauma Series": - - /url: /blog/trauma-series - - text: Feb 10 - - listitem: - - link "Codependency & Complex Trauma": - - /url: /blog/healing-series/codependency-and-trauma - - text: Jan 25 · 15 min - - link "all posts": - - /url: /blog - - link "tags": - - /url: /blog/tags - - link "RSS": - - /url: /rss.xml -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible -> 27 | await expect(page.locator('header')).toBeVisible() - | ^ Error: expect.toBeVisible: Error: strict mode violation: locator('header') resolved to 6 elements: - 28 | await expect(page.locator('footer')).toBeVisible() - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-webkit-retry1/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-webkit-retry1/error-context.md deleted file mode 100644 index 31a78a1681..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-webkit-retry1/error-context.md +++ /dev/null @@ -1,353 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> blog page should work in all browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: expect.toBeVisible: Error: strict mode violation: locator('footer') resolved to 2 elements: - 1)
aka locator('#main footer') - 2)
…
aka getByRole('contentinfo') - -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('footer') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:28:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme" -- main: - - heading "Blog" [level=1] - - heading "2025" [level=2] - - list: - - listitem: - - link "The Dance of Minds - When AI and Human Psychology Collide": - - /url: /blog/convergence-of-minds - - text: Mar 15 - - listitem: - - ? link "AI in the Therapy Room - Promise, Pitfalls, and My - Patients' Reality" - : - /url: /blog/ai-mental-health-assistance - - text: Mar 9 - - listitem: - - link "When Machines Think But Can't Feel - The EQ Crisis": - - /url: /blog/emotional-intelligence-in-ai-world - - text: Mar 2 - - heading "2024" [level=2] - - list: - - listitem: - - ? 'link "Integrative Approaches to Trauma Treatment: Synthesizing - Modern Modalities"' - : - /url: /blog/neuroplasticity/integrative-approaches - - text: May 29 - - listitem: - - link "AI in Mental Health Crisis Prevention": - - /url: /blog/ai/crisis-prevention - - text: May 27 - - listitem: - - 'link "Nature''s Therapy: Outdoor Wellness Practices"': - - /url: /blog/wellness/nature-therapy - - text: May 25 - - listitem: - - link "Psychedelic Medicine & Neuroplasticity in Trauma Treatment": - - /url: /blog/neuroplasticity/psychedelic-medicine - - text: May 22 - - listitem: - - 'link "Emotional AI: Understanding Human Feelings"': - - /url: /blog/ai/emotional-ai - - text: May 20 - - listitem: - - link "Creative Expression for Mental Wellness": - - /url: /blog/wellness/creative-expression - - text: May 18 - - listitem: - - link "Advanced Somatic Technologies in Trauma Treatment": - - /url: /blog/neuroplasticity/somatic-technologies - - text: May 15 - - listitem: - - 'link "Digital Therapeutics: AI-Enhanced Mental Health Tools"': - - /url: /blog/ai/digital-therapeutics - - text: May 13 - - listitem: - - 'link "Friendship as Medicine: Nurturing Social Wellness"': - - /url: /blog/wellness/friendship-medicine - - text: May 11 - - listitem: - - 'link "Quantum Biology & Trauma: A New Frontier"': - - /url: /blog/neuroplasticity/quantum-biology - - text: May 8 - - listitem: - - 'link "AI Companions: The Future of Emotional Support"': - - /url: /blog/ai/ai-companions - - text: May 6 - - listitem: - - ? 'link "The Art of Micro-Joys: Finding Happiness in Small - Moments"' - : - /url: /blog/wellness/micro-joys - - text: May 4 - - listitem: - - link "The Neuroscience Revolution in Trauma Treatment": - - /url: /blog/neuroplasticity/neuroscience-revolution - - text: May 1 - - listitem: - - ? 'link "AI & Emotional Intelligence: The Future of Mental - Wellness"' - : - /url: /blog/ai/series-outline - - text: Apr 26 - - listitem: - - 'link "Everyday Joy: Simple Practices for Mental Wellness"': - - /url: /blog/wellness/series-outline - - text: Apr 19 - - listitem: - - link "🧬 Research Article Template": - - /url: /blog/planning/article-template - - text: Apr 12 - - listitem: - - link "Editorial Roadmap 2024": - - /url: /blog/planning/content-calendar - - text: Apr 12 - - listitem: - - 'link "Neuroplasticity & Trauma: A Revolutionary Approach"': - - /url: /blog/planning/series-outline - - text: Apr 12 - - listitem: - - 'link "Breaking the Silence: Our Journey Begins"': - - /url: /blog/welcome - - text: Apr 11 · 4 min - - listitem: - - link "Breaking Free from Trauma Bonds": - - /url: /blog/trauma-series/trauma-bonds - - text: Mar 19 · 11 min - - listitem: - - link "Emotional Unavail": - - /url: /blog/healing-series/emotional-unavailability - - text: Mar 15 - - listitem: - - link "Healing Journey Series": - - /url: /blog/healing-series - - text: Mar 15 - - listitem: - - 'link "Silencing the Inner Critic: Finding Your Authentic Voice"': - - /url: /blog/trauma-series/inner-critic - - text: Mar 12 · 10 min - - listitem: - - 'link "Healing Your Inner Child: A Path to Wholeness"': - - /url: /blog/trauma-series/healing-inner-child - - text: Mar 5 · 12 min - - listitem: - - link "The Physical Impact of Trauma": - - /url: /blog/trauma-body-series/physical-impact - - text: Mar 4 · 15 min - - listitem: - - link "Trauma and the Body Series": - - /url: /blog/trauma-body-series - - text: Mar 1 - - listitem: - - link "The Dance of Wounded Souls": - - /url: /blog/healing-series/dance-of-wounded-souls - - text: Feb 21 - - listitem: - - link "The Dark Side of Love": - - /url: /blog/trauma-series/dark-side-of-love - - text: Feb 20 · 8 min - - listitem: - - link "Understanding the Scapegoat Dynamic": - - /url: /blog/trauma-series/scapegoat-dynamics - - text: Feb 20 · 10 min - - listitem: - - link "Understanding Narcissism and Complex Trauma": - - /url: /blog/trauma-series/understanding-narcissism - - text: Feb 18 · 10 min - - listitem: - - link "The Heart of Codependency": - - /url: /blog/trauma-series/heart-of-codependency - - text: Feb 15 · 12 min - - listitem: - - link "Understanding Trauma Series": - - /url: /blog/trauma-series - - text: Feb 10 - - listitem: - - link "Codependency & Complex Trauma": - - /url: /blog/healing-series/codependency-and-trauma - - text: Jan 25 · 15 min - - link "all posts": - - /url: /blog - - link "tags": - - /url: /blog/tags - - link "RSS": - - /url: /rss.xml -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible - 27 | await expect(page.locator('header')).toBeVisible() -> 28 | await expect(page.locator('footer')).toBeVisible() - | ^ Error: expect.toBeVisible: Error: strict mode violation: locator('footer') resolved to 2 elements: - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot - 128 | await page.screenshot({ -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-webkit-retry2/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-webkit-retry2/error-context.md deleted file mode 100644 index 31a78a1681..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-webkit-retry2/error-context.md +++ /dev/null @@ -1,353 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> blog page should work in all browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: expect.toBeVisible: Error: strict mode violation: locator('footer') resolved to 2 elements: - 1)
aka locator('#main footer') - 2)
…
aka getByRole('contentinfo') - -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('footer') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:28:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme" -- main: - - heading "Blog" [level=1] - - heading "2025" [level=2] - - list: - - listitem: - - link "The Dance of Minds - When AI and Human Psychology Collide": - - /url: /blog/convergence-of-minds - - text: Mar 15 - - listitem: - - ? link "AI in the Therapy Room - Promise, Pitfalls, and My - Patients' Reality" - : - /url: /blog/ai-mental-health-assistance - - text: Mar 9 - - listitem: - - link "When Machines Think But Can't Feel - The EQ Crisis": - - /url: /blog/emotional-intelligence-in-ai-world - - text: Mar 2 - - heading "2024" [level=2] - - list: - - listitem: - - ? 'link "Integrative Approaches to Trauma Treatment: Synthesizing - Modern Modalities"' - : - /url: /blog/neuroplasticity/integrative-approaches - - text: May 29 - - listitem: - - link "AI in Mental Health Crisis Prevention": - - /url: /blog/ai/crisis-prevention - - text: May 27 - - listitem: - - 'link "Nature''s Therapy: Outdoor Wellness Practices"': - - /url: /blog/wellness/nature-therapy - - text: May 25 - - listitem: - - link "Psychedelic Medicine & Neuroplasticity in Trauma Treatment": - - /url: /blog/neuroplasticity/psychedelic-medicine - - text: May 22 - - listitem: - - 'link "Emotional AI: Understanding Human Feelings"': - - /url: /blog/ai/emotional-ai - - text: May 20 - - listitem: - - link "Creative Expression for Mental Wellness": - - /url: /blog/wellness/creative-expression - - text: May 18 - - listitem: - - link "Advanced Somatic Technologies in Trauma Treatment": - - /url: /blog/neuroplasticity/somatic-technologies - - text: May 15 - - listitem: - - 'link "Digital Therapeutics: AI-Enhanced Mental Health Tools"': - - /url: /blog/ai/digital-therapeutics - - text: May 13 - - listitem: - - 'link "Friendship as Medicine: Nurturing Social Wellness"': - - /url: /blog/wellness/friendship-medicine - - text: May 11 - - listitem: - - 'link "Quantum Biology & Trauma: A New Frontier"': - - /url: /blog/neuroplasticity/quantum-biology - - text: May 8 - - listitem: - - 'link "AI Companions: The Future of Emotional Support"': - - /url: /blog/ai/ai-companions - - text: May 6 - - listitem: - - ? 'link "The Art of Micro-Joys: Finding Happiness in Small - Moments"' - : - /url: /blog/wellness/micro-joys - - text: May 4 - - listitem: - - link "The Neuroscience Revolution in Trauma Treatment": - - /url: /blog/neuroplasticity/neuroscience-revolution - - text: May 1 - - listitem: - - ? 'link "AI & Emotional Intelligence: The Future of Mental - Wellness"' - : - /url: /blog/ai/series-outline - - text: Apr 26 - - listitem: - - 'link "Everyday Joy: Simple Practices for Mental Wellness"': - - /url: /blog/wellness/series-outline - - text: Apr 19 - - listitem: - - link "🧬 Research Article Template": - - /url: /blog/planning/article-template - - text: Apr 12 - - listitem: - - link "Editorial Roadmap 2024": - - /url: /blog/planning/content-calendar - - text: Apr 12 - - listitem: - - 'link "Neuroplasticity & Trauma: A Revolutionary Approach"': - - /url: /blog/planning/series-outline - - text: Apr 12 - - listitem: - - 'link "Breaking the Silence: Our Journey Begins"': - - /url: /blog/welcome - - text: Apr 11 · 4 min - - listitem: - - link "Breaking Free from Trauma Bonds": - - /url: /blog/trauma-series/trauma-bonds - - text: Mar 19 · 11 min - - listitem: - - link "Emotional Unavail": - - /url: /blog/healing-series/emotional-unavailability - - text: Mar 15 - - listitem: - - link "Healing Journey Series": - - /url: /blog/healing-series - - text: Mar 15 - - listitem: - - 'link "Silencing the Inner Critic: Finding Your Authentic Voice"': - - /url: /blog/trauma-series/inner-critic - - text: Mar 12 · 10 min - - listitem: - - 'link "Healing Your Inner Child: A Path to Wholeness"': - - /url: /blog/trauma-series/healing-inner-child - - text: Mar 5 · 12 min - - listitem: - - link "The Physical Impact of Trauma": - - /url: /blog/trauma-body-series/physical-impact - - text: Mar 4 · 15 min - - listitem: - - link "Trauma and the Body Series": - - /url: /blog/trauma-body-series - - text: Mar 1 - - listitem: - - link "The Dance of Wounded Souls": - - /url: /blog/healing-series/dance-of-wounded-souls - - text: Feb 21 - - listitem: - - link "The Dark Side of Love": - - /url: /blog/trauma-series/dark-side-of-love - - text: Feb 20 · 8 min - - listitem: - - link "Understanding the Scapegoat Dynamic": - - /url: /blog/trauma-series/scapegoat-dynamics - - text: Feb 20 · 10 min - - listitem: - - link "Understanding Narcissism and Complex Trauma": - - /url: /blog/trauma-series/understanding-narcissism - - text: Feb 18 · 10 min - - listitem: - - link "The Heart of Codependency": - - /url: /blog/trauma-series/heart-of-codependency - - text: Feb 15 · 12 min - - listitem: - - link "Understanding Trauma Series": - - /url: /blog/trauma-series - - text: Feb 10 - - listitem: - - link "Codependency & Complex Trauma": - - /url: /blog/healing-series/codependency-and-trauma - - text: Jan 25 · 15 min - - link "all posts": - - /url: /blog - - link "tags": - - /url: /blog/tags - - link "RSS": - - /url: /rss.xml -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible - 27 | await expect(page.locator('header')).toBeVisible() -> 28 | await expect(page.locator('footer')).toBeVisible() - | ^ Error: expect.toBeVisible: Error: strict mode violation: locator('footer') resolved to 2 elements: - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot - 128 | await page.screenshot({ -``` diff --git a/apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-webkit/error-context.md b/apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-webkit/error-context.md deleted file mode 100644 index 31a78a1681..0000000000 --- a/apps/web/public/test-results/cross-browser-compatibilit-cadb0-should-work-in-all-browsers-webkit/error-context.md +++ /dev/null @@ -1,353 +0,0 @@ -# Test info - -- Name: Cross-browser compatibility >> blog page should work in all browsers -- Location: - /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:46:5 - -# Error details - -``` -Error: expect.toBeVisible: Error: strict mode violation: locator('footer') resolved to 2 elements: - 1)
aka locator('#main footer') - 2)
…
aka getByRole('contentinfo') - -Call log: - - expect.toBeVisible with timeout 15000ms - - waiting for locator('footer') - - at testCoreFunctionality (/home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:28:40) - at /home/runner/work/pixelated/pixelated/src/tests/cross-browser-compatibility.test.ts:51:22 -``` - -# Page snapshot - -```yaml -- alert -- link "Skip to content": - - /url: '#main' -- banner: - - link "Vivi Ornitier @ pixelatedempathy.com": - - /url: / - - img - - navigation: - - list: - - listitem: - - link "Features": - - /url: /features - - listitem: - - link "Blog": - - /url: /blog - - listitem: - - link "Dashboard": - - /url: /dashboard - - listitem: - - link "AntfuStyle on Github": - - /url: https://github.com/vivirox - - listitem: - - link "Vivi on Twitter": - - /url: https://x.com/pixelated - - button "Toggle theme" -- main: - - heading "Blog" [level=1] - - heading "2025" [level=2] - - list: - - listitem: - - link "The Dance of Minds - When AI and Human Psychology Collide": - - /url: /blog/convergence-of-minds - - text: Mar 15 - - listitem: - - ? link "AI in the Therapy Room - Promise, Pitfalls, and My - Patients' Reality" - : - /url: /blog/ai-mental-health-assistance - - text: Mar 9 - - listitem: - - link "When Machines Think But Can't Feel - The EQ Crisis": - - /url: /blog/emotional-intelligence-in-ai-world - - text: Mar 2 - - heading "2024" [level=2] - - list: - - listitem: - - ? 'link "Integrative Approaches to Trauma Treatment: Synthesizing - Modern Modalities"' - : - /url: /blog/neuroplasticity/integrative-approaches - - text: May 29 - - listitem: - - link "AI in Mental Health Crisis Prevention": - - /url: /blog/ai/crisis-prevention - - text: May 27 - - listitem: - - 'link "Nature''s Therapy: Outdoor Wellness Practices"': - - /url: /blog/wellness/nature-therapy - - text: May 25 - - listitem: - - link "Psychedelic Medicine & Neuroplasticity in Trauma Treatment": - - /url: /blog/neuroplasticity/psychedelic-medicine - - text: May 22 - - listitem: - - 'link "Emotional AI: Understanding Human Feelings"': - - /url: /blog/ai/emotional-ai - - text: May 20 - - listitem: - - link "Creative Expression for Mental Wellness": - - /url: /blog/wellness/creative-expression - - text: May 18 - - listitem: - - link "Advanced Somatic Technologies in Trauma Treatment": - - /url: /blog/neuroplasticity/somatic-technologies - - text: May 15 - - listitem: - - 'link "Digital Therapeutics: AI-Enhanced Mental Health Tools"': - - /url: /blog/ai/digital-therapeutics - - text: May 13 - - listitem: - - 'link "Friendship as Medicine: Nurturing Social Wellness"': - - /url: /blog/wellness/friendship-medicine - - text: May 11 - - listitem: - - 'link "Quantum Biology & Trauma: A New Frontier"': - - /url: /blog/neuroplasticity/quantum-biology - - text: May 8 - - listitem: - - 'link "AI Companions: The Future of Emotional Support"': - - /url: /blog/ai/ai-companions - - text: May 6 - - listitem: - - ? 'link "The Art of Micro-Joys: Finding Happiness in Small - Moments"' - : - /url: /blog/wellness/micro-joys - - text: May 4 - - listitem: - - link "The Neuroscience Revolution in Trauma Treatment": - - /url: /blog/neuroplasticity/neuroscience-revolution - - text: May 1 - - listitem: - - ? 'link "AI & Emotional Intelligence: The Future of Mental - Wellness"' - : - /url: /blog/ai/series-outline - - text: Apr 26 - - listitem: - - 'link "Everyday Joy: Simple Practices for Mental Wellness"': - - /url: /blog/wellness/series-outline - - text: Apr 19 - - listitem: - - link "🧬 Research Article Template": - - /url: /blog/planning/article-template - - text: Apr 12 - - listitem: - - link "Editorial Roadmap 2024": - - /url: /blog/planning/content-calendar - - text: Apr 12 - - listitem: - - 'link "Neuroplasticity & Trauma: A Revolutionary Approach"': - - /url: /blog/planning/series-outline - - text: Apr 12 - - listitem: - - 'link "Breaking the Silence: Our Journey Begins"': - - /url: /blog/welcome - - text: Apr 11 · 4 min - - listitem: - - link "Breaking Free from Trauma Bonds": - - /url: /blog/trauma-series/trauma-bonds - - text: Mar 19 · 11 min - - listitem: - - link "Emotional Unavail": - - /url: /blog/healing-series/emotional-unavailability - - text: Mar 15 - - listitem: - - link "Healing Journey Series": - - /url: /blog/healing-series - - text: Mar 15 - - listitem: - - 'link "Silencing the Inner Critic: Finding Your Authentic Voice"': - - /url: /blog/trauma-series/inner-critic - - text: Mar 12 · 10 min - - listitem: - - 'link "Healing Your Inner Child: A Path to Wholeness"': - - /url: /blog/trauma-series/healing-inner-child - - text: Mar 5 · 12 min - - listitem: - - link "The Physical Impact of Trauma": - - /url: /blog/trauma-body-series/physical-impact - - text: Mar 4 · 15 min - - listitem: - - link "Trauma and the Body Series": - - /url: /blog/trauma-body-series - - text: Mar 1 - - listitem: - - link "The Dance of Wounded Souls": - - /url: /blog/healing-series/dance-of-wounded-souls - - text: Feb 21 - - listitem: - - link "The Dark Side of Love": - - /url: /blog/trauma-series/dark-side-of-love - - text: Feb 20 · 8 min - - listitem: - - link "Understanding the Scapegoat Dynamic": - - /url: /blog/trauma-series/scapegoat-dynamics - - text: Feb 20 · 10 min - - listitem: - - link "Understanding Narcissism and Complex Trauma": - - /url: /blog/trauma-series/understanding-narcissism - - text: Feb 18 · 10 min - - listitem: - - link "The Heart of Codependency": - - /url: /blog/trauma-series/heart-of-codependency - - text: Feb 15 · 12 min - - listitem: - - link "Understanding Trauma Series": - - /url: /blog/trauma-series - - text: Feb 10 - - listitem: - - link "Codependency & Complex Trauma": - - /url: /blog/healing-series/codependency-and-trauma - - text: Jan 25 · 15 min - - link "all posts": - - /url: /blog - - link "tags": - - /url: /blog/tags - - link "RSS": - - /url: /rss.xml -- contentinfo: - - paragraph: © 2025 Pixelated Empathy. All rights reserved. - - link "Privacy Policy": - - /url: /privacy - - link "Terms of Service": - - /url: /terms - - link "Contact": - - /url: /contact -- button "Scroll to top" -``` - -# Test source - -```ts - 1 | /** - 2 | * Cross-Browser Compatibility Tests - 3 | * - 4 | * This file contains tests to verify that our application works correctly - 5 | * across different browsers (Chromium, Firefox, and WebKit). - 6 | */ - 7 | - 8 | import { test, expect } from '@playwright/test' - 9 | - 10 | // Define test URLs to check across browsers - 11 | const TEST_URLS = { - 12 | home: '/', - 13 | blog: '/blog', - 14 | documentation: '/docs', - 15 | dashboard: '/admin/dashboard', - 16 | simulator: '/simulator', - 17 | } - 18 | - 19 | // Define a reusable function to test core page functionality - 20 | async function testCoreFunctionality(page, url) { - 21 | await page.goto(url) - 22 | - 23 | // Verify page loaded - 24 | expect(await page.title()).not.toBe('') - 25 | - 26 | // Check that critical elements are visible - 27 | await expect(page.locator('header')).toBeVisible() -> 28 | await expect(page.locator('footer')).toBeVisible() - | ^ Error: expect.toBeVisible: Error: strict mode violation: locator('footer') resolved to 2 elements: - 29 | - 30 | // Check that no console errors occurred - 31 | const errors = [] - 32 | page.on('console', (msg) => { - 33 | if (msg.type() === 'error') { - 34 | errors.push(msg.text()) - 35 | } - 36 | }) - 37 | - 38 | // Return any errors found - 39 | return errors - 40 | } - 41 | - 42 | // Define tests for different browsers - 43 | // Note: These tests will run on the browsers configured in playwright.config.ts - 44 | test.describe('Cross-browser compatibility', () => { - 45 | for (const [pageName, url] of Object.entries(TEST_URLS)) { - 46 | test(`${pageName} page should work in all browsers`, async ({ - 47 | page, - 48 | browserName, - 49 | }) => { - 50 | // Run the core functionality test - 51 | const errors = await testCoreFunctionality(page, url) - 52 | - 53 | // Take a screenshot for visual comparison - 54 | await page.screenshot({ - 55 | path: `./test-results/cross-browser/${browserName}-${pageName}.png`, - 56 | }) - 57 | - 58 | // Verify no console errors occurred - 59 | expect(errors).toEqual([]) - 60 | - 61 | // Test page-specific elements - 62 | switch (pageName) { - 63 | case 'home': - 64 | // Check hero section - 65 | await expect(page.locator('.hero-section')).toBeVisible() - 66 | break - 67 | - 68 | case 'blog': - 69 | // Check blog post listing - 70 | await expect(page.locator('article')).toBeVisible() - 71 | break - 72 | - 73 | case 'documentation': - 74 | // Check docs navigation - 75 | await expect(page.locator('.docs-sidebar')).toBeVisible() - 76 | // Ensure code blocks render correctly - 77 | await expect(page.locator('pre code')).toBeVisible() - 78 | break - 79 | - 80 | case 'dashboard': - 81 | // Check dashboard elements - 82 | await expect(page.locator('.dashboard-header')).toBeVisible() - 83 | // Ensure charts render properly - 84 | await expect(page.locator('.chart-container')).toBeVisible() - 85 | break - 86 | - 87 | case 'simulator': - 88 | // Check simulator elements - 89 | await expect( - 90 | page.locator('h2:has-text("Therapeutic Practice Simulator")'), - 91 | ).toBeVisible() - 92 | break - 93 | } - 94 | }) - 95 | } - 96 | - 97 | // Test responsive behavior across browsers - 98 | test('responsive navigation works correctly in all browsers', async ({ - 99 | page, - 100 | browserName, - 101 | }) => { - 102 | // Go to home page - 103 | await page.goto('/') - 104 | - 105 | // Test desktop navigation - 106 | await page.setViewportSize({ width: 1280, height: 800 }) - 107 | await expect(page.locator('nav ul')).toBeVisible() - 108 | - 109 | // Take a screenshot - 110 | await page.screenshot({ - 111 | path: `./test-results/cross-browser/${browserName}-nav-desktop.png`, - 112 | }) - 113 | - 114 | // Test mobile navigation - 115 | await page.setViewportSize({ width: 375, height: 667 }) - 116 | - 117 | // Menu should be collapsed on mobile - 118 | await expect(page.locator('nav ul')).not.toBeVisible() - 119 | await expect(page.locator('button[aria-label="Toggle menu"]')).toBeVisible() - 120 | - 121 | // Open mobile menu - 122 | await page.locator('button[aria-label="Toggle menu"]').click() - 123 | - 124 | // Menu should now be visible - 125 | await expect(page.locator('nav ul')).toBeVisible() - 126 | - 127 | // Take a screenshot - 128 | await page.screenshot({ -``` diff --git a/apps/web/src/api/memory/__tests__/[memoryId].test.ts b/apps/web/src/api/memory/__tests__/[memoryId].test.ts deleted file mode 100644 index 12b63fa48e..0000000000 --- a/apps/web/src/api/memory/__tests__/[memoryId].test.ts +++ /dev/null @@ -1,60 +0,0 @@ -/** - * @vitest-environment node - */ -import { describe, expect, it, vi, beforeEach } from 'vitest' - -import { getCurrentUser } from '@/lib/auth' - -import { GET } from '../routes/[memoryId]' - -const mockGetMemory = vi.fn() - -vi.mock('@/lib/auth', () => ({ getCurrentUser: vi.fn() })) - -vi.mock('../_shared', async (importOriginal) => { - const actual = await importOriginal() - return { - ...actual, - getGateway: vi.fn(() => ({ getMemory: mockGetMemory })), - } -}) - -describe('Memory ID Endpoints', () => { - beforeEach(() => { - vi.clearAllMocks() - vi.mocked(getCurrentUser).mockResolvedValue({ - id: 'test-user-id', - accountId: 'test-account-id', - workspaceId: 'test-workspace-id', - role: 'user', - }) - }) - - describe('GET', () => { - it('returns a 400 if memoryId parameter is missing', async () => { - const request = new Request('http://localhost/api/memory') - const response = await GET({ request, params: {} }) - - expect(response.status).toBe(400) - const data = await response.json() - expect(data).toMatchObject({ - error: 'Bad Request', - message: 'memoryId parameter is required', - }) - }) - - it('returns a 404 if the memory is not found', async () => { - mockGetMemory.mockResolvedValueOnce(null) - - const request = new Request('http://localhost/api/memory/mem-123') - const response = await GET({ request, params: { memoryId: 'mem-123' } }) - - expect(response.status).toBe(404) - const data = await response.json() - expect(data).toMatchObject({ - error: 'Not Found', - message: 'Memory not found', - }) - }) - }) -}) diff --git a/apps/web/src/api/memory/__tests__/_shared.test.ts b/apps/web/src/api/memory/__tests__/_shared.test.ts deleted file mode 100644 index 13cbc847d7..0000000000 --- a/apps/web/src/api/memory/__tests__/_shared.test.ts +++ /dev/null @@ -1,453 +0,0 @@ -/** - * @vitest-environment node - */ -import { describe, expect, it, vi } from 'vitest' - -import { getCurrentUser } from '@/lib/auth' - -import { parsePagination, requireMemoryUser, toMemoryScope } from '../_shared' - -vi.mock('@/lib/services/product-memory-gateway', () => ({ - getProductMemoryGateway: vi.fn().mockReturnValue('mock-gateway'), - ProductMemoryGatewayError: class ProductMemoryGatewayError extends Error { - status: number - constructor(message: string, status: number) { - super(message) - this.status = status - } - }, -})) - -vi.mock('@/lib/auth', () => ({ - getCurrentUser: vi.fn(), -})) - -describe('requireMemoryUser', () => { - it('calls getCurrentUser with the provided request', async () => { - const request = new Request('http://localhost') - const mockUser = { id: 'user-1' } - vi.mocked(getCurrentUser).mockResolvedValue(mockUser as any) - - const result = await requireMemoryUser(request) - - expect(getCurrentUser).toHaveBeenCalledWith(request) - expect(result).toEqual(mockUser) - }) -}) - -describe('jsonResponse', () => { - it('creates a Response with JSON payload and default status 200', async () => { - const payload = { key: 'value' } - const { jsonResponse } = await import('../_shared') - const response = jsonResponse(payload) - - expect(response.status).toBe(200) - expect(response.headers.get('Content-Type')).toBe('application/json') - - const data = await response.json() - expect(data).toEqual(payload) - }) - - it('creates a Response with a custom status code', async () => { - const payload = { key: 'value' } - const { jsonResponse } = await import('../_shared') - const response = jsonResponse(payload, 201) - - expect(response.status).toBe(201) - expect(response.headers.get('Content-Type')).toBe('application/json') - }) -}) - -describe('successResponse', () => { - it('creates a Response with success payload, data, and default status 200', async () => { - const payload = { key: 'value' } - const { successResponse } = await import('../_shared') - const response = successResponse(payload) - - expect(response.status).toBe(200) - expect(response.headers.get('Content-Type')).toBe('application/json') - - const data = await response.json() - expect(data).toEqual({ - success: true, - data: payload, - message: 'Success', - }) - }) - - it('creates a Response with a custom message and status code', async () => { - const payload = { key: 'value' } - const { successResponse } = await import('../_shared') - const response = successResponse(payload, 'Created', 201) - - expect(response.status).toBe(201) - expect(response.headers.get('Content-Type')).toBe('application/json') - - const data = await response.json() - expect(data).toEqual({ - success: true, - data: payload, - message: 'Created', - }) - }) -}) - -describe('errorResponse', () => { - it('creates a Response with error payload, message, status, and details', async () => { - const { errorResponse } = await import('../_shared') - const response = errorResponse(400, 'Bad Request', 'Invalid input', { - field: 'name', - }) - - expect(response.status).toBe(400) - expect(response.headers.get('Content-Type')).toBe('application/json') - - const data = await response.json() - expect(data).toEqual({ - success: false, - error: 'Bad Request', - message: 'Invalid input', - details: { field: 'name' }, - }) - }) - - it('omits the details key when details is undefined', async () => { - const { errorResponse } = await import('../_shared') - const response = errorResponse(404, 'Not Found', 'Memory not found') - - expect(response.status).toBe(404) - expect(response.headers.get('Content-Type')).toBe('application/json') - - const data = await response.json() - expect(data).toEqual({ - success: false, - error: 'Not Found', - message: 'Memory not found', - }) - expect('details' in data).toBe(false) - }) - - it('includes the details key when details is an empty object', async () => { - const { errorResponse } = await import('../_shared') - const response = errorResponse(400, 'Bad Request', 'Invalid input', {}) - - const data = await response.json() - expect(data).toEqual({ - success: false, - error: 'Bad Request', - message: 'Invalid input', - details: {}, - }) - expect('details' in data).toBe(true) - }) - - it('includes details verbatim when present (object, array, string)', async () => { - const { errorResponse } = await import('../_shared') - - const objectRes = errorResponse(400, 'Bad Request', 'Invalid', { - reason: 'too long', - }) - const objectData = await objectRes.json() - expect(objectData['details']).toEqual({ reason: 'too long' }) - - const arrayRes = errorResponse(400, 'Bad Request', 'Invalid', [ - 'field-a', - 'field-b', - ]) - const arrayData = await arrayRes.json() - expect(arrayData['details']).toEqual(['field-a', 'field-b']) - - const stringRes = errorResponse( - 400, - 'Bad Request', - 'Invalid', - 'single-line detail', - ) - const stringData = await stringRes.json() - expect(stringData['details']).toBe('single-line detail') - }) - - it('preserves HTTP status codes 404 and 500 end-to-end', async () => { - const { errorResponse } = await import('../_shared') - - const notFound = errorResponse(404, 'Not Found', 'Memory not found') - expect(notFound.status).toBe(404) - - const serverError = errorResponse( - 500, - 'Internal Server Error', - 'Unexpected failure', - ) - expect(serverError.status).toBe(500) - - const serverData = await serverError.json() - expect(serverData).toEqual({ - success: false, - error: 'Internal Server Error', - message: 'Unexpected failure', - }) - }) -}) - -describe('jsonError', () => { - it('creates a Response with error payload, message, and status', async () => { - const { jsonError } = await import('../_shared') - const response = jsonError(400, 'Bad Request', 'Invalid input') - - expect(response.status).toBe(400) - expect(response.headers.get('Content-Type')).toBe('application/json') - - const data = await response.json() - expect(data).toEqual({ - error: 'Bad Request', - message: 'Invalid input', - }) - }) -}) - -describe('parsePagination', () => { - it('parses limit and offset with defaults', () => { - const url = new URL('http://localhost') - - expect(parsePagination(url)).toEqual({ - limit: 10, - offset: 0, - }) - }) - - it('parses explicit valid limit and offset', () => { - const url = new URL('http://localhost?limit=25&offset=5') - - expect(parsePagination(url)).toEqual({ - limit: 25, - offset: 5, - }) - }) - - it('falls back to defaults for non-numeric params', () => { - const url = new URL('http://localhost?limit=abc&offset=xyz') - - expect(parsePagination(url)).toEqual({ - limit: 10, - offset: 0, - }) - }) - - it('falls back when limit or offset are negative', () => { - const url = new URL('http://localhost?limit=-5&offset=-3') - - expect(parsePagination(url)).toEqual({ - limit: 10, - offset: 0, - }) - }) - - it('falls back to default limit when limit is zero', () => { - const url = new URL('http://localhost?limit=0&offset=12') - - expect(parsePagination(url)).toEqual({ - limit: 10, - offset: 12, - }) - }) - - it('handles partial params when only one query value is present', () => { - expect(parsePagination(new URL('http://localhost?limit=30'))).toEqual({ - limit: 30, - offset: 0, - }) - - expect(parsePagination(new URL('http://localhost?offset=15'))).toEqual({ - limit: 10, - offset: 15, - }) - }) - - it('caps limit at 100 for large values', () => { - const url = new URL('http://localhost?limit=500&offset=0') - - expect(parsePagination(url)).toEqual({ - limit: 100, - offset: 0, - }) - }) -}) - -describe('toMemoryScope', () => { - it('maps user, account, and workspace correctly with includeShared true', async () => { - const scope = toMemoryScope('user-1', 'account-1', 'workspace-1') - expect(scope).toEqual({ - userId: 'user-1', - accountId: 'account-1', - workspaceId: 'workspace-1', - includeShared: true, - }) - }) - - it('handles optional parameters', async () => { - const scope = toMemoryScope('user-1') - expect(scope).toEqual({ - userId: 'user-1', - accountId: undefined, - workspaceId: undefined, - includeShared: true, - }) - }) -}) - -describe('assertRequestedUser', () => { - it('returns null if requestedUserId is undefined or null', async () => { - const { assertRequestedUser } = await import('../_shared') - expect(assertRequestedUser('user-1', undefined)).toBeNull() - expect(assertRequestedUser('user-1', null)).toBeNull() - }) - - it('returns null if actualUserId matches requestedUserId', async () => { - const { assertRequestedUser } = await import('../_shared') - expect(assertRequestedUser('user-1', 'user-1')).toBeNull() - }) - - it('returns a 400 error response if actualUserId does not match requestedUserId', async () => { - const { assertRequestedUser } = await import('../_shared') - const response = assertRequestedUser('user-1', 'user-2') - - expect(response).toBeInstanceOf(Response) - expect(response?.status).toBe(400) - - const data = await response?.json() - expect(data).toEqual({ - error: 'Bad Request', - message: 'userId must match the authenticated user', - }) - }) -}) - -describe('withAuthenticatedMemoryRoute', () => { - it('returns a 401 error if user is not authenticated', async () => { - const { withAuthenticatedMemoryRoute } = await import('../_shared') - const { getCurrentUser } = await import('@/lib/auth') - - vi.mocked(getCurrentUser).mockResolvedValueOnce(null) - - const handler = vi.fn() - const route = withAuthenticatedMemoryRoute('testAction', handler) - - const request = new Request('http://localhost') - const response = await route({ request }) - - expect(response.status).toBe(401) - const data = await response.json() - expect(data.error).toBe('Unauthorized') - expect(handler).not.toHaveBeenCalled() - }) - - it('calls handler if user is authenticated and returns the response', async () => { - const { withAuthenticatedMemoryRoute } = await import('../_shared') - const { getCurrentUser } = await import('@/lib/auth') - - const mockUser = { id: 'user-1' } - vi.mocked(getCurrentUser).mockResolvedValueOnce(mockUser as any) - - const mockResponse = new Response(JSON.stringify({ success: true }), { - status: 200, - }) - const handler = vi.fn().mockResolvedValueOnce(mockResponse) - const route = withAuthenticatedMemoryRoute('testAction', handler) - - const request = new Request('http://localhost') - const context = { request, params: { memoryId: 'test-id' } } - const response = await route(context) - - expect(handler).toHaveBeenCalledWith(context, mockUser) - expect(response).toBe(mockResponse) - }) -}) - -describe('getGateway', () => { - it('calls getProductMemoryGateway and returns its result', async () => { - const { getGateway } = await import('../_shared') - const { getProductMemoryGateway } = - await import('@/lib/services/product-memory-gateway') - - const result = getGateway() - - expect(getProductMemoryGateway).toHaveBeenCalled() - expect(result).toBe('mock-gateway') - }) -}) - -describe('handleMemoryApiError', () => { - it('handles ProductMemoryGatewayError with 404 status', async () => { - const { handleMemoryApiError } = await import('../_shared') - const { ProductMemoryGatewayError } = - await import('@/lib/services/product-memory-gateway') - - const error = new ProductMemoryGatewayError('Not found', 404) - const response = handleMemoryApiError('testAction', error) - - expect(response.status).toBe(404) - const data = await response.json() - expect(data.error).toBe('Not Found') - }) - - it('handles ProductMemoryGatewayError with 400 status', async () => { - const { handleMemoryApiError } = await import('../_shared') - const { ProductMemoryGatewayError } = - await import('@/lib/services/product-memory-gateway') - - const error = new ProductMemoryGatewayError('Bad request', 400) - const response = handleMemoryApiError('testAction', error) - - expect(response.status).toBe(400) - const data = await response.json() - expect(data.error).toBe('Bad Request') - }) - - it('handles ProductMemoryGatewayError with 401 status', async () => { - const { handleMemoryApiError } = await import('../_shared') - const { ProductMemoryGatewayError } = - await import('@/lib/services/product-memory-gateway') - - const error = new ProductMemoryGatewayError('Unauthorized', 401) - const response = handleMemoryApiError('testAction', error) - - expect(response.status).toBe(502) - const data = await response.json() - expect(data.error).toBe('Bad Gateway') - }) - - it('handles ProductMemoryGatewayError with 403 status', async () => { - const { handleMemoryApiError } = await import('../_shared') - const { ProductMemoryGatewayError } = - await import('@/lib/services/product-memory-gateway') - - const error = new ProductMemoryGatewayError('Forbidden', 403) - const response = handleMemoryApiError('testAction', error) - - expect(response.status).toBe(502) - const data = await response.json() - expect(data.error).toBe('Bad Gateway') - }) - - it('handles standard Error', async () => { - const { handleMemoryApiError } = await import('../_shared') - - const error = new Error('Some unexpected error') - const response = handleMemoryApiError('testAction', error) - - expect(response.status).toBe(500) - const data = await response.json() - expect(data.error).toBe('Internal Server Error') - }) - - it('handles unknown error types', async () => { - const { handleMemoryApiError } = await import('../_shared') - - const error = 'Just a string error' - const response = handleMemoryApiError('testAction', error) - - expect(response.status).toBe(500) - const data = await response.json() - expect(data.error).toBe('Internal Server Error') - }) -}) diff --git a/apps/web/src/api/memory/__tests__/stats.test.ts b/apps/web/src/api/memory/__tests__/stats.test.ts deleted file mode 100644 index 4d8dc5bbd3..0000000000 --- a/apps/web/src/api/memory/__tests__/stats.test.ts +++ /dev/null @@ -1,78 +0,0 @@ -/** - * @vitest-environment node - */ -import { describe, expect, it, vi, beforeEach } from 'vitest' - -import { getCurrentUser } from '@/lib/auth' - -import { GET } from '../routes/stats' - -const mockGetMemoryStats = vi.fn() - -vi.mock('@/lib/auth', () => ({ getCurrentUser: vi.fn() })) - -vi.mock('../_shared', async (importOriginal) => { - const actual = await importOriginal() - return { - ...actual, - getGateway: vi.fn(() => ({ getMemoryStats: mockGetMemoryStats })), - } -}) - -describe('Memory Stats Endpoints', () => { - beforeEach(() => { - vi.clearAllMocks() - vi.mocked(getCurrentUser).mockResolvedValue({ - id: 'test-user-id', - accountId: 'test-account-id', - workspaceId: 'test-workspace-id', - role: 'user', - }) - }) - - describe('GET', () => { - it('returns memory statistics successfully', async () => { - mockGetMemoryStats.mockResolvedValueOnce({ - totalMemories: 10, - categoryCounts: { test: 10 }, - }) - - const request = new Request('http://localhost/api/memory/stats') - const response = await GET({ request, params: {} }) - - expect(response.status).toBe(200) - const data = await response.json() - expect(data).toMatchObject({ - success: true, - data: { - totalMemories: 10, - categoryCounts: { test: 10 }, - }, - message: 'Memory statistics retrieved successfully', - }) - expect(mockGetMemoryStats).toHaveBeenCalledWith({ - userId: 'test-user-id', - accountId: 'test-account-id', - workspaceId: 'test-workspace-id', - includeShared: true, - category: undefined, - scope: undefined, - retention: undefined, - }) - }) - - it('returns a 500 error when getMemoryStats fails', async () => { - mockGetMemoryStats.mockRejectedValueOnce(new Error('Gateway error')) - - const request = new Request('http://localhost/api/memory/stats') - const response = await GET({ request, params: {} }) - - expect(response.status).toBe(500) - const data = await response.json() - expect(data).toMatchObject({ - error: 'Internal Server Error', - message: 'Failed to get memory statistics', - }) - }) - }) -}) diff --git a/apps/web/src/api/memory/_shared.ts b/apps/web/src/api/memory/_shared.ts deleted file mode 100644 index 2a06af4c6f..0000000000 --- a/apps/web/src/api/memory/_shared.ts +++ /dev/null @@ -1,211 +0,0 @@ -import { randomUUID } from 'node:crypto' - -import { getCurrentUser } from '@/lib/auth' -import { createBuildSafeLogger } from '@/lib/logging/build-safe-logger' -import { - ProductMemoryGatewayError, - getProductMemoryGateway, - type ProductMemoryScope, -} from '@/lib/services/product-memory-gateway' - -export const memoryApiLogger = createBuildSafeLogger('memory-api') - -export async function requireMemoryUser(request: Request) { - return getCurrentUser(request) -} - -export function jsonResponse(payload: unknown, status = 200): Response { - return new Response(JSON.stringify(payload), { - status, - headers: { - 'Content-Type': 'application/json', - }, - }) -} - -export function successResponse( - data: unknown, - message = 'Success', - status = 200, -): Response { - return jsonResponse( - { - success: true, - data, - message, - }, - status, - ) -} - -/** - * Standardized error response format for the memory API - */ -export function errorResponse( - status: number, - error: string, - message: string, - details?: unknown, -): Response { - const response: Record = { - success: false, - error, - message, - } - - if (details) { - response['details'] = details - } - - return jsonResponse(response, status) -} - -export function jsonError( - status: number, - error: string, - message: string, -): Response { - return jsonResponse({ error, message }, status) -} - -export function parsePagination(url: URL): { - limit: number - offset: number -} { - const rawLimit = Number.parseInt(url.searchParams.get('limit') ?? '10', 10) - const rawOffset = Number.parseInt(url.searchParams.get('offset') ?? '0', 10) - - return { - limit: - Number.isFinite(rawLimit) && rawLimit > 0 ? Math.min(rawLimit, 100) : 10, - offset: Number.isFinite(rawOffset) && rawOffset >= 0 ? rawOffset : 0, - } -} - -export function getGateway() { - return getProductMemoryGateway() -} - -/** The public product API scopes memory to user+account+workspace only. - * Higher-level scope dimensions (orgId, projectId, sessionId, agentId, runId) - * are intentionally omitted — they are internal-service concerns not exposed - * to external API consumers. */ -export function toMemoryScope( - userId: string, - accountId?: string, - workspaceId?: string, -): ProductMemoryScope { - return { - userId, - accountId, - workspaceId, - includeShared: true, - } -} - -export function assertRequestedUser( - actualUserId: string, - requestedUserId: string | null | undefined, -): Response | null { - if (requestedUserId && requestedUserId !== actualUserId) { - return jsonError( - 400, - 'Bad Request', - 'userId must match the authenticated user', - ) - } - return null -} - -type MemoryRouteContext = { - request: Request - params?: Record - cookies?: unknown -} - -type AuthenticatedMemoryUser = NonNullable< - Awaited> -> - -export function withAuthenticatedMemoryRoute< - TContext extends MemoryRouteContext, ->( - action: string, - handler: ( - context: TContext, - user: AuthenticatedMemoryUser, - ) => Promise, -) { - return async (context: TContext): Promise => { - const user = await requireMemoryUser(context.request) - if (!user) { - return jsonError( - 401, - 'Unauthorized', - 'You must be authenticated to access this endpoint', - ) - } - - try { - return await handler(context, user) - } catch (error: unknown) { - return handleMemoryApiError(action, error) - } - } -} - -export function handleMemoryApiError(action: string, error: unknown): Response { - const correlationId = randomUUID() - - if (error instanceof ProductMemoryGatewayError) { - memoryApiLogger.error(`Error ${action}:`, { - correlationId, - status: error.status, - message: error instanceof Error ? error.message : 'Unknown error', - }) - if (error.status === 404) { - return jsonError(404, 'Not Found', 'Memory not found') - } - - if (error.status === 400) { - return jsonError(400, 'Bad Request', 'Invalid memory request') - } - - if (error.status === 401 || error.status === 403) { - return jsonError( - 502, - 'Bad Gateway', - `Memory service authorization failed (${correlationId})`, - ) - } - - return jsonError( - 502, - 'Bad Gateway', - `Memory service request failed (${correlationId})`, - ) - } - - if (error instanceof Error) { - memoryApiLogger.error(`Error ${action}:`, { - correlationId, - name: error.name, - message: error instanceof Error ? error.message : 'Unknown error', - }) - return jsonError( - 500, - 'Internal Server Error', - `Memory operation failed (${correlationId})`, - ) - } - - memoryApiLogger.error(`Error ${action}:`, { - correlationId, - message: 'Unknown error', - }) - return jsonError( - 500, - 'Internal Server Error', - `Unknown memory error (${correlationId})`, - ) -} diff --git a/apps/web/src/api/memory/routes/[memoryId].ts b/apps/web/src/api/memory/routes/[memoryId].ts deleted file mode 100644 index 06736df8bd..0000000000 --- a/apps/web/src/api/memory/routes/[memoryId].ts +++ /dev/null @@ -1,220 +0,0 @@ -/** - * @file Memory by ID Endpoints - * - * GET /api/memory/{memoryId} - * PATCH /api/memory/{memoryId} - * DELETE /api/memory/{memoryId} - * - * Retrieves, updates, or deletes a specific memory record by its ID. - */ - -import { z } from 'zod' - -import { - getGateway, - jsonError, - jsonResponse, - toMemoryScope, - withAuthenticatedMemoryRoute, -} from '../_shared' - -// Define the input schema for updating a memory -const UpdateMemoryRequestSchema = z - .object({ - content: z.string().min(1).max(100000).optional(), - scope: z.enum(['session', 'arc', 'trait', 'fact']).optional(), - retention: z - .enum(['ephemeral', 'short_term', 'long_term', 'permanent']) - .optional(), - category: z.string().optional(), - tags: z.array(z.string()).optional(), - importance: z.number().min(0).max(1).optional(), - emotionalContext: z - .object({ - valence: z.number().min(-1).max(1), - arousal: z.number().min(0).max(1), - dominance: z.number().min(0).max(1), - primaryEmotion: z.string(), - intensity: z.number().min(0).max(1), - }) - .optional() - .nullable(), - empathyMetrics: z - .object({ - reciprocity: z.number().min(0).max(1), - validationAccuracy: z.number().min(0).max(1), - resistanceLevel: z.number().min(0).max(1), - }) - .optional() - .nullable(), - }) - .partial() - -export type UpdateMemoryRequest = z.infer - -// Memory IDs are constrained to alphanumeric, hyphen, and underscore characters -// (per the system's ID contract). We VALIDATE rather than sanitize: silently -// stripping characters would let a malformed request (e.g. "mem-123!") resolve to a -// DIFFERENT record on GET/PATCH/DELETE. Invalid IDs are rejected with 400 instead. -const MEMORY_ID_PATTERN = /^[a-zA-Z0-9_-]+$/ - -function isValidMemoryId(id: string): boolean { - return MEMORY_ID_PATTERN.test(id) -} - -// Helper function to extract and validate the memory ID from params. -// Returns: `undefined` if missing, `null` if present but malformed, else the valid id. -function resolveMemoryId( - params: Record, -): string | null | undefined { - const memoryId = params['memoryId'] - if (!memoryId) return undefined - return isValidMemoryId(memoryId) ? memoryId : null -} - -export const GET = withAuthenticatedMemoryRoute( - 'fetching memory', - async ({ params, request }, user) => { - try { - const memoryId = resolveMemoryId(params ?? {}) - if (memoryId === undefined) { - return jsonError(400, 'Bad Request', 'memoryId parameter is required') - } - if (memoryId === null) { - return jsonError(400, 'Bad Request', 'Invalid memoryId format') - } - - const memory = await getGateway().getMemory({ - ...toMemoryScope(user.id, user.accountId, user.workspaceId), - memoryId, - }) - - if (!memory) { - return jsonError(404, 'Not Found', 'Memory not found') - } - - return jsonResponse({ - success: true, - data: { - id: memory.id, - content: memory.content, - metadata: { - scope: memory.scope, - retention: memory.retention, - category: memory.category, - tags: memory.tags, - importance: memory.importance, - emotionalContext: memory.emotionalContext, - empathyMetrics: memory.empathyMetrics, - }, - createdAt: memory.createdAt, - updatedAt: memory.updatedAt, - }, - message: 'Memory retrieved successfully', - }) - } catch { - return jsonError(500, 'Internal Server Error', 'Failed to fetch memory') - } - }, -) - -export const PATCH = withAuthenticatedMemoryRoute( - 'updating memory', - async ({ params, request }, user) => { - try { - const memoryId = resolveMemoryId(params ?? {}) - if (memoryId === undefined) { - return jsonError(400, 'Bad Request', 'memoryId parameter is required') - } - if (memoryId === null) { - return jsonError(400, 'Bad Request', 'Invalid memoryId format') - } - - // Parse and validate the request body - const body: unknown = await request.json() - const parsedBody = UpdateMemoryRequestSchema.parse(body) - - // Fetch existing memory to preserve content if not being updated - const existing = await getGateway().getMemory({ - ...toMemoryScope(user.id, user.accountId, user.workspaceId), - memoryId, - }) - - if (!existing) { - return jsonError(404, 'Not Found', 'Memory not found') - } - - // Update memory using the gateway - const result = await getGateway().updateMemory({ - ...toMemoryScope(user.id, user.accountId, user.workspaceId), - memoryId, - content: parsedBody.content ?? existing?.content ?? '', - metadata: { - scope: parsedBody.scope, - retention: parsedBody.retention, - category: parsedBody.category, - tags: parsedBody.tags, - importance: parsedBody.importance, - emotionalContext: parsedBody.emotionalContext, - empathyMetrics: parsedBody.empathyMetrics, - }, - }) - - return jsonResponse({ - success: true, - data: { - id: result.id, - content: result.content, - metadata: { - scope: result.scope, - retention: result.retention, - category: result.category, - tags: result.tags, - importance: result.importance, - emotionalContext: result.emotionalContext, - empathyMetrics: result.empathyMetrics, - }, - }, - message: 'Memory updated successfully', - }) - } catch (error) { - // Handle validation errors - if (error instanceof z.ZodError) { - return jsonError( - 400, - 'Validation Error', - 'Invalid request body format or content', - ) - } - - return jsonError(500, 'Internal Server Error', 'Failed to update memory') - } - }, -) - -export const DELETE = withAuthenticatedMemoryRoute( - 'deleting memory', - async ({ params, request }, user) => { - try { - const memoryId = resolveMemoryId(params ?? {}) - if (memoryId === undefined) { - return jsonError(400, 'Bad Request', 'memoryId parameter is required') - } - if (memoryId === null) { - return jsonError(400, 'Bad Request', 'Invalid memoryId format') - } - - await getGateway().deleteMemory({ - ...toMemoryScope(user.id, user.accountId, user.workspaceId), - memoryId, - }) - - return jsonResponse({ - success: true, - message: 'Memory deleted successfully', - }) - } catch { - return jsonError(500, 'Internal Server Error', 'Failed to delete memory') - } - }, -) diff --git a/apps/web/src/api/memory/routes/create.ts b/apps/web/src/api/memory/routes/create.ts deleted file mode 100644 index 1b74f61150..0000000000 --- a/apps/web/src/api/memory/routes/create.ts +++ /dev/null @@ -1,114 +0,0 @@ -/** - * @file Create Memory Endpoint - * - * POST /api/memory - * - * Creates a new memory record in the unified memory system. - */ - -import { z } from 'zod' - -import { - getGateway, - jsonError, - jsonResponse, - toMemoryScope, - withAuthenticatedMemoryRoute, -} from '../_shared' - -// Define the input schema with Zod validation -const CreateMemoryRequestSchema = z.object({ - content: z.string().min(1).max(100000), - scope: z.enum(['session', 'arc', 'trait', 'fact']).optional(), - retention: z - .enum(['ephemeral', 'short_term', 'long_term', 'permanent']) - .optional(), - category: z.string().optional(), - tags: z.array(z.string()).optional(), - importance: z.number().min(0).max(1).optional(), - emotionalContext: z - .object({ - valence: z.number().min(-1).max(1), - arousal: z.number().min(0).max(1), - dominance: z.number().min(0).max(1), - primaryEmotion: z.string(), - intensity: z.number().min(0).max(1), - }) - .optional(), - empathyMetrics: z - .object({ - reciprocity: z.number().min(0).max(1), - validationAccuracy: z.number().min(0).max(1), - resistanceLevel: z.number().min(0).max(1), - }) - .optional(), -}) - -export type CreateMemoryRequest = z.infer - -export const POST = withAuthenticatedMemoryRoute( - 'creating memory', - async ({ request }, user) => { - try { - // Parse and validate the request body - const body: unknown = await request.json() - const parsedBody = CreateMemoryRequestSchema.parse(body) - - // Create memory using the gateway - const result = await getGateway().createMemory({ - ...toMemoryScope(user.id, user.accountId, user.workspaceId), - content: parsedBody.content, - metadata: { - scope: parsedBody.scope, - retention: parsedBody.retention, - category: parsedBody.category, - tags: parsedBody.tags, - importance: parsedBody.importance, - emotionalContext: parsedBody.emotionalContext, - empathyMetrics: parsedBody.empathyMetrics, - }, - }) - - // Return success response with created memory - return jsonResponse( - { - success: true, - data: { - id: result.id, - content: result.content, - metadata: { - scope: result.scope, - retention: result.retention, - category: result.category, - tags: result.tags, - importance: result.importance, - emotionalContext: result.emotionalContext, - empathyMetrics: result.empathyMetrics, - }, - }, - message: 'Memory created successfully', - }, - 201, // Created - ) - } catch (error) { - // Handle validation errors - if (error instanceof z.ZodError) { - return jsonError( - 400, // Bad Request - 'Validation Error', - 'Invalid request body: ' + - error.issues - .map((e) => `${e.path.join('.')}: ${e.message}`) - .join(', '), - ) - } - - // Handle other errors - return jsonError( - 500, // Internal Server Error - 'Internal Server Error', - 'Failed to create memory', - ) - } - }, -) diff --git a/apps/web/src/api/memory/routes/index.ts b/apps/web/src/api/memory/routes/index.ts deleted file mode 100644 index 351cc0d0a1..0000000000 --- a/apps/web/src/api/memory/routes/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -/** - * @file Memory API Routes Index - * - * Canonical public memory API contract for the Pixelated Empathy therapeutic AI system. - * - * Base URL: /api/memory - * Version: v1 - * - * This file exports all memory-related API routes with standardized RESTful endpoints - * and proper HTTP status codes as defined in the Foresight project. - */ - -export { GET as list } from './list' -export { POST as create } from './create' -export { GET as getById } from './[memoryId]' -export { PATCH as updateById } from './[memoryId]' -export { DELETE as deleteById } from './[memoryId]' -export { GET as search } from './search' -export { GET as stats } from './stats' diff --git a/apps/web/src/api/memory/routes/list.ts b/apps/web/src/api/memory/routes/list.ts deleted file mode 100644 index 4ee94b793a..0000000000 --- a/apps/web/src/api/memory/routes/list.ts +++ /dev/null @@ -1,72 +0,0 @@ -/** - * @file List Memories Endpoint - * - * GET /api/memory - * - * Lists memories with optional filtering and pagination. - */ - -import { - assertRequestedUser, - getGateway, - jsonError, - jsonResponse, - parsePagination, - toMemoryScope, - withAuthenticatedMemoryRoute, -} from '../_shared' - -export const GET = withAuthenticatedMemoryRoute( - 'listing memories', - async ({ request }, user) => { - try { - const url = new URL(request.url) - const { limit, offset } = parsePagination(url) - const requestedUserId = url.searchParams.get('userId') - const category = url.searchParams.get('category') - const tags = url.searchParams.getAll('tag') - - const userError = assertRequestedUser(user.id, requestedUserId) - if (userError) { - return userError - } - - const result = await getGateway().listMemories({ - ...toMemoryScope(user.id, user.accountId, user.workspaceId), - limit, - offset, - category: category ?? undefined, - tags: tags.length > 0 ? tags : undefined, - }) - - return jsonResponse({ - success: true, - data: { - memories: result.memories.map((memory) => ({ - id: memory.id, - content: memory.content, - metadata: { - scope: memory.scope, - retention: memory.retention, - category: memory.category, - tags: memory.tags, - importance: memory.importance, - emotionalContext: memory.emotionalContext, - empathyMetrics: memory.empathyMetrics, - }, - createdAt: memory.createdAt, - updatedAt: memory.updatedAt, - })), - pagination: { - limit, - offset, - total: result.total, - }, - }, - message: 'Memories retrieved successfully', - }) - } catch { - return jsonError(500, 'Internal Server Error', 'Failed to list memories') - } - }, -) diff --git a/apps/web/src/api/memory/routes/search.ts b/apps/web/src/api/memory/routes/search.ts deleted file mode 100644 index 25ab16f1ae..0000000000 --- a/apps/web/src/api/memory/routes/search.ts +++ /dev/null @@ -1,199 +0,0 @@ -/** - * @file Search Memories Endpoint - * - * GET /api/memory/search - * POST /api/memory/search - * - * Searches memories using text-based queries with optional filtering. - */ - -import { - assertRequestedUser, - getGateway, - jsonError, - jsonResponse, - parsePagination, - toMemoryScope, - withAuthenticatedMemoryRoute, -} from '../_shared' - -export const GET = withAuthenticatedMemoryRoute( - 'searching memories', - async ({ request }, user) => { - try { - const url = new URL(request.url) - const query = url.searchParams.get('q') - const { limit, offset } = parsePagination(url) - const requestedUserId = url.searchParams.get('userId') - const category = url.searchParams.get('category') - const tags = url.searchParams.getAll('tag') - - const userError = assertRequestedUser(user.id, requestedUserId) - if (userError) { - return userError - } - - if (!query) { - return jsonError( - 400, - 'Bad Request', - 'Search query parameter (q) is required', - ) - } - - const result = await getGateway().searchMemories({ - ...toMemoryScope(user.id, user.accountId, user.workspaceId), - query, - limit, - offset, - category: category ?? undefined, - tags: tags.length > 0 ? tags : undefined, - }) - - return jsonResponse({ - success: true, - data: { - memories: result.memories.map((memory) => ({ - id: memory.id, - content: memory.content, - metadata: { - scope: memory.scope, - retention: memory.retention, - category: memory.category, - tags: memory.tags, - importance: memory.importance, - emotionalContext: memory.emotionalContext, - empathyMetrics: memory.empathyMetrics, - }, - createdAt: memory.createdAt, - updatedAt: memory.updatedAt, - })), - query, - pagination: { - limit, - offset, - total: result.total, - }, - }, - message: 'Memories searched successfully', - }) - } catch { - return jsonError( - 500, - 'Internal Server Error', - 'Failed to search memories', - ) - } - }, -) - -export const POST = withAuthenticatedMemoryRoute( - 'searching memories', - async ({ request }, user) => { - try { - const body: unknown = await request.json() - - if (typeof body !== 'object' || body === null) { - return jsonError(400, 'Bad Request', 'Invalid request body') - } - - const query = - 'query' in body && typeof body.query === 'string' - ? body.query - : 'q' in body && typeof body.q === 'string' - ? body.q - : '' - - const requestedUserId = - 'user_id' in body && typeof body.user_id === 'string' - ? body.user_id - : 'userId' in body && typeof body.userId === 'string' - ? body.userId - : null - - const limit = - 'limit' in body && - typeof body.limit === 'number' && - Number.isFinite(body.limit) && - body.limit > 0 - ? Math.min(Math.floor(body.limit), 100) - : 10 - - const offset = - 'offset' in body && - typeof body.offset === 'number' && - Number.isFinite(body.offset) && - body.offset >= 0 - ? Math.floor(body.offset) - : 0 - - const category = - 'category' in body && typeof body.category === 'string' - ? body.category - : undefined - - const rawTags: unknown = 'tags' in body ? body.tags : undefined - const tags: string[] | undefined = - Array.isArray(rawTags) && - rawTags.every((tag: unknown): tag is string => typeof tag === 'string') - ? rawTags - : undefined - - const userError = assertRequestedUser(user.id, requestedUserId) - if (userError) { - return userError - } - - if (!query) { - return jsonError( - 400, - 'Bad Request', - 'Search query parameter (query) is required', - ) - } - - const result = await getGateway().searchMemories({ - ...toMemoryScope(user.id, user.accountId, user.workspaceId), - query, - limit, - offset, - category, - tags, - }) - - return jsonResponse({ - success: true, - data: { - memories: result.memories.map((memory) => ({ - id: memory.id, - content: memory.content, - metadata: { - scope: memory.scope, - retention: memory.retention, - category: memory.category, - tags: memory.tags, - importance: memory.importance, - emotionalContext: memory.emotionalContext, - empathyMetrics: memory.empathyMetrics, - }, - createdAt: memory.createdAt, - updatedAt: memory.updatedAt, - })), - query, - pagination: { - limit, - offset, - total: result.total, - }, - }, - message: 'Memories searched successfully', - }) - } catch { - return jsonError( - 500, - 'Internal Server Error', - 'Failed to search memories', - ) - } - }, -) diff --git a/apps/web/src/api/memory/routes/stats.ts b/apps/web/src/api/memory/routes/stats.ts deleted file mode 100644 index bc91a5575e..0000000000 --- a/apps/web/src/api/memory/routes/stats.ts +++ /dev/null @@ -1,59 +0,0 @@ -/** - * @file Memory Stats Endpoint - * - * GET /api/memory/stats - * - * Retrieves statistics about memory usage and distribution. - */ - -import { - getGateway, - jsonError, - jsonResponse, - toMemoryScope, - withAuthenticatedMemoryRoute, -} from '../_shared' - -export const GET = withAuthenticatedMemoryRoute( - 'getting memory stats', - async ({ request }, user) => { - try { - const url = new URL(request.url) - const category = url.searchParams.get('category') - const scope = url.searchParams.get('scope') as - | 'session' - | 'arc' - | 'trait' - | 'fact' - | null - const retention = url.searchParams.get('retention') as - | 'ephemeral' - | 'short_term' - | 'long_term' - | 'permanent' - | null - - const stats = await getGateway().getMemoryStats({ - ...toMemoryScope(user.id, user.accountId, user.workspaceId), - category: category ?? undefined, - scope: scope ?? undefined, - retention: retention ?? undefined, - }) - - return jsonResponse({ - success: true, - data: { - totalMemories: stats.totalMemories, - categoryCounts: stats.categoryCounts, - }, - message: 'Memory statistics retrieved successfully', - }) - } catch (error) { - return jsonError( - 500, - 'Internal Server Error', - 'Failed to get memory statistics', - ) - } - }, -) diff --git a/apps/web/src/buffer-polyfill.js b/apps/web/src/buffer-polyfill.js deleted file mode 100644 index e6ff892aca..0000000000 --- a/apps/web/src/buffer-polyfill.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Buffer Polyfill - Browser-compatible implementation - * This approach uses buffer package as recommended by Vite solutions - */ - -import { Buffer as BufferFromPackage } from 'buffer' - -// Try to import from buffer package safely -const BufferPolyfill = BufferFromPackage - -// Safely expose Buffer to global scope only if not already defined -if ( - typeof globalThis !== 'undefined' && - typeof globalThis.Buffer === 'undefined' -) { - globalThis.Buffer = BufferPolyfill -} - -// Export Buffer for direct imports -export { BufferPolyfill as Buffer } - -// Export default for ESM compatibility -export default BufferPolyfill diff --git a/apps/web/src/components/BlogSearch.tsx b/apps/web/src/components/BlogSearch.tsx deleted file mode 100644 index 8c88ad2a13..0000000000 --- a/apps/web/src/components/BlogSearch.tsx +++ /dev/null @@ -1,140 +0,0 @@ -import { Search, Loader2 } from 'lucide-react' -import { useState, SyntheticEvent } from 'react' - -import { cn } from '../lib/utils.js' -import { Button } from './ui/button/index.js' -import { Input } from './ui/input.js' - -interface SearchResult { - id: string - title: string - description: string - slug: string -} - -interface SearchResponse { - results: SearchResult[] -} - -const isRecord = (value: unknown): value is Record => { - return value !== null && typeof value === 'object' && !Array.isArray(value) -} - -const isSearchResult = (value: unknown): value is SearchResult => { - if (!isRecord(value)) { - return false - } - - return ( - typeof value['id'] === 'string' && - typeof value['title'] === 'string' && - typeof value['description'] === 'string' && - typeof value['slug'] === 'string' - ) -} - -const isSearchResponse = (value: unknown): value is SearchResponse => { - if (!isRecord(value)) { - return false - } - - return ( - Array.isArray(value['results']) && value['results'].every(isSearchResult) - ) -} - -export function BlogSearch() { - const [query, setQuery] = useState('') - const [results, setResults] = useState([]) - const [isSearching, setIsSearching] = useState(false) - - async function handleSearch( - e: SyntheticEvent, - ): Promise { - e.preventDefault() - if (!query.trim()) { - return - } - - setIsSearching(true) - try { - const response = await fetch(`/api/search?q=${encodeURIComponent(query)}`) - const data: unknown = await response.json() - if (isSearchResponse(data)) { - setResults(data.results) - } else { - setResults([]) - } - } catch (error: unknown) { - console.error('Search failed:', error) - } finally { - setIsSearching(false) - } - } - - return ( -
-
- setQuery(e.target.value)} - className="w-full pl-10" - aria-label="Search blog posts" - /> - -
- ) -} diff --git a/apps/web/src/components/Hamburger.astro b/apps/web/src/components/Hamburger.astro deleted file mode 100644 index e802438a0c..0000000000 --- a/apps/web/src/components/Hamburger.astro +++ /dev/null @@ -1,42 +0,0 @@ ---- -// Simple hamburger menu button component for mobile navigation ---- - - - - diff --git a/apps/web/src/components/Monitoring.astro b/apps/web/src/components/Monitoring.astro deleted file mode 100644 index 10e9abaeb7..0000000000 --- a/apps/web/src/components/Monitoring.astro +++ /dev/null @@ -1,28 +0,0 @@ ---- -import { getMonitoringConfig } from '../lib/monitoring/config' - -const config = getMonitoringConfig() ---- - - - -{/* Add Grafana Faro Web SDK if RUM is enabled */} -{config.grafana.enableRUM && ( - -)} diff --git a/apps/web/src/components/Navbar.astro b/apps/web/src/components/Navbar.astro deleted file mode 100644 index 602c309ec9..0000000000 --- a/apps/web/src/components/Navbar.astro +++ /dev/null @@ -1,346 +0,0 @@ ---- -// Enhanced Navbar component with active state indicators and improved accessibility -import ThemeSwitcher from './ThemeSwitcher.astro' - -const currentPath = Astro.url.pathname - -// Define navigation items -const navItems = [ - { href: '/training', label: 'Training' }, - { href: '/features', label: 'Features' }, - { href: '/trust', label: 'Trust' }, - { href: '/about', label: 'About' }, - { href: '/demo-hub', label: 'Demos' }, -] - -function isActive(href: string) { - return href === '/' - ? currentPath === '/' - : currentPath === href || currentPath.startsWith(`${href}/`) -} ---- - - - - - - - - diff --git a/apps/web/src/components/TodoAlpine.astro b/apps/web/src/components/TodoAlpine.astro deleted file mode 100644 index caea27d57b..0000000000 --- a/apps/web/src/components/TodoAlpine.astro +++ /dev/null @@ -1,190 +0,0 @@ ---- -interface Props { - title?: string - initialTodos?: TodoItem[] -} - -interface TodoItem { - id: string - text: string - completed: boolean -} - -const { title = 'Todo List', initialTodos = [] } = Astro.props - -// Initial todos for Alpine.js -const initialTodosJson = JSON.stringify(initialTodos || []) ---- - -
{ - localStorage.setItem('todos', JSON.stringify(val)); - }); - }, - - addTodo() { - if (!this.newTodo.trim()) return; - - this.todos.push({ - id: Date.now().toString(36) + Math.random().toString(36).slice(2), - text: this.newTodo.trim(), - completed: false - }); - - this.newTodo = ''; - }, - - toggleComplete(id) { - const todo = this.todos.find(t => t.id === id); - if (todo) todo.completed = !todo.completed; - }, - - deleteTodo(id) { - this.todos = this.todos.filter(t => t.id !== id); - } - }` -> -

{title}

- -
- - -
- -
    - -
-
- - diff --git a/apps/web/src/components/TodoComponent.astro b/apps/web/src/components/TodoComponent.astro deleted file mode 100644 index ae89b2a310..0000000000 --- a/apps/web/src/components/TodoComponent.astro +++ /dev/null @@ -1,29 +0,0 @@ ---- -import { Todo } from './TodoReact' - -interface Props { - title?: string - initialTodos?: Array<{ - id: string - text: string - completed: boolean - }> -} - -const { title = 'Todo List', initialTodos = [] } = Astro.props ---- - -
- -
- - diff --git a/apps/web/src/components/TodoIsland.astro b/apps/web/src/components/TodoIsland.astro deleted file mode 100644 index 1ae08e96d9..0000000000 --- a/apps/web/src/components/TodoIsland.astro +++ /dev/null @@ -1,29 +0,0 @@ ---- -import { Todo } from './TodoReact' - -interface Props { - title?: string - initialTodos?: TodoItem[] -} - -interface TodoItem { - id: string - text: string - completed: boolean -} - -const { title = 'Todo List', initialTodos = [] } = Astro.props ---- - -
- -
- - diff --git a/apps/web/src/components/TodoPreactIsland.astro b/apps/web/src/components/TodoPreactIsland.astro deleted file mode 100644 index 73c97615df..0000000000 --- a/apps/web/src/components/TodoPreactIsland.astro +++ /dev/null @@ -1,29 +0,0 @@ ---- -import { Todo } from './TodoReact' - -interface Props { - title?: string - initialTodos?: TodoItem[] -} - -interface TodoItem { - id: string - text: string - completed: boolean -} - -const { title = 'Todo List', initialTodos = [] } = Astro.props ---- - -
- -
- - diff --git a/apps/web/src/components/TodoReact.tsx b/apps/web/src/components/TodoReact.tsx deleted file mode 100644 index 3bd091f08c..0000000000 --- a/apps/web/src/components/TodoReact.tsx +++ /dev/null @@ -1,258 +0,0 @@ -import { useState, useEffect } from 'react' - -interface TodoItem { - id: string - text: string - completed: boolean -} - -interface TodoProps { - title?: string - initialTodos?: TodoItem[] -} - -const isTodoItem = (value: unknown): value is TodoItem => { - if (!value || typeof value !== 'object') { - return false - } - - const todo = value as { - id?: unknown - text?: unknown - completed?: unknown - } - return ( - typeof todo.id === 'string' && - typeof todo.text === 'string' && - typeof todo.completed === 'boolean' - ) -} - -const parseTodoItems = (value: unknown): TodoItem[] | null => { - if (!Array.isArray(value)) { - return null - } - - return value.filter(isTodoItem) -} - -const loadTodos = (initialTodos: TodoItem[]): TodoItem[] => { - try { - const savedTodos = localStorage.getItem('todos') - if (!savedTodos) { - return initialTodos - } - - const parsedTodos: unknown = JSON.parse(savedTodos) - return parseTodoItems(parsedTodos) ?? initialTodos - } catch (err: unknown) { - console.error('Error loading todos:', err) - return initialTodos - } -} - -export function Todo({ title = 'Todo List', initialTodos = [] }: TodoProps) { - const [todos, setTodos] = useState(() => loadTodos(initialTodos)) - const [inputValue, setInputValue] = useState('') - - useEffect(() => { - try { - localStorage.setItem('todos', JSON.stringify(todos)) - } catch (err: unknown) { - console.error('Error saving todos:', err) - } - }, [todos]) - - const addTodo = () => { - const text = inputValue.trim() - if (!text) { - return - } - - const newTodo = { - id: generateTodoId(), - text, - completed: false, - } - - setTodos((prevTodos) => [...prevTodos, newTodo]) - setInputValue('') - } - - const toggleTodoComplete = (id: string) => { - setTodos((prevTodos) => - prevTodos.map((todo) => - todo.id === id ? { ...todo, completed: !todo.completed } : todo, - ), - ) - } - - const deleteTodo = (id: string) => { - setTodos((prevTodos) => prevTodos.filter((todo) => todo.id !== id)) - } - - const handleInputChange = (e: React.ChangeEvent) => { - setInputValue(e.target.value) - } - - const handleKeyPress = (e: React.KeyboardEvent) => { - if (e.key === 'Enter') { - addTodo() - } - } - - return ( -
-
-

{title}

-
- -
- - - -
- -
    - {todos.map((todo) => ( -
  • - {todo.text} -
    - - -
    -
  • - ))} -
- - -
- ) -} - -export const generateTodoId = () => { - return Date.now().toString(36) + Math.random().toString(36).substring(2) -} diff --git a/apps/web/src/components/analytics/PatternVisualization.tsx b/apps/web/src/components/analytics/PatternVisualization.tsx deleted file mode 100644 index b07f76dd5c..0000000000 --- a/apps/web/src/components/analytics/PatternVisualization.tsx +++ /dev/null @@ -1,5 +0,0 @@ -// This file is maintained for backward compatibility. -// Please use PatternVisualization.astro or PatternVisualizationReact.tsx directly for new code. - -export { PatternVisualization } from './PatternVisualizationReact' -export type { PatternVisualizationProps } from './PatternVisualizationReact' diff --git a/apps/web/src/components/auth/AuthButtons.tsx b/apps/web/src/components/auth/AuthButtons.tsx deleted file mode 100644 index 03a1e859a0..0000000000 --- a/apps/web/src/components/auth/AuthButtons.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import { authClient } from '@/lib/auth-client' -// Remove AuthProvider wrapper dependency if possible, but keep structure for now if needed - -const AuthButtonsInner = () => { - const { data: session, isPending } = authClient.useSession() - - // Derived state - const user = session?.user - const isAuthenticated = !!user - - if (isPending) { - return ( -
- Loading... -
- ) - } - - if (isAuthenticated) { - return ( -
-
- {user?.avatarUrl ? ( - {user.fullName - ) : null} - {user?.fullName ?? user?.email} -
- - - Dashboard - -
- ) - } - - return ( - - ) -} - -export const AuthButtons = () => { - return -} diff --git a/apps/web/src/components/auth/AuthCard.astro b/apps/web/src/components/auth/AuthCard.astro deleted file mode 100644 index 125bd4e36d..0000000000 --- a/apps/web/src/components/auth/AuthCard.astro +++ /dev/null @@ -1,33 +0,0 @@ ---- -interface Props { - class?: string -} - -const { class: className = '' } = Astro.props ---- - -
-
- -
-
- - diff --git a/apps/web/src/components/auth/Login.tsx b/apps/web/src/components/auth/Login.tsx deleted file mode 100644 index 26369cb9ab..0000000000 --- a/apps/web/src/components/auth/Login.tsx +++ /dev/null @@ -1,147 +0,0 @@ -import { - createElement as h, - useState, - ChangeEvent, - SyntheticEvent, - ReactNode, -} from 'react' - -import { LoginSchema } from '@/lib/validation/loginSchema' - -export default function LoginForm() { - const [isLoading, setIsLoading] = useState(false) - const [error, setError] = useState(null) - const [user, setUser] = useState({ - email: '', - password: '', - }) - - const schema = LoginSchema - - const handleChange = (e: ChangeEvent) => { - const { name, value } = e.target - setUser((prev) => ({ ...prev, [name]: value })) - } - - const handleSubmit = async (e: SyntheticEvent) => { - e.preventDefault() - setIsLoading(true) - setError(null) - - const result = schema.safeParse(user) - if (!result.success) { - setError(result.error.issues?.[0]?.message ?? 'Validation failed') - setIsLoading(false) - return - } - - try { - const response = await fetch('/api/auth/signin', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify(result.data), - }) - - const data = (await response.json()) as { error?: string } - - if (!response.ok) { - setError(data.error ?? 'Sign in failed') - setIsLoading(false) - return - } - - // On success, redirect to dashboard or home - window.location.assign('/dashboard') - } catch (error) { - setError('Network error. Please try again.') - setIsLoading(false) - } - } - - const fields: Array<'email' | 'password'> = ['email', 'password'] - - const fieldInputs: ReactNode[] = fields.map((field) => { - const isEmail = field === 'email' - return h( - 'div', - { key: field, className: 'mb-4' }, - h( - 'label', - { - className: 'block text-sm font-medium text-foreground', - htmlFor: field, - }, - isEmail ? 'Email Address' : 'Password', - ), - h('input', { - type: isEmail ? 'email' : 'password', - name: field, - value: user[field], - onChange: handleChange, - autoComplete: isEmail ? 'email' : 'current-password', - className: - 'mt-1 border-input bg-background w-full rounded-none border focus:border-ring focus:ring-ring sm:ring-offset-0', - required: true, - }), - !isEmail && - h( - 'p', - { className: 'text-xs text-muted-foreground indent-2 mt-1' }, - 'Must be at least 6 characters', - ), - ) - }) - - return h( - 'div', - { - className: - 'auth-container max-w-md w-full p-6 bg-card border border-border rounded-none', - }, - h('h2', { className: 'text-2xl font-bold mb-6 text-center' }, 'Sign In'), - h( - 'form', - { className: 'space-y-4', onSubmit: handleSubmit }, - ...fieldInputs, - error && - h( - 'div', - { - className: - 'mb-4 p-3 bg-secondary border border-ring text-foreground rounded-none', - role: 'alert', - }, - error, - ), - h( - 'button', - { - type: 'submit', - disabled: isLoading, - className: - 'w-full bg-primary text-primary-foreground py-2 px-4 rounded-none hover:bg-accent focus:outline-none focus:ring-2 focus:ring-ring disabled:opacity-35 transition-colors', - }, - isLoading ? 'Signing in...' : 'Sign In', - ), - ), - h( - 'div', - { className: 'mt-6 text-center' }, - h( - 'span', - { className: 'text-sm text-muted-foreground' }, - "Don't have an account?", - ), - h( - 'a', - { - href: '/register', - className: 'text-sm text-foreground hover:underline', - }, - 'Sign up', - ), - ), - ) -} diff --git a/apps/web/src/components/auth/Register.tsx b/apps/web/src/components/auth/Register.tsx deleted file mode 100644 index dab171825e..0000000000 --- a/apps/web/src/components/auth/Register.tsx +++ /dev/null @@ -1,227 +0,0 @@ -import React, { useState, SyntheticEvent } from 'react' -export default function RegisterForm() { - const [isLoading, setIsLoading] = useState(false) - const [error, setError] = useState(null) - const [user, setUser] = useState({ - email: '', - password: '', - fullName: '', - termsAccepted: false, - }) - - // Simple validation without external schema - const validateForm = () => { - if (!user.email || !user.email.includes('@')) { - return 'Please enter a valid email address' - } - if (!user.password || user.password.length < 6) { - return 'Password must be at least 6 characters' - } - if (!user.fullName || user.fullName.trim().length === 0) { - return 'Please enter your full name' - } - if (!user.termsAccepted) { - return 'You must accept the Terms of Service' - } - return null - } - - const handleChange = (e: React.ChangeEvent) => { - const { name, value, type, checked } = e.target - setUser((prev) => ({ - ...prev, - [name]: type === 'checkbox' ? checked : value, - })) - } - - const handleSubmit = async (e: SyntheticEvent) => { - e.preventDefault() - setIsLoading(true) - setError(null) - - const validationError = validateForm() - if (validationError) { - setError(validationError) - setIsLoading(false) - return - } - - try { - const response = await fetch('/api/auth/register', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify(user), - }) - - const data = (await response.json()) as { error?: string } - - if (!response.ok) { - setError(data.error ?? 'Registration failed') - setIsLoading(false) - return - } - - // On success, redirect to login or dashboard - window.location.assign('/login') - } catch { - setError('Network error. Please try again.') - setIsLoading(false) - } - } - - return ( -
-

Create Account

- - {error && ( -
- {error} -
- )} - -
- {['fullName', 'email', 'password', 'termsAccepted'].map((field) => ( -
- {(() => { - switch (field) { - case 'fullName': - return ( - <> - - - - ) - case 'email': - return ( - <> - - -

- Must be a valid email address -

- - ) - case 'password': - return ( - <> - - -

- Must be at least 6 characters -

- - ) - case 'termsAccepted': - return ( - <> -
- - -
-

- You must accept the Terms of Service -

- - ) - default: - return null - } - })()} -
- ))} - - {error && ( -
- {error} -
- )} - - -
- -
- - Already have an account? - - - Sign in - -
-
- ) -} diff --git a/apps/web/src/components/auth/RequireRole.tsx b/apps/web/src/components/auth/RequireRole.tsx deleted file mode 100644 index d283749141..0000000000 --- a/apps/web/src/components/auth/RequireRole.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import type { AuthRole } from '@/config/auth.config' -import { useSession } from '@/lib/auth-client' -import type { UserRole } from '@/types/auth' - -interface RequireRoleProps { - children: React.ReactNode - role: AuthRole | AuthRole[] | UserRole | UserRole[] - fallback?: React.ReactNode -} - -/** - * RequireRole component - Checks if current user has required role - * - * Usage: - * ```tsx - * - * - * - * ``` - */ -export function RequireRole({ - children, - role, - fallback = null, -}: RequireRoleProps) { - const { data: session } = useSession() - - // If no session, show fallback - if (!session?.user) { - return <>{fallback} - } - - // Convert role to array for easier checking - const requiredRoles = Array.isArray(role) ? role : [role] - const userRole = session.user.role - - // Check if user has any of the required roles - const hasRequiredRole = requiredRoles.some( - (requiredRole) => - userRole === requiredRole || - userRole?.toLowerCase() === requiredRole.toLowerCase(), - ) - - if (!hasRequiredRole) { - return <>{fallback} - } - - return <>{children} -} diff --git a/apps/web/src/components/blog/ArticleCard.astro b/apps/web/src/components/blog/ArticleCard.astro deleted file mode 100644 index be96b21895..0000000000 --- a/apps/web/src/components/blog/ArticleCard.astro +++ /dev/null @@ -1,51 +0,0 @@ ---- -// Simple ArticleCard component -// Used to display a card for a blog pos -export interface Props { - title: string - description: string - author?: string - date?: string - readingTime?: string - tags?: string | string[] -} - -const { - title, - description, - author, - date, - readingTime, - tags: tagInput, -} = Astro.props - -const tags = Array.isArray(tagInput) - ? tagInput - : typeof tagInput === 'string' - ? tagInput - .split(',') - .map((tag) => tag.trim()) - .filter((tag) => tag.length > 0) - : [] ---- - -
-

{title}

-

{description}

- -
- {author && {author}} - {date && {date}} - {readingTime && {readingTime}} -
- - {tags && tags.length > 0 && ( -
- {tags.map((tag: string) => ( - - {tag} - - ))} -
- )} -
diff --git a/apps/web/src/components/blog/ArticleHeader.astro b/apps/web/src/components/blog/ArticleHeader.astro deleted file mode 100644 index 61d85c5d2e..0000000000 --- a/apps/web/src/components/blog/ArticleHeader.astro +++ /dev/null @@ -1,43 +0,0 @@ ---- -import { formatDate } from '@/utils/date' - -interface Props { - title: string - author: string - date: string - readingTime?: string - tags?: string[] -} - -const { title, author, date, readingTime, tags = [] } = Astro.props -const formattedDate = formatDate(date) ---- - -
-

{title}

- -
- {formattedDate} - {readingTime && ( - - • - {readingTime} - - )} - • - {author} -
- - {tags.length > 0 && ( -
- {tags.map((tag: string) => ( - - #{tag} - - ))} -
- )} -
diff --git a/apps/web/src/components/blog/AuthorBio.astro b/apps/web/src/components/blog/AuthorBio.astro deleted file mode 100644 index 88ac3251b4..0000000000 --- a/apps/web/src/components/blog/AuthorBio.astro +++ /dev/null @@ -1,46 +0,0 @@ ---- -export interface Props { - name: string - image?: string - credentials?: string - specialties?: string[] - bio?: string -} - -const { - name, - image = '', - credentials = '', - specialties = [], - bio = '', -} = Astro.props ---- - -
-
- {image && ( - {name} - )} -
-

{name}

- {credentials && ( -

{credentials}

- )} - - {specialties.length > 0 && ( -
-

Specialties:

-
- {specialties.map((specialty: string) => ( - - {specialty} - - ))} -
-
- )} - - {bio &&

{bio}

} -
-
-
diff --git a/apps/web/src/components/blog/Divider.astro b/apps/web/src/components/blog/Divider.astro deleted file mode 100644 index 8614c08749..0000000000 --- a/apps/web/src/components/blog/Divider.astro +++ /dev/null @@ -1,9 +0,0 @@ ---- -export interface Props { - className?: string -} - -const { className = '' } = Astro.props ---- - -
diff --git a/apps/web/src/components/blog/Pagination.astro b/apps/web/src/components/blog/Pagination.astro deleted file mode 100644 index 3a46cef6bc..0000000000 --- a/apps/web/src/components/blog/Pagination.astro +++ /dev/null @@ -1,40 +0,0 @@ ---- -import { Button } from '@/components/ui/button/index.ts' - -interface Props { - currentPage: number - totalPages: number - url: { - prev?: string - next?: string - } -} - -const { currentPage, totalPages, url } = Astro.props ---- - - diff --git a/apps/web/src/components/blog/SeriesNavigation.astro b/apps/web/src/components/blog/SeriesNavigation.astro deleted file mode 100644 index b98a0abec8..0000000000 --- a/apps/web/src/components/blog/SeriesNavigation.astro +++ /dev/null @@ -1,45 +0,0 @@ ---- -export interface Props { - series: string - current: string - next?: { - title: string - url: string - } - previous?: { - title: string - url: string - } -} - -const { series, current, next, previous } = Astro.props ---- - -
-
-

{series} Series

-

Currently reading: {current}

-
- -
- {previous && ( - -
Previous
-
{previous.title}
-
- )} - - {next && ( - -
Next
-
{next.title}
-
- )} -
-
diff --git a/apps/web/src/components/blog/SocialShare.astro b/apps/web/src/components/blog/SocialShare.astro deleted file mode 100644 index dc70e11d44..0000000000 --- a/apps/web/src/components/blog/SocialShare.astro +++ /dev/null @@ -1,59 +0,0 @@ ---- -export interface Props { - platforms?: string[] - title?: string - description?: string - url?: string -} - -const { - platforms = ['twitter', 'linkedin', 'facebook', 'email'], - title = 'Check this out!', - description = '', - url = '', -} = Astro.props ---- - -
- {platforms.includes('twitter') && ( - - Twitter - - )} - - {platforms.includes('linkedin') && ( - - LinkedIn - - )} - - {platforms.includes('facebook') && ( - - Facebook - - )} - - {platforms.includes('email') && ( - - Email - - )} -
diff --git a/apps/web/src/components/blog/Subscribe.astro b/apps/web/src/components/blog/Subscribe.astro deleted file mode 100644 index e62775754e..0000000000 --- a/apps/web/src/components/blog/Subscribe.astro +++ /dev/null @@ -1,29 +0,0 @@ ---- -export interface Props { - showTitle?: boolean -} - -const { showTitle = true } = Astro.props ---- - -
- {showTitle &&

Subscribe to Updates

} -

Get notified when we publish new articles and resources.

-
- -
- -
-

- We respect your privacy. Unsubscribe at any time. -

diff --git a/apps/web/src/components/blog/TableOfContents.astro b/apps/web/src/components/blog/TableOfContents.astro deleted file mode 100644 index 412de5f6fa..0000000000 --- a/apps/web/src/components/blog/TableOfContents.astro +++ /dev/null @@ -1,104 +0,0 @@ ---- -// This component will be rendered client-side to generate a table of contents -// from the headings in the blog pos -// export interface Props {} ---- - -
-

Table of Contents

-
    - -
-
- - - - diff --git a/apps/web/src/lib/sentry/source-map.test.mjs b/apps/web/src/lib/sentry/source-map.test.mjs index 5d53230bb8..5d502469b7 100644 --- a/apps/web/src/lib/sentry/source-map.test.mjs +++ b/apps/web/src/lib/sentry/source-map.test.mjs @@ -19,9 +19,9 @@ describe('Sentry sourcemap source rewriting', () => { }) it('preserves normal relative source paths', () => { - expect(rewriteSentrySource('apps/web/src/components/Navbar.astro')).toBe( - 'apps/web/src/components/Navbar.astro', - ) + expect( + rewriteSentrySource('apps/web/src/components/mizu/Navbar.astro'), + ).toBe('apps/web/src/components/mizu/Navbar.astro') }) it('normalizes protocol-prefixed sourcemap sources', () => { diff --git a/scripts/ci/tech-debt-baseline.json b/scripts/ci/tech-debt-baseline.json index 1265d5a7d9..442333cf40 100644 --- a/scripts/ci/tech-debt-baseline.json +++ b/scripts/ci/tech-debt-baseline.json @@ -3,95 +3,15 @@ "description": "Keys of pre-existing untracked TODO/FIXME/HACK/XXX markers. The audit fails when a new untracked marker appears. Fix by adding a ticket reference, e.g. `TODO(PIX-123): ...`, or re-pin with `pnpm lint:tech-debt -- --update` if the marker is intentional.", "generatedAt": "2026-09-24T21:19:53.939Z", "counts": { - "TODO": 157, - "XXX": 7 + "TODO": 75, + "XXX": 7, + "HACK": 0, + "FIXME": 0 }, - "total": 164, + "total": 82, "markers": [ "agents/session-agent/agent/tools/process_message.ts:46:TODO", "agents/session-agent/tests/process_message.test.ts:42:TODO", - "apps/web/src/components/TodoAlpine.astro:13:TODO", - "apps/web/src/components/TodoAlpine.astro:20:TODO", - "apps/web/src/components/TodoAlpine.astro:44:TODO", - "apps/web/src/components/TodoAlpine.astro:45:TODO", - "apps/web/src/components/TodoAlpine.astro:55:TODO", - "apps/web/src/components/TodoAlpine.astro:59:TODO", - "apps/web/src/components/TodoAlpine.astro:63:TODO", - "apps/web/src/components/TodoAlpine.astro:66:TODO", - "apps/web/src/components/TodoAlpine.astro:67:TODO", - "apps/web/src/components/TodoAlpine.astro:69:TODO", - "apps/web/src/components/TodoAlpine.astro:70:TODO", - "apps/web/src/components/TodoAlpine.astro:71:TODO", - "apps/web/src/components/TodoAlpine.astro:73:TODO", - "apps/web/src/components/TodoAlpine.astro:74:TODO", - "apps/web/src/components/TodoAlpine.astro:76:TODO", - "apps/web/src/components/TodoAlpine.astro:77:TODO", - "apps/web/src/components/TodoAlpine.astro:78:TODO", - "apps/web/src/components/TodoAlpine.astro:79:TODO", - "apps/web/src/components/TodoAlpine.astro:89:TODO", - "apps/web/src/components/TodoAlpine.astro:105:TODO", - "apps/web/src/components/TodoAlpine.astro:110:TODO", - "apps/web/src/components/TodoAlpine.astro:119:TODO", - "apps/web/src/components/TodoAlpine.astro:128:TODO", - "apps/web/src/components/TodoAlpine.astro:136:TODO", - "apps/web/src/components/TodoAlpine.astro:142:TODO", - "apps/web/src/components/TodoAlpine.astro:151:TODO", - "apps/web/src/components/TodoAlpine.astro:155:TODO", - "apps/web/src/components/TodoAlpine.astro:160:TODO", - "apps/web/src/components/TodoAlpine.astro:165:TODO", - "apps/web/src/components/TodoComponent.astro:2:TODO", - "apps/web/src/components/TodoComponent.astro:13:TODO", - "apps/web/src/components/TodoComponent.astro:16:TODO", - "apps/web/src/components/TodoComponent.astro:17:TODO", - "apps/web/src/components/TodoComponent.astro:21:TODO", - "apps/web/src/components/TodoIsland.astro:2:TODO", - "apps/web/src/components/TodoIsland.astro:15:TODO", - "apps/web/src/components/TodoIsland.astro:18:TODO", - "apps/web/src/components/TodoIsland.astro:19:TODO", - "apps/web/src/components/TodoIsland.astro:23:TODO", - "apps/web/src/components/TodoPreactIsland.astro:2:TODO", - "apps/web/src/components/TodoPreactIsland.astro:15:TODO", - "apps/web/src/components/TodoPreactIsland.astro:18:TODO", - "apps/web/src/components/TodoPreactIsland.astro:19:TODO", - "apps/web/src/components/TodoPreactIsland.astro:23:TODO", - "apps/web/src/components/TodoReact.tsx:19:TODO", - "apps/web/src/components/TodoReact.tsx:25:TODO", - "apps/web/src/components/TodoReact.tsx:26:TODO", - "apps/web/src/components/TodoReact.tsx:27:TODO", - "apps/web/src/components/TodoReact.tsx:54:TODO", - "apps/web/src/components/TodoReact.tsx:84:TODO", - "apps/web/src/components/TodoReact.tsx:85:TODO", - "apps/web/src/components/TodoReact.tsx:91:TODO", - "apps/web/src/components/TodoReact.tsx:105:TODO", - "apps/web/src/components/TodoReact.tsx:106:TODO", - "apps/web/src/components/TodoReact.tsx:110:TODO", - "apps/web/src/components/TodoReact.tsx:113:TODO", - "apps/web/src/components/TodoReact.tsx:120:TODO", - "apps/web/src/components/TodoReact.tsx:125:TODO", - "apps/web/src/components/TodoReact.tsx:126:TODO", - "apps/web/src/components/TodoReact.tsx:128:TODO", - "apps/web/src/components/TodoReact.tsx:129:TODO", - "apps/web/src/components/TodoReact.tsx:130:TODO", - "apps/web/src/components/TodoReact.tsx:132:TODO", - "apps/web/src/components/TodoReact.tsx:133:TODO", - "apps/web/src/components/TodoReact.tsx:135:TODO", - "apps/web/src/components/TodoReact.tsx:136:TODO", - "apps/web/src/components/TodoReact.tsx:138:TODO", - "apps/web/src/components/TodoReact.tsx:141:TODO", - "apps/web/src/components/TodoReact.tsx:142:TODO", - "apps/web/src/components/TodoReact.tsx:152:TODO", - "apps/web/src/components/TodoReact.tsx:160:TODO", - "apps/web/src/components/TodoReact.tsx:165:TODO", - "apps/web/src/components/TodoReact.tsx:171:TODO", - "apps/web/src/components/TodoReact.tsx:177:TODO", - "apps/web/src/components/TodoReact.tsx:185:TODO", - "apps/web/src/components/TodoReact.tsx:196:TODO", - "apps/web/src/components/TodoReact.tsx:200:TODO", - "apps/web/src/components/TodoReact.tsx:206:TODO", - "apps/web/src/components/TodoReact.tsx:215:TODO", - "apps/web/src/components/TodoReact.tsx:219:TODO", - "apps/web/src/components/TodoReact.tsx:224:TODO", - "apps/web/src/components/TodoReact.tsx:229:TODO", "apps/web/src/lib/ai/services/__tests__/PatientResponseService.test.ts:314:TODO", "apps/web/src/lib/ai/services/__tests__/PatientResponseService.test.ts:315:TODO", "apps/web/src/lib/audit.ts:592:TODO", diff --git a/vitest.config.ts b/vitest.config.ts index e0b7e3b0dd..ebab4ca56c 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -20,7 +20,6 @@ const baseNodeTestGlobs = [ 'apps/web/src/pages/api/**/__tests__/**/*.test.ts', 'apps/web/src/api/routes/__tests__/**/*.test.ts', 'apps/web/src/api/middleware/__tests__/**/*.test.ts', - 'apps/web/src/api/memory/__tests__/**/*.test.ts', 'apps/web/src/lib/auth/**/*.test.ts', 'apps/web/src/lib/shared/**/*.test.ts', 'apps/web/src/lib/services/product-memory-gateway.test.ts',