CI / lint (push) Successful in 1m7s
CI / security (push) Successful in 43s
CI / test (push) Successful in 2m12s
CI / build (push) Successful in 42s
CI / e2e (push) Successful in 10m43s
Desktop Build / build-windows (push) Canceled after 0s
Desktop Build / build-linux (push) Canceled after 0s
- scripts/updater_manifest.py : construit latest.json (version, pub_date, platforms Windows/Linux avec signature .sig et URLs des assets). - publish_release.py : genere latest.json, upload des .sig + latest.json, rappel de commit. - tauri.conf.json : endpoint updater -> raw/branch/main/desktop/latest.json. - build-windows.bat / build-linux.sh : detection automatique de obsigate-updater.key (signature) ou repli non signe. - .gitignore : ignore desktop/key/ ; tests/test_updater_manifest.py (8 tests).
185 lines
7.9 KiB
Markdown
185 lines
7.9 KiB
Markdown
# ObsiGate Desktop — Protocole de tests E2E manuels
|
|
|
|
> **Rôle :** valider les 6 scénarios de bout en bout du desktop Tauri (#77) qui ne
|
|
> peuvent pas être automatisés (interactions OS : installeur, tray, notifications,
|
|
> association de fichiers, auto-update, désinstallation).
|
|
> **Statut :** protocole documenté — à exécuter manuellement par un humain.
|
|
> **Références :** [feature desktop-tauri](./features/desktop-tauri.md) ·
|
|
> [Roadmap](./ROADMAP.md) · [Build & releases](./DEVELOPMENT_AND_RELEASES.md)
|
|
|
|
---
|
|
|
|
## 1. Prérequis
|
|
|
|
- Un **build release** de l'application :
|
|
- Windows : `desktop\build-windows.bat` → `ObsiGate_x.y.z_x64.msi` / `-setup.exe`
|
|
- Linux : `desktop/build-linux.sh` → `obsigate_x.y.z_amd64.deb` / `.AppImage`
|
|
- Une **machine vierge ou un compte utilisateur propre** (pas d'installation
|
|
précédente) pour les tests d'installation/désinstallation.
|
|
- Le **mot de passe admin** affiché au premier lancement (ou `OBSIGATE_ADMIN_PASSWORD`
|
|
défini avant le lancement).
|
|
- Accès en écriture aux logs : `%APPDATA%\ObsiGate\logs\backend.log` (Windows) ou
|
|
`~/.config/obsigate/logs/backend.log` (Linux).
|
|
|
|
## 2. Comment remplir ce protocole
|
|
|
|
Pour chaque test : noter la **version testée** (`menu Aide → À propos`), le
|
|
**commit** du build, la **date**, puis cocher `✅ OK` ou `❌ Échec` et joindre les
|
|
logs/ captures en cas d'échec. Ne cocher un test qu'après avoir observé le
|
|
**résultat attendu**.
|
|
|
|
| Test | Version | Commit | Date | Résultat |
|
|
|---|---|---|---|---|
|
|
| T1 — Installation | | | | ⬜ |
|
|
| T2 — Tray icon | | | | ⬜ |
|
|
| T3 — Notifications natives | | | | ⬜ |
|
|
| T4 — Association `.md` | | | | ⬜ |
|
|
| T5 — Auto-update | | | | ⬜ |
|
|
| T6 — Désinstallation | | | | ⬜ |
|
|
|
|
---
|
|
|
|
## T1 — Installation → premier lancement → ouverture d'un fichier
|
|
|
|
**Objectif :** l'installeur installe l'app et le premier lancement démarre le
|
|
backend + affiche l'interface.
|
|
|
|
1. Lancer l'installeur (`.msi` ou `.deb`/`.AppImage`).
|
|
2. Installer dans le chemin par défaut → vérifier la création du raccourci
|
|
(bureau / menu Démarrer / menu applications).
|
|
3. Lancer ObsiGate depuis le raccourci.
|
|
4. Observer l'écran de démarrage (« ObsiGate démarre… ») puis l'interface.
|
|
5. Au premier lancement, cliquer **« Choisir mon dossier »** dans la bannière du
|
|
wizard et sélectionner un dossier vault.
|
|
6. Ouvrir un fichier `.md` depuis l'arborescence.
|
|
|
|
**Résultat attendu :**
|
|
- Aucun terminal / console visible.
|
|
- Le backend répond (`http://127.0.0.1:17890/api/health` → 200) en ~2 s.
|
|
- Le fichier s'ouvre dans le viewer.
|
|
- La bannière du wizard **ne réapparaît pas** au lancement suivant.
|
|
|
|
**Échec si :** écran blanc, backend non démarré, wizard qui revient à chaque
|
|
lancement.
|
|
|
|
---
|
|
|
|
## T2 — Tray icon → réduire → restaurer
|
|
|
|
**Objectif :** le tray fonctionne et contrôle la fenêtre.
|
|
|
|
1. Vérifier la présence de l'icône ObsiGate dans la zone de notification.
|
|
2. Clic **gauche** sur l'icône → la fenêtre se cache.
|
|
3. Clic **gauche** à nouveau → la fenêtre réapparaît et prend le focus.
|
|
4. Clic **droit** → menu (Ouvrir ObsiGate / À propos / Quitter).
|
|
5. Fermer la fenêtre avec le **X** → elle se réduit dans le tray, le backend
|
|
continue de tourner (l'icône reste).
|
|
|
|
**Résultat attendu :** toggle visible/caché immédiat, menu contextuel complet,
|
|
fermeture par X = réduction (pas d'arrêt du backend).
|
|
|
|
---
|
|
|
|
## T3 — Notifications natives (fichier modifié → popup OS)
|
|
|
|
**Objectif :** les notifications natives remplacent le push web.
|
|
|
|
1. Activer les notifications dans les préférences (par vault si proposé).
|
|
2. Modifier un fichier surveillé (édition externe dans le vault, ou édition
|
|
in-app avec le watcher actif).
|
|
3. Observer la notification du système d'exploitation.
|
|
|
|
**Résultat attendu :** popup OS affichant le nom du fichier/vault et l'action ;
|
|
un clic ouvre le fichier concerné. La notification apparaît même si la fenêtre
|
|
ObsiGate est réduite.
|
|
|
|
> Note : sur Windows, vérifier que les notifications ne sont pas bloquées dans
|
|
> *Paramètres → Système → Notifications*.
|
|
|
|
---
|
|
|
|
## T4 — Association `.md` → double-clic → ouvre dans ObsiGate
|
|
|
|
**Objectif :** l'association de fichiers ouvre l'app.
|
|
|
|
1. Vérifier que `.md` est associé à « ObsiGate Markdown » (Windows :
|
|
*Paramètres → Applications par défaut* ; Linux : `xdg-mime query default text/markdown`).
|
|
2. **Fermer** complètement ObsiGate (tray → Quitter).
|
|
3. Double-cliquer sur un fichier `.md` dans l'explorateur / gestionnaire de fichiers.
|
|
4. Observer le lancement d'ObsiGate et l'ouverture du fichier.
|
|
|
|
**Résultat attendu :** ObsiGate démarre et ouvre le fichier (ou le vault
|
|
contenant le fichier). Un second double-clic alors que l'app tourne **focus la
|
|
fenêtre existante** (single-instance) au lieu de lancer un doublon.
|
|
|
|
---
|
|
|
|
## T5 — Auto-update → nouvelle version → installation
|
|
|
|
**Objectif :** l'updater détecte et installe une nouvelle version.
|
|
|
|
1. S'assurer qu'une **release plus récente** existe sur Gitea (avec les artefacts
|
|
et le manifeste de mise à jour signé).
|
|
2. Lancer la version N.
|
|
3. Déclencher la vérification de mise à jour (menu ou au démarrage selon l'UI).
|
|
4. Accepter la mise à jour → l'app télécharge, vérifie la signature et installe.
|
|
5. Relancer → vérifier la version affichée (`À propos`).
|
|
|
|
**Résultat attendu :** détection de la version N+1, téléchargement, installation
|
|
sans intervention manuelle, version mise à jour après redémarrage.
|
|
|
|
**Prérequis bloquant :** la release N+1 doit être publiée (binaires **signés**
|
|
`.sig` + `latest.json`) et le fichier `desktop/latest.json` **commité sur `main`**
|
|
(le manifeste est généré par `scripts/publish_release.py`, cf. §4).
|
|
|
|
---
|
|
|
|
## T6 — Désinstallation propre
|
|
|
|
**Objectif :** la désinstallation ne laisse aucun processus ni résidu gênant.
|
|
|
|
1. Fermer ObsiGate (tray → Quitter) pour éviter un processus orphelin.
|
|
2. Désinstaller via le panneau de configuration (Windows) ou `dpkg -r obsigate`
|
|
/ supprimer l'AppImage (Linux).
|
|
3. Vérifier qu'aucun processus `obsigate-desktop` / Python backend ne tourne
|
|
encore.
|
|
4. Vérifier les résidus : raccourcis supprimés, entrée « Applications par
|
|
défaut » retirée.
|
|
5. (Optionnel) Vérifier le comportement des données utilisateur
|
|
(`%APPDATA%\ObsiGate` / `~/.config/obsigate`) : conservées ou supprimées selon
|
|
le choix documenté.
|
|
|
|
**Résultat attendu :** désinstallation sans erreur, aucun processus résiduel,
|
|
aucun raccourci cassé.
|
|
|
|
---
|
|
|
|
## 3. Emplacements utiles
|
|
|
|
| Élément | Windows | Linux |
|
|
|---|---|---|
|
|
| Config | `%APPDATA%\ObsiGate\config.json` | `~/.config/obsigate/config.json` |
|
|
| Logs backend | `%APPDATA%\ObsiGate\logs\backend.log` | `~/.config/obsigate/logs/backend.log` |
|
|
| Données (index, comptes) | `%APPDATA%\ObsiGate\data\` | `~/.config/obsigate/data\` |
|
|
|
|
## 4. Signature de code & auto-update
|
|
|
|
- **Signature Windows (optionnelle, hors périmètre de ce protocole) :** sans
|
|
certificat, SmartScreen affiche un avertissement au premier lancement
|
|
(*Informations complémentaires → Exécuter quand même*). Le script
|
|
`desktop/scripts/sign-windows.ps1` signe automatiquement si
|
|
`OBSIGATE_SIGN_CERT_PFX` est défini ; sinon il est un no-op explicite.
|
|
Alternatives détaillées dans le [README desktop](../desktop/README.md).
|
|
- **Signature de l'updater Tauri (gratuite, distincte de la signature Windows) :**
|
|
déjà configurée — `pubkey` dans `desktop/tauri.conf.json`, clé privée lue depuis
|
|
`desktop/obsigate-updater.key` (gitignorée) ou `TAURI_SIGNING_PRIVATE_KEY`.
|
|
Le manifeste `latest.json` est généré par `scripts/publish_release.py` puis
|
|
commité sur `main`. Procédure :
|
|
[DEVELOPMENT_AND_RELEASES §2bis](./DEVELOPMENT_AND_RELEASES.md#2bis-signature-des-mises-à-jour-updater-tauri).
|
|
|
|
## 5. Clôture
|
|
|
|
Une fois les 6 tests exécutés et OK, reporter le résultat dans
|
|
[`docs/features/desktop-tauri.md`](./features/desktop-tauri.md) (section F) et
|
|
mettre à jour le statut du #77 dans la [Roadmap](./ROADMAP.md).
|