Skip to content

test: harnais Compose sur la JVM, et deux comportements du glisser-déposer - #12

Merged
InstaZDLL merged 1 commit into
mainfrom
test/harnais-compose
Aug 9, 2026
Merged

test: harnais Compose sur la JVM, et deux comportements du glisser-déposer#12
InstaZDLL merged 1 commit into
mainfrom
test/harnais-compose

Conversation

@InstaZDLL

@InstaZDLL InstaZDLL commented Aug 9, 2026

Copy link
Copy Markdown
Owner

Pourquoi

Le dépôt affirmait ne pas pouvoir tester l'UI faute d'appareil. C'est faux : createComposeRule() tourne sous Robolectric, sur la JVM. Les artefacts ui-test-junit4 et ui-test-manifest étaient déjà au catalogue, mais déclarés en androidTest — un source set qui n'a jamais existé dans ce dépôt, donc jamais compilé.

Deux comportements livrés par la PR #9 n'étaient couverts par rien : ils n'existent que dans la composition, hors de portée de DragStateTest qui ne teste que l'arithmétique du geste.

Ce que ça change

Build. ui-test-junit4 et le BOM passent en testImplementation. Les dépendances d'instrumentation qui les accompagnaient — Espresso, androidx.test.ext:junit — sont retirées, ainsi que leurs entrées de catalogue devenues orphelines : il n'y a aucun code d'instrumentation à exécuter.

Tests. PlaylistDetailScreenTest, 6 cas :

Cas Couvre
descendre / monter une ligne l'action déplace la ligne affichée et transmet le nouvel ordre
bords de la liste la première ligne n'offre que « Descendre », la dernière que « Monter »
morceau seul aucune action de déplacement
deux déplacements de suite le second part de l'ordre courant, pas de celui de la base
écriture qui échoue l'ordre affiché revient à celui de la base

Les lignes et leurs actions sont relues depuis l'arbre de sémantique plutôt que par des testTag posés dans l'écran : c'est ce que voit le système d'accessibilité, et c'est justement l'objet du test. Aucun code de production n'est modifié.

Deux détails qui ont coûté un aller-retour

L'écran par défaut de Robolectric est trop court : l'en-tête et sa pochette le remplissent, et la LazyColumn ne compose alors qu'une partie des lignes — celles qui manquent sont absentes de l'arbre, pas seulement invisibles. D'où le @Config(qualifiers = "w411dp-h2000dp-xhdpi").

Le geste au doigt lui-même reste hors d'atteinte ; c'est pour ça que son calcul avait été extrait dans DragState.

Validation

./gradlew testDebugUnitTest assembleDebug → BUILD SUCCESSFUL, 81 tests, 0 échec, aucun avertissement.

Le test de restauration a été validé par retrait du correctif : en remplaçant le rappel onFailure de moveTo par un bloc vide, ce test seul tombe.

Toujours pas d'essai sur appareil réel.

Summary by CodeRabbit

  • Documentation

    • La documentation présente désormais la couverture des tests de l’écran de détail d’une playlist.
    • La feuille de route indique que cette couverture est terminée.
  • Tests

    • La réorganisation des morceaux est désormais vérifiée : déplacements vers le haut ou le bas, limites de la liste et enchaînement d’actions.
    • Les cas de playlist à un seul morceau et d’échec d’enregistrement sont également couverts.
    • Les tests valident la restauration de l’ordre affiché après une erreur.

…poser

`createComposeRule()` tourne sous Robolectric : une PlaylistDetailScreen se
compose et se pilote sans appareil. Les artefacts nécessaires étaient déjà au
catalogue, mais déclarés en `androidTest` — un source set qui n'a jamais existé
dans ce dépôt. Ils passent en `testImplementation` ; les dépendances
d'instrumentation qui les accompagnaient (Espresso, androidx.test.ext) sont
retirées, faute de code à exécuter.

Couvre les deux comportements du glisser-déposer qui n'existent que dans la
composition, et que `DragStateTest` ne pouvait pas atteindre :

- les actions d'accessibilité « Monter » et « Descendre », seul accès au
  déplacement pour TalkBack et le clavier — présence aux bords de la liste,
  ordre transmis, enchaînement de deux déplacements ;
- la restauration de l'ordre affiché quand l'écriture échoue. Vérifiée en
  neutralisant le rappel dans l'écran : ce test seul tombe.

Les lignes et leurs actions sont relues depuis l'arbre de sémantique plutôt que
par des marqueurs posés dans l'écran — c'est ce que voit le système
d'accessibilité, et c'est justement l'objet du test.

Claude-Session: https://claude.ai/code/session_01F89rkrDB9TxcwHbfgNoyY1
@coderabbitai

coderabbitai Bot commented Aug 9, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Le projet configure les tests Compose sur JVM avec Robolectric. Il ajoute une couverture de PlaylistDetailScreen pour la réorganisation des morceaux et documente cette couverture.

Changes

Tests Robolectric de PlaylistDetailScreen

Layer / File(s) Summary
Configuration des tests JVM
app/build.gradle.kts, gradle/libs.versions.toml
Les dépendances Compose nécessaires aux tests Robolectric sont déclarées dans testImplementation. Les dépendances androidTest supprimées sont retirées du catalogue.
Validation de la réorganisation
app/src/test/java/app/waveflow/ui/playlists/PlaylistDetailScreenTest.kt, README.md
Les tests vérifient les déplacements, les limites, le cas d’un seul morceau, la restauration après échec d’écriture et les déplacements successifs. La documentation décrit l’exécution sur JVM avec Robolectric et marque cette couverture comme terminée.

Estimated code review effort: 2 (Simple) | ~15 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed Le titre résume clairement l’ajout du harnais Compose sur la JVM et la couverture de comportements de réordonnancement.
Description check ✅ Passed La description détaille les changements et la validation, mais elle n’utilise pas les sections du modèle et omet la checklist ainsi que les issues liées.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch test/harnais-compose

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added scope: docs Docs, README, assets scope: project Build config, project files, tooling scope: tests Unit and UI tests type: test Tests size: l 200-500 lines labels Aug 9, 2026
@InstaZDLL

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 9, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@InstaZDLL InstaZDLL self-assigned this Aug 9, 2026
@InstaZDLL
InstaZDLL merged commit 73154e9 into main Aug 9, 2026
2 checks passed
@InstaZDLL
InstaZDLL deleted the test/harnais-compose branch August 9, 2026 21:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

scope: docs Docs, README, assets scope: project Build config, project files, tooling scope: tests Unit and UI tests size: l 200-500 lines type: test Tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant