test: add M10 integration tests and coverage to 99% (M10-U7)

Integration tests validating the 3 M10 acceptance criteria end-to-end
with mocked slixmpp:
1. XmppChannel.send sends formatted direct message
2. XMPP error → PipelineWarning, no unhandled exception
3. No secret in XMPP logs (sentinel-based verification)

Additional unit tests covering daemon-thread branch of SyncXmppChannel,
deferred failed_auth, session timeout, disconnected handler, and
_format_message edge cases. Channels coverage: 99.18%.

All M10 checklist items marked complete in TODO.md.

Co-authored-by: opencode/test-engineer <test-engineer@agents.invalid>
Co-authored-by: opencode/coder <coder@agents.invalid>
This commit is contained in:
2026-09-08 00:58:40 +02:00
parent e07a6d709d
commit b61d314b7f
4 changed files with 736 additions and 7 deletions

10
TODO.md
View File

@@ -202,11 +202,11 @@ Générer une synthèse optionnelle via un fournisseur IA, avec mode dégradé s
Construire et envoyer le message XMPP structuré via un compte bot dédié (message direct, pas de PubSub).
- [ ] Créer `channels/protocol.py` : protocole `Channel` (méthode d'envoi).
- [ ] Créer `channels/xmpp.py` : `XmppChannel` (slixmpp, message direct, compte bot dédié).
- [ ] Implémenter `_format_message(XmppMessage)` : synthèse + liste brute des devoirs + changements + messages + infos blog (emojis 📌📅📚💬 autorisés).
- [ ] Gérer les erreurs XMPP (reconnexion, timeout) avec masquage des secrets, non bloquant (`PipelineWarning`).
- [ ] Créer `channels/__init__.py` : factory de canaux.
- [x] Créer `channels/protocol.py` : protocole `Channel` (méthode d'envoi).
- [x] Créer `channels/xmpp.py` : `XmppChannel` (slixmpp, message direct, compte bot dédié).
- [x] Implémenter `_format_message(XmppMessage)` : synthèse + liste brute des devoirs + changements + messages + infos blog (emojis 📌📅📚💬 autorisés).
- [x] Gérer les erreurs XMPP (reconnexion, timeout) avec masquage des secrets, non bloquant (`PipelineWarning`).
- [x] Créer `channels/__init__.py` : factory de canaux.
### Critères d'acceptation
- `XmppChannel.send` envoie un message direct formaté (slixmpp mocké en test).