Rebuild du site sur Astro : i18n multilingue, faits verifies, Docker, CI, tests
- Astro statique, EN par defaut + /fr/ + /nl/, detection langue navigateur - i18n par fichiers JSON, ajouter une langue = ajouter des traductions - Contenu original porte a l'identique (diff d'inventaire par langue) - Chronologie legislative corrigee sur sources primaires (PE, Conseil, votes) - Timeline 23 precedents + observatoire 35 items + annuaire 66 outils FOSS, chaque affirmation verifiee et sourcee - Zero requete tierce (teste), lisible JS coupe, axe WCAG AA x2 themes - Version offline monofichier par langue a chaque build - Docker multi-stage vers nginx + CSP stricte auto-generee - CI GitHub Actions (SHA-pinnees) + verification hebdo des liens - CONTRIBUTING : divulgation d'affiliation obligatoire, allowlist de domaines testee en CI
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
import { expect, test } from '@playwright/test'
|
||||
import { localePaths } from './helpers'
|
||||
|
||||
// The site's core promise, enforced: not a single request leaves for a
|
||||
// third-party host. Fonts, icons, styles, scripts — everything same-origin.
|
||||
for (const path of localePaths) {
|
||||
test(`zero third-party requests on ${path}`, async ({ page, baseURL }) => {
|
||||
const origin = new URL(baseURL!).origin
|
||||
const offenders: string[] = []
|
||||
page.on('request', (req) => {
|
||||
const url = new URL(req.url())
|
||||
if (url.origin !== origin && url.protocol !== 'data:') offenders.push(req.url())
|
||||
})
|
||||
await page.goto(path, { waitUntil: 'networkidle' })
|
||||
// scroll to the bottom to trigger any lazy loading
|
||||
await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight))
|
||||
await page.waitForTimeout(500)
|
||||
expect(offenders).toEqual([])
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user