diff --git a/README.md b/README.md index ae20448..8708271 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ sauvegarde JSON. **100 % local, aucun compte, aucun serveur.** > à titre informatif — ce ne sont pas des mesures. Fie-toi toujours à tes analyses de > sang et aux consignes de ton endocrinologue. -- **Statut** : v1.5.0 — build Android ✅, **lint vert** ✅, **183 tests unitaires** ✅ (161 sans les données de test locales ; régressions épinglées sur données réelles **non versionnées**), intégration montre = notifications ✅, **dépôt Gitea privé + releases avec APK** ✅ +- **Statut** : v1.5.0 — build Android ✅, **lint vert** ✅, **183 tests unitaires** ✅ (160 sans les données de test locales ; régressions épinglées sur données réelles **non versionnées**), intégration montre = notifications ✅, **dépôt Gitea privé + releases avec APK** ✅ - **Journal des versions** : [docs/CHANGELOG.md](docs/CHANGELOG.md) - **Guide utilisateur** : [docs/GUIDE_INSTALLATION.md](docs/GUIDE_INSTALLATION.md) - **Doc de développement** (architecture, maths, décisions, bugs) : [docs/DEVELOPPEMENT.md](docs/DEVELOPPEMENT.md) @@ -100,7 +100,7 @@ par AGP si les licences sont signées). Le wrapper télécharge Gradle 9.7.1. git clone && cd HormoneTrack echo "sdk.dir=/chemin/vers/android-sdk" > local.properties # ou ANDROID_HOME ./gradlew assembleDebug # APK : app/build/outputs/apk/debug/app-debug.apk -./gradlew testDebugUnitTest # 172 tests (150 sans les données locales) +./gradlew testDebugUnitTest # 183 tests (160 sans les données locales) ./gradlew lint # lint vert obligatoire avant release ``` diff --git a/docs/DEVELOPPEMENT.md b/docs/DEVELOPPEMENT.md index b1cb242..4ad070a 100644 --- a/docs/DEVELOPPEMENT.md +++ b/docs/DEVELOPPEMENT.md @@ -514,9 +514,9 @@ MAIS passant par tous les points ». ## 8. Tests unitaires -**183 tests JVM, tous verts** (`./gradlew testDebugUnitTest`) — **161 sans -les données de test locales** (cf §8.bis : les 3 classes de régression, -6 tests chacune, sont skippées via `Assume`). Dépendance : JUnit 4.13.2. +**183 tests JVM, tous verts** (`./gradlew testDebugUnitTest`) — **160 sans +les données de test locales** (cf §8.bis : les 4 classes de régression, +6/6/6/5 tests, sont skippées via `Assume`). Dépendance : JUnit 4.13.2. Emplacement : `app/src/test/java/com/hormonetrack/`. Répertoire de travail d'exécution = `app/` → l'asset est lu via `src/main/assets/pk_profiles.json` (fallback `app/src/…`). @@ -589,7 +589,8 @@ dépôt (ni maintenant, ni si le repo devient public un jour). dans le code (le scanner refuserait, et ce serait une fuite). - les tests font `Assume.assumeTrue(file.exists())` dans le `@Before` : **sans le fichier, la classe est IGNORÉE** (skipped, pas failed) — un clone neuf ou une CI - exécute 44 tests au lieu de 87 ; + exécute 160 tests au lieu de 183 (v1.5.0 ; chiffres historiques : 44/87 à v1.3.x, + 150/172 à v1.4.x) ; - le workdir des tests Gradle est le dossier du module (`app/`) → les tests cherchent les fichiers à plusieurs chemins (`../local-test-data/…` en premier) ; - **pour les lancer** : exporter un backup JSON depuis l'app → l'enregistrer sous @@ -1343,6 +1344,21 @@ l'exemple) :** seulement au boot/save). Leçon : toute logique de scheduling doit vivre au MOTEUR (testable JVM), pas dans les composants Android. +63. **Légende du graphique dupliquée + chip coupé hors fenêtre** (v1.5.0, + constat émulateur §16.ter) : l'ajout de la série « Tracé labs » + (clé `"LAB"` dans la liste `curves`) tombait dans le `else` de la + boucle de légende → la légende « E2/T Transfem Science » s'imprimait + une 2ᵉ fois ; et le 4ᵉ chip de la rangée modèles sortait de la + fenêtre sur écran 1080 px (rangée à largeur fixe, absent du dump + uiautomator — même famille que #57 : un ajout de rangée doit être + testé par dump, pas seulement par le code). FIX : (a) branche + explicite `"LAB" -> {}` dans la boucle de légende (légende dédiée + plus bas) ; (b) `horizontalScroll(rememberScrollState())` CONFINÉ à + la RANGÉE de chips (le pan/pinch du graphique reste sur le Card — le + fix #62 visait un scroll VERTICAL parent ; ici le scroll est local, + pas de conflit). Leçon : quand une liste clé→série reçoit une nouvelle + clé, GREPPER chaque consommateur de la liste (légende, stats, styles). + **Leçons** : (a) ne jamais croire un build « probablement bon » sans l'avoir lancé ; (b) les tests sémantiques attrapent ce que la compilation ne voit pas ; (c) se méfier des constantes stdlib « de mémoire » (`ln2`), des mélanges Float/Double, et des APIs M3 @@ -1492,8 +1508,8 @@ vérifie pas en tests JVM). 1. **Bumper la version** dans `app/build.gradle.kts` : `versionCode = N+1`, `versionName = "X.Y.Z+1"` (SemVer : fix = Z, feature = Y). 2. **Tests verts obligatoires** : `./gradlew testDebugUnitTest` — 183 au - total, 161 si `local-test-data/` est absent (les 3 classes de régression - réelles sont skippées via `Assume`, 6 tests chacune) ; **lint vert + total, 160 si `local-test-data/` est absent (les 4 classes de régression + réelles sont skippées via `Assume`, 6/6/6/5 tests) ; **lint vert obligatoire** : `./gradlew lint` (v1.3.4 — `StringFormatMatches` aurait attrapé les crashs #47/#48 dès v1.3.1). Paliers de test du projet : chaque commit = tests + lint ; release = + scan confidentialité + APK au @@ -1840,7 +1856,7 @@ Sur le téléphone de test (à compléter par l'utilisatrice) : tap ; et TOUTES les courbes affichées reflètent la calibration (test) --- -*Doc mise à jour le 11 sept. 2026 (v1.5.0) — build OK, lint vert, 183/183 tests verts (161 sans +*Doc mise à jour le 11 sept. 2026 (v1.5.0) — build OK, lint vert, 183/183 tests verts (160 sans les données locales), dépôts Gitea (cloudyfy + farewell) avec releases APK, aucune donnée de santé dans le dépôt ni l'historique. Fil des corrections : v1.3.3 = reprise de maintenance (permissions agenda, export logs IO, bump de version) ; v1.3.4 = 2 crashs