mirror of
https://github.com/IliesAllali/parenthese.git
synced 2026-11-12 08:16:09 +00:00
Scénario compte (e2e-account) : barre de la famille depuis le 25/09
Le test cherchait l'ancienne barre (« Contribuer à l'arbre »). Il suit maintenant la carte d'accueil, la barre « Ajouter un souvenir » et le menu « Plus » pour créer un compte. 19/19 en local. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
ba15fc8745
commit
86ac1eb7ab
1 file changed
+15
-12
@@ -4,7 +4,7 @@
|
||||
// 1. API : le propriétaire crée un compte et un arbre partagé (mot de passe contributeur)
|
||||
// 2. Navigateur A (famille, sans compte) : lien partagé → mot de passe → arbre ouvert en contributeur
|
||||
// 3. Rechargement : reste contributeur (jeton en poche), sans ressaisie
|
||||
// 4. Navbar "Créer un compte" → formulaire → compte créé → retour sur l'arbre, rattaché (navbar contributeur connecté)
|
||||
// 4. Menu « Plus » → "Créer un compte" → formulaire → compte créé → retour sur l'arbre, rattaché (barre de la famille connectée)
|
||||
// 5. Rechargement : l'arbre s'ouvre directement, sans grille d'accès
|
||||
// 6. API : l'arbre figure dans "mes arbres" du nouveau compte avec le rôle contributor
|
||||
// 7. Navigateur B (propriétaire) : connexion → paramètres → "modifications appliquées directement" → API confirme
|
||||
@@ -87,7 +87,9 @@ async function launchBrowser(label) {
|
||||
async clickLabel(label) {
|
||||
return p.eval(`(() => { const el = document.querySelector('button[aria-label=' + JSON.stringify(${JSON.stringify(label)}) + ']'); if (!el) return false; el.click(); return true })()`, false)
|
||||
},
|
||||
navLabels: () => p.eval(`[...document.querySelectorAll('.contextual-navbar button[aria-label]')].map(b => b.getAttribute('aria-label'))`, false),
|
||||
// Bouton visible dont le texte ou l'aria-label vaut exactement `text`
|
||||
hasButton: (text) => p.eval(`[...document.querySelectorAll('button, [role=button], [role=menuitem]')].some(b => b.offsetParent !== null && ((b.textContent || '').trim() === ${JSON.stringify(text)} || b.getAttribute('aria-label') === ${JSON.stringify(text)}))`, false),
|
||||
clickButton: (text) => p.eval(`(() => { const el = [...document.querySelectorAll('button, [role=button], [role=menuitem]')].find(b => b.offsetParent !== null && ((b.textContent || '').trim() === ${JSON.stringify(text)} || b.getAttribute('aria-label') === ${JSON.stringify(text)})); if (!el) return false; el.click(); return true })()`, false),
|
||||
async shot(file) { const { data } = await p.send('Page.captureScreenshot', { format: 'png' }); const { writeFileSync } = await import('node:fs'); writeFileSync(new URL(`./out/${file}`, import.meta.url), Buffer.from(data, 'base64')) },
|
||||
close() { try { proc.kill() } catch {} ; try { rmSync(profileDir, { recursive: true, force: true }) } catch {} },
|
||||
}
|
||||
@@ -115,18 +117,21 @@ try {
|
||||
}
|
||||
check('2. arbre ouvert avec le mot de passe', opened2)
|
||||
await sleep(1000)
|
||||
let labels = await A.navLabels()
|
||||
check('2. navbar contributeur (sans compte)', labels.includes("Contribuer à l'arbre") && labels.includes('Créer un compte'), labels.join(' | '))
|
||||
// Barre de la famille depuis le 25/09 : « Ajouter un souvenir », « Ajouter une personne », « Plus »
|
||||
check('2. carte d accueil de la première visite fermée', await A.clickButton("Regarder l'arbre"))
|
||||
await sleep(500)
|
||||
check('2. barre de la famille (sans compte)', await A.hasButton('Ajouter un souvenir') && await A.hasButton('Plus'))
|
||||
|
||||
// ---------- 3. Rechargement : reste contributeur ----------
|
||||
await A.goto(`${FRONT}/arbre/${slug}`)
|
||||
await A.waitFor(`document.querySelector('canvas.galaxy-canvas')`)
|
||||
await sleep(1000)
|
||||
labels = await A.navLabels()
|
||||
check('3. après rechargement, toujours contributeur sans ressaisie', labels.includes("Contribuer à l'arbre"), labels.join(' | '))
|
||||
check('3. après rechargement, toujours contributeur sans ressaisie', await A.hasButton('Ajouter un souvenir'))
|
||||
|
||||
// ---------- 4. Créer un compte depuis la navbar ----------
|
||||
check('4. clic "Créer un compte"', await A.clickLabel('Créer un compte'))
|
||||
// ---------- 4. Créer un compte depuis le menu « Plus » ----------
|
||||
await A.clickButton('Plus')
|
||||
await sleep(400)
|
||||
check('4. clic "Créer un compte"', await A.clickButton('Créer un compte'))
|
||||
check('4. écran compte en mode inscription', await A.waitFor(`document.querySelector('#accountFirstName')`))
|
||||
const pendingText = await A.eval(`document.querySelector('.account-pending-tree')?.textContent || ''`, false)
|
||||
check('4. rappel du retour sur l arbre', pendingText.includes('Famille E2E'), pendingText.trim())
|
||||
@@ -137,8 +142,7 @@ try {
|
||||
await A.clickText('button', 'Créer mon compte')
|
||||
check('4. retour sur l arbre après création', await A.waitFor(`document.querySelector('canvas.galaxy-canvas')`, 20000))
|
||||
await sleep(1500)
|
||||
labels = await A.navLabels()
|
||||
check('4. navbar contributeur connecté', labels.includes('Contribuer'), labels.join(' | '))
|
||||
check('4. famille connectée : barre de la famille et menu du compte', await A.hasButton('Ajouter un souvenir') && await A.hasButton('Menu compte'))
|
||||
const wizardShown = await A.eval(`/appelle votre famille/i.test(document.body.innerText)`, false)
|
||||
check('4. pas d assistant "votre arbre" par-dessus', !wizardShown)
|
||||
await A.shot('e2e-after-register.png')
|
||||
@@ -149,8 +153,7 @@ try {
|
||||
const gateShown = await A.eval(`!!document.querySelector('input[type=password]')`, false)
|
||||
check('5. rechargement connecté : arbre direct, pas de grille', direct && !gateShown)
|
||||
await sleep(1000)
|
||||
labels = await A.navLabels()
|
||||
check('5. toujours contributeur connecté', labels.includes('Contribuer'), labels.join(' | '))
|
||||
check('5. toujours contributeur connecté', await A.hasButton('Ajouter un souvenir') && await A.hasButton('Menu compte'))
|
||||
} finally {
|
||||
A.close()
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user