diff --git a/TEST_SCENARIOS.md b/TEST_SCENARIOS.md index 1778807..bd6fbc4 100644 --- a/TEST_SCENARIOS.md +++ b/TEST_SCENARIOS.md @@ -74,7 +74,7 @@ Préparer : 3 entrées `A`, `B`, `C`, dont `A` dans le dossier `Work` avec le ta ### A11 · sync / import pendant que l'éditeur est ouvert - **ACTION** : `A` ouverte + dirty → lancer *Sync now* (ou importer un JSON en mode overwrite) qui met `A` à jour → Save -- **ATTENDU** : modale « Entry changed elsewhere ». **Annuler ⇒ rien n'est écrit** (la version du sync/import survit, l'éditeur reste ouvert le temps de recopier). **Overwrite ⇒** la version de l'éditeur gagne. +- **ATTENDU** : modale « Entry changed elsewhere ». **Annuler ⇒ rien n'est écrit** (la version du sync/import survit, l'éditeur reste ouvert le temps de recopier). **Overwrite ⇒** la version de l'éditeur gagne.✅ ### A12 · pas de fausse alerte (non-régression d'A11) Aucun de ces enchaînements ne doit afficher « Entry changed elsewhere » : @@ -147,6 +147,36 @@ est dirty. Tester avec `askBeforeDelete` **ON puis OFF** (Settings → Security) - **ACTION** : `A` ouverte + dirty → lancer une action longue (export, sync) → cliquer sur le toast ou sur le spinner - **ATTENDU** : l'éditeur ne se ferme pas, pas de discard. +### B14 · dialogues natifs ouverts par un clic programmatique +- **ACTION** : `A` ouverte + **dirty** → (a) Settings → *Import vault* ; (b) télécharger une pièce jointe (fallback web) ; (c) *Upload icon* ; (d) joindre un fichier. +- **ATTENDU** : **seul** le dialogue natif s'ouvre. Pas de « Discard unsaved changes? » par-dessus, l'éditeur reste ouvert et modifié. +- **Historique** : le `` (et le ``) est attaché à `` puis `.click()` → le clic synthétique remontait au handler click-outside qui le prenait pour un clic dehors. Gardé par `e.isTrusted`. + +--- + +## F — Round-trip export / import (drapeaux & provenance) + +### F1 · favori + épingle survivent au restore +- **ACTION** : épingler **et** mettre en favori une entrée → *Export vault* → supprimer l'entrée (corbeille + purge) → *Import vault* du fichier. +- **ATTENDU** : l'entrée revient **épinglée et favorite**. +- **Historique** : `pinned` n'était dans aucun container ; `favorite` y était écrit mais **jamais relu** (ni parser, ni body, ni INSERT) → les deux perdus au restore. + +### F2 · même chose depuis une auto-backup +- **ACTION** : *Backup now* → supprimer l'entrée → importer le fichier `vault-autobackup-*.json`. +- **ATTENDU** : identique à F1. + +### F3 · CSV étranger → drapeaux à 0 +- **ACTION** : importer un CSV sans colonnes favorite/pinned. +- **ATTENDU** : entrées importées ni épinglées ni favorites (défaut 0), pas d'erreur. + +### F4 · le sync ne propage PAS les drapeaux (device-local, décidé 2026-07-11) +- **ACTION** : épingler/favoriser une entrée sur le device A → *Sync now* → *Sync now* sur le device B. +- **ATTENDU** : sur B, l'entrée **n'est pas** épinglée/favorite. Et un sync ne doit jamais **retirer** un drapeau posé localement sur B (le PUT serveur ne touche pas ces colonnes). + +### F5 · icône custom : provenance préservée +- **ACTION** : upload d'une icône custom → export → supprimer l'entrée → import → puis **Re-fetch all**. +- **ATTENDU** : l'icône custom revient **et** survit au Re-fetch all (le flag `icon_custom` a fait le round-trip). + --- ## C — `withEncryptedMeta` sur tout write `/entries`