diff --git a/TEST_SCENARIOS.md b/TEST_SCENARIOS.md index 99cdc61..0cf0555 100644 --- a/TEST_SCENARIOS.md +++ b/TEST_SCENARIOS.md @@ -95,12 +95,12 @@ Aucun de ces enchaînements ne doit afficher « Entry changed elsewhere » : Le message n'apparaît que si `confirmOnUnsaved` est actif **et** que l'entrée est dirty. Tester avec `askBeforeDelete` **ON puis OFF** (Settings → Security). -### B1 · ✕ sur une **autre** ligne +### B1 · ✕ sur une **autre** ligne ✅ - **PRÉ** : `A` ouverte + dirty - **ACTION** : cliquer ✕ (Move to trash) sur la ligne `B` - **ATTENDU** : `B` part à la corbeille, l'éditeur de `A` **reste ouvert** avec les modifs. Vrai dans les deux réglages de `askBeforeDelete`. -### B2 · ✕ sur la ligne éditée, `askBeforeDelete` = OFF +### B2 · ✕ sur la ligne éditée, `askBeforeDelete` = OFF ✅ - **ACTION** : `A` ouverte + dirty → ✕ sur `A` - **ATTENDU** : modale « Discard unsaved changes? ». **Annuler ⇒ rien n'est supprimé** et l'éditeur reste ouvert. Confirmer ⇒ `A` à la corbeille + éditeur fermé. @@ -114,9 +114,15 @@ est dirty. Tester avec `askBeforeDelete` **ON puis OFF** (Settings → Security) ### B5 · batch Delete **excluant** l'entrée éditée - **ATTENDU** : l'éditeur reste ouvert, modifs intactes. -### B6 · corbeille -- **ACTION** : ouvrir une entrée de la corbeille via *Trash actions*, puis : (a) *Delete forever* dessus, (b) batch purge la contenant, (c) *Empty trash* -- **ATTENDU** : dans les trois cas l'éditeur se ferme s'il portait une entrée purgée, sinon il reste. +### B6 · corbeille — l'éditeur ne se ferme pas pour rien +**Prémisse corrigée** : on **ne peut pas** ouvrir une entrée de la corbeille dans +l'éditeur. `openTrashActions` (js/app.js) est un corps vide, et le menu kebab de +la corbeille n'a pas d'entrée *Edit* — les actions sont sur la carte. Une entrée +purgée n'est donc jamais celle qui est éditée, sauf par le chemin distant décrit +plus bas. +- **ACTION** : `A` ouverte + dirty (vue normale) → aller dans la corbeille → *Delete forever* sur une autre entrée, puis un batch *Delete forever*, puis *Empty trash*. +- **ATTENDU** : l'éditeur de `A` **reste ouvert** avec ses modifs dans les trois cas — la purge ne concerne jamais l'entrée éditée. +- **Cas limite, seul moyen d'y arriver** : `A` ouverte + dirty → un sync distant met `A` à la corbeille → *Empty trash* local → là `closeEditorForDeleted` doit fermer l'éditeur proprement (même famille qu'A13). ### B7 · boutons de la barre de sélection - **ACTION** : `A` ouverte + dirty → cocher `B` → cliquer successivement *Move to folder…*, *Add tag*, *Clear* @@ -335,7 +341,7 @@ garde refusait, à raison, de pré-remplir avec « Password Manager »). - **Ne pas « corriger » en envoyant deux Tab** : l'ordre de tabulation dépend de chaque site, un second Tab casserait tous les formulaires normaux. - **Historique** : la séquence envoyait `Ctrl+A + Del` avant **chaque** champ. Après le Tab c'était doublement mauvais : redondant (arriver par Tab sélectionne déjà tout le contenu du champ, cf. K1) et destructeur quand le Tab tombe sur un lien, un bouton ou le document — `Ctrl+A` sélectionne alors la page entière et la frappe se perd. Retiré ; celui d'avant le username reste (l'utilisateur y a placé le curseur par un clic, rien n'est sélectionné). -### H11 · l'application précédente réduite reste réduite ✅ ✅ +### H11 · l'application précédente réduite reste réduite ✅ - **ACTION** : depuis X, **réduire X** dans la barre des tâches → ouvrir le coffre (icône du tray) → le fermer par la croix. - **ATTENDU** : X **reste réduite**. Le focus part où Windows décide ; on ne rouvre pas une fenêtre que l'utilisateur a rangée. - **Pourquoi c'est fragile** : `ForceForegroundWindow` fait `ShowWindow(SW_RESTORE)` sur une cible iconique — il est écrit pour l'autofill, où sortir la fenêtre cible est justement le but. Réutilisé tel quel pour la restitution du focus, il changeait l'état de la fenêtre d'une autre application. Garde `not IsIconic` posé côté `MinimizeToTray`, pas dans `ForceForegroundWindow` (l'autofill en a toujours besoin).