D0 · test-plan §21 mymuseum-visitapp 15 cas 12 août 2026

Visite hors ligne — ce qu'on va vraiment mesurer

Cette passe ne cherche pas à valider l'app : elle cherche à savoir lesquels des quatre bugs offline restants existent encore. Chaque groupe de cas ci-dessous pointe vers un bug précis. Un groupe qui passe élimine son bug ; un groupe qui échoue lui donne sa priorité. C'est le seul moyen de trier D2 à D5 autrement qu'au jugé.

Avant de commencer

Les trois APK sont construits depuis le 12 août — c'est ce que K5 a débloqué. Prendre le flavor du lieu testé, pas dev, pour être sur les vraies données.

cd mymuseum-visitapp
adb install -r build/app/outputs/flutter-apk/app-mdlf-debug.apk
# ou app-fortsaintheribert-debug.apk

# 21.1.4 demande d'inspecter les fichiers téléchargés :
adb shell run-as be.unov.mymuseum.mdlf ls -l files/

Ce qui a changé depuis la dernière fois qu'on a regardé

D1 est corrigé. Le switch de collecte des ressources était commenté des deux côtés — 157 lignes mortes dans Export, 126 dans Import. Une visite téléchargée n'embarquait que l'image de la configuration, celle du loader et l'image de chaque section : ni contenus d'articles, ni audios, ni icônes de carte, ni images de quiz. C'est réparé, mais vérifié par l'analyse seulement. Les cas 21.1.2, 21.1.3, 21.1.5 et 21.1.6 sont donc la première vérification réelle de ce correctif — s'ils échouent, ce n'est pas un bug de plus, c'est D1 qui n'a pas tenu.

21.1 — État réel du téléchargement

Ce que la visite embarque

valide D1 · révèle D3
21.1.1
Télécharger une visite, puis passer en mode avion La visite s'ouvre sans erreur.
21.1.2
Ouvrir un Article contenant des images de contenu Les images s'affichent. Premier test réel de D1.
21.1.3
Lancer un audio dans cet Article L'audio se lit. Un échec ici peut venir de D1 ou de D3 — l'extension du fichier le départage, voir 21.1.4.
21.1.4
Inspecter le dossier local de la configuration Un fichier par ressource, avec une vraie extension. Un .unknown sur un audio, c'est D3audio/mp3 n'est pas un MIME standard, c'est audio/mpeg.
21.1.5
Ouvrir un Quiz avec images de questions et de réponses Les images s'affichent. Test réel de D1.
21.1.6
Ouvrir une SectionMap téléchargée Fond de carte, icônes et points présents. Les icônes d'annotation sont précisément ce que D1 ne collectait pas.

21.2 — Fraîcheur du contenu

Ce qui se met à jour, et ce qui se nettoie

décide D2 et D4
21.2.1
Remplacer une image dans manager-app (même ressource), re-télécharger L'image mise à jour remplace l'ancienne. Sinon D2 — le filtre incrémental teste la présence du fichier, pas sa version : une ressource déjà là n'est jamais re-téléchargée.
21.2.2
Relancer un téléchargement sans aucune modification Rien n'est re-téléchargé, message « à jour ». C'est le contrôle inverse de 21.2.1 : si D2 est corrigé trop grossièrement, tout se re-télécharge à chaque fois.
21.2.3
Supprimer une ressource dans manager-app, re-télécharger Le fichier local est purgé. Sinon D4 — le deleteSync() est commenté. ⚠️ D1 a rebranché usedImageOrAudioIds, qui pilote cette purge : elle peut être réparée sans qu'on l'ait touchée.

21.3 — Types non disponibles hors ligne

Ce qui doit dire non proprement

aucun bug connu — cas de contrôle
21.3.1
En mode avion, ouvrir une section Weather Message explicite « nécessite une connexion ». Ni écran blanc, ni spinner infini.
21.3.2
Idem sur une section Web Message explicite.
21.3.3
Idem sur une section Agenda Message explicite.
21.3.4
Ouvrir une SectionVideo pointant sur YouTube, en mode avion Message explicite, distinct d'une vidéo téléversée qui, elle, doit se lire. C'est le cas qui sépare « pas de réseau » de « pas téléchargé ».

21.4 — Robustesse

Ce qui se passe quand ça rate

décide D5
21.4.1
Couper le réseau pendant un téléchargement Le nombre d'échecs est remonté et la visite n'est pas annoncée « téléchargée ». Sinon D5 — les échecs partent dans un print. C'est le pire des quatre : le visiteur croit avoir sa visite.
21.4.2
Relancer après un téléchargement partiel Seules les ressources manquantes sont récupérées.

Comment lire le résultat

Le but n'est pas une colonne de coches vertes. C'est de rentrer avec quatre verdicts.

D2

Fraîcheur. Décidé par 21.2.1 et 21.2.2. Si une image remplacée ne remonte pas, le filtre doit porter sur la version et non la présence. Conséquence produit : une correction de contenu ne parvient jamais aux visites déjà téléchargées.

D3

Extensions. Décidé par 21.1.4, confirmé par 21.1.3. Un .unknown sur un audio suffit à trancher — inutile d'attendre que la lecture échoue.

D4

Purge. Décidé par 21.2.3. Peut déjà être réparé par effet de bord de D1 : à vérifier avant de planifier quoi que ce soit.

D5

Échecs silencieux. Décidé par 21.4.1. Le plus grave des quatre parce qu'il est invisible : une visite incomplète s'annonce complète, et l'erreur ne se découvre que dans le fort, sans réseau.

Si tout passe

Ce n'est pas un résultat décevant, c'est un résultat qui ferme le lot D : D2 à D5 tombent, et le plan perd un à deux jours de travail non nécessaire. Le lien L11 dit exactement cela — le §21 conditionne l'urgence des quatre bugs, pas leur existence. Noter aussi la plainte d'origine, « l'appli marche mal dans le fort » : si rien ne se reproduit ici, c'est qu'elle vient d'ailleurs, et ça vaut d'être su.