Files
swift_companion/docs/pedagogie/etape-06-checklist-soutenance.md
2026-09-30 08:24:20 +02:00

119 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Étape 6 — Tests, soutenance et rendu école
> **Prérequis :** étapes 2–5 OK sur device (OAuth `public` + `projects`, recherche, profil, retour, layout).
## Objectif
1. Valider la **partie obligatoire** du sujet avant peer-eval.
2. Préparer le **dépôt Vogosphere** (sans `docs/`, sans `.env`).
3. Savoir **quoi montrer** à l’évaluateur et dans quel ordre.
Référence correcteurs : [swiftyCompanion/README.md](../../swiftyCompanion/README.md).
---
## Commandes avant soutenance
Depuis le package Flutter :
```bash
cd ~/projets/42School/swifty_companion/swiftyCompanion/swifty_companion
flutter pub get
flutter analyze
flutter test
flutter doctor
```
Sur téléphone (USB ou Wi‑Fi ADB) :
```bash
flutter devices
flutter run -d <device>
```
Après changement de `.env` ou de scopes OAuth : **arrêter** `flutter run` et relancer ; **reconnexion** 42 dans l’app.
---
## Checklist peer-eval (détaillée)
| # | Test | Comment le montrer | Où c’est géré dans l’app |
|---|------|--------------------|---------------------------|
| 1 | `flutter test` | Terminal sur la machine de dev | `test/widget_test.dart` |
| 2 | Parcours nominal | Connexion → login valide → profil | `SearchScreen` → `ProfileScreen` |
| 3 | Profil complet | Photo, ≥ 4 champs, skills (niveau + %), projets validés **et** failed | `IntraProfileService` + `profile_screen.dart` |
| 4 | Login invalide | `zzzzinvalid` → message, pas de crash | `IntraUserNotFoundException` |
| 5 | Hors ligne | Mode avion sur recherche **ou** sur profil (erreur + réessai) | `IntraNetworkException`, retry profil |
| 6 | Navigation | Retour AppBar → nouvelle recherche, session conservée | `Navigator.pop` |
| 7 | Petit écran / rotation | Paysage, clavier ouvert sur la recherche | `ResponsiveScrollBody`, `swifty_ui.dart` |
| 8 | Bonus | Access invalide → refresh → recherche OK | [étape 7](etape-07-bonus-token.md) |
**Ordre de démo suggéré :** connexion → profil riche (skills + failed) → login faux → mode avion → retour → `flutter test`.
---
## Correspondance sujet v4 ↔ app
| Critère sujet | Statut attendu |
|---------------|----------------|
| 2 vues | `SearchScreen` + `ProfileScreen` |
| Erreurs | Login vide, inconnu, réseau, 401, 403, 429 |
| Token unique | `IntraAuthService.instance` partout |
| OAuth Intra | `flutter_appauth` + `.env` |
| Layout adaptatif | Étape 5 (`wideBreakpoint` 720 px) |
Champs masqués par l’API (`—`) : normal (confidentialité sujet).
---
## Rendu Git école
### Ce qui part sur Vogosphere
Racine du dépôt Intra = contenu de **`swiftyCompanion/`** :
- `README.md`, `.gitignore`, `.env.example`
- `swifty_companion/` (code Flutter)
### Ce qui ne part **pas**
- `docs/` (dépôt perso uniquement)
- `.env` (secrets)
- Fichiers de backup type `.env copy`
### Vérifier avant push
```bash
cd ~/projets/42School/swifty_companion/swiftyCompanion
git status # si repo école initialisé ici
```
- Aucun `.env` listé
- `REDIRECT_URI` dans `.env.example` = URI enregistrée sur l’Intra
- README école à jour pour les correcteurs
Workflow détaillé : [README racine](../../README.md) (section « Pousser vers l’école »).
---
## Parler en soutenance (30 s)
> « Swifty Companion : OAuth2 Intra une fois, puis recherche par login. Le profil charge cursus, skills et projects_users avec le même token. Erreurs réseau et API gérées ; layout scrollable et deux colonnes sur grand écran. Secrets dans `.env` local, non versionné. »
---
## Critères « étape 6 terminée »
| # | Fait ? |
|---|--------|
| 1 | `flutter analyze` + `flutter test` verts |
| 2 | Checklist peer-eval cochée sur device |
| 3 | `.env` absent du futur commit école |
| 4 | Tu sais lancer la démo sans notes |
---
## Ensuite — étape 7 (bonus)
→ [etape-07-bonus-token.md](etape-07-bonus-token.md) : refresh token à l’expiration (optionnel si obligatoire parfaite).