test(e2e): add playwright e2e stand with test pocketbase and axe checks

- playwright.config.ts: test PocketBase (port 8190) and ng serve (port 4300)
  as webServers, SIGTERM shutdown so the stand removes its temp dir
- fixtures: user via open registration, api SDK client, signedInPage with pb_auth cookie
- expectNoA11yViolations runs all axe rules (WCAG and best-practice)
- render home route on the server; main and h1 placeholder in app shell
- config tests for playwright.config.ts in test:lint; docs updated

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
kamask
2026-10-31 22:12:04 +03:00
co-authored by Claude Opus 5.5
parent bf72af9ef4
commit 82e097f876
15 changed files with 426 additions and 23 deletions
+48
View File
@@ -54,9 +54,15 @@ importers:
'@angular/compiler-cli':
specifier: ^22.2.0
version: 22.2.3(@angular/compiler@22.2.3)(typescript@6.0.3)
'@axe-core/playwright':
specifier: ^4.14.0
version: 4.14.0(playwright-core@1.64.1)
'@eslint/js':
specifier: ^10.0.1
version: 10.0.1(eslint@10.13.0(supports-color@8.1.1))
'@playwright/test':
specifier: ^1.64.1
version: 1.64.1
'@types/express':
specifier: ^5.0.1
version: 5.0.6
@@ -300,6 +306,12 @@ packages:
resolution: {integrity: sha512-A6f1nKy99I6tyoK82U6kBHvQQZmdHmTmPzJYPY/0eaOW0r8/qPmEOwjGHs+hL/vCgOwQTupu4LT1XtXNUuDruA==}
engines: {node: ^22.22.2 || ^24.15.0 || >=26.0.0}
'@axe-core/playwright@4.14.0':
resolution: {integrity: sha512-SGUhG5PIHd2eMdpgBF2PyQLOhX+qyDR2PT4cmoS4Qk2ak+jX/rrSvst9l0PGv5WTHolKpUMvVmoHpr4cZgf1RQ==}
engines: {node: '>=22.12.0'}
peerDependencies:
playwright-core: '>= 1.0.0'
'@babel/code-frame@8.0.6':
resolution: {integrity: sha512-uMHhvmDmwFiLuiozaoRYTZHqMFuu3fem/X9JY78lohAuLoh8LSGGC8JqUzo2cVuBsBxkjMZNk56CE7ock8Xxkw==}
engines: {node: ^22.18.0 || >=24.11.0}
@@ -1217,6 +1229,11 @@ packages:
resolution: {integrity: sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==}
engines: {node: '>= 10.0.0'}
'@playwright/test@1.64.1':
resolution: {integrity: sha512-IaYGml/nSOiZWROfPtuIL7neuu9qDOZ3TNvNljUIrhDMxiGTgPjzj/g9p9RxpS2tSepPDRY+UwAaEeiKtUvIAg==}
engines: {node: '>=20'}
hasBin: true
'@rolldown/binding-android-arm-eabi@1.2.8':
resolution: {integrity: sha512-tN5aztYkKCte4i5SIrrz5yK/HMjEuCqCSCJa418jOV8tZ1cBY3YF2otxB1ktPxzsLA1BeTqwapK0bfjxNvHJVw==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -1507,6 +1524,10 @@ packages:
resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
engines: {node: '>=12'}
axe-core@4.14.0:
resolution: {integrity: sha512-9WTZxEjsZ7b13TH8JPmbV2z8CHbl80/2hm3XPEG4JgNdQLK81IBRXmSxHfMAOkSqQeRxT/0dwNDz2GOm3zzpcQ==}
engines: {node: '>=4'}
axobject-query@4.1.0:
resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
engines: {node: '>= 0.4'}
@@ -2309,6 +2330,16 @@ packages:
resolution: {integrity: sha512-vv7l/mM7B9WgrhDaudIqv1x6v4LOBRYYmpWGdWushhpbCmVHp11sUB2v4hj1CAeTGXVxuZFz6xOU1RalAiPKfQ==}
engines: {node: '>=20.x'}
playwright-core@1.64.1:
resolution: {integrity: sha512-BC4s8y6SEVA6Q1rSxZTto8hI1KUI3xXlHGZgvGqP4IqPdI/a6FX9H29IDNz7vKo9l21b6LfYosScPL6M3xxyDQ==}
engines: {node: '>=20'}
hasBin: true
playwright@1.64.1:
resolution: {integrity: sha512-HCrVhHr5QQuwYoswEUGTb7gGp522yflbv/ST8nF4sFWGuLjQCt17Q/EubpGGSNKYn1tsTCPZxqHhHCfVURu7UA==}
engines: {node: '>=20'}
hasBin: true
pocketbase@0.28.1:
resolution: {integrity: sha512-/3ihkq+rvfcs0MQgrK4sEElOg6gfenHW9S/O+3BSO+V1yT+4B10+9aT22uTQUPqze9ItwNtwWyY5ZmdgVCTdVA==}
@@ -3161,6 +3192,11 @@ snapshots:
is-potential-custom-element-name: 1.0.1
lru-cache: 11.5.3
'@axe-core/playwright@4.14.0(playwright-core@1.64.1)':
dependencies:
axe-core: 4.14.0
playwright-core: 1.64.1
'@babel/code-frame@8.0.6':
dependencies:
'@babel/helper-validator-identifier': 8.0.6
@@ -3838,6 +3874,10 @@ snapshots:
'@parcel/watcher-win32-arm64': 2.6.0
'@parcel/watcher-win32-x64': 2.6.0
'@playwright/test@1.64.1':
dependencies:
playwright: 1.64.1
'@rolldown/binding-android-arm-eabi@1.2.8':
optional: true
@@ -4122,6 +4162,8 @@ snapshots:
assertion-error@2.0.1: {}
axe-core@4.14.0: {}
axobject-query@4.1.0: {}
balanced-match@4.0.4: {}
@@ -4976,6 +5018,12 @@ snapshots:
optionalDependencies:
'@napi-rs/nice': 1.1.1
playwright-core@1.64.1: {}
playwright@1.64.1:
dependencies:
playwright-core: 1.64.1
pocketbase@0.28.1: {}
postcss-media-query-parser@0.2.3: {}