Tests et Couverture
===================
Le projet dispose d'une suite de tests complète couvrant les modules critiques.
Résumé de la Couverture
-----------------------
.. list-table:: Couverture par Module
:header-rows: 1
:widths: 30 15 15 40
* - Module
- Couverture
- Tests
- Statut
* - **Modules Core**
-
-
-
* - ``cache_manager.py``
- **92%**
- 18 tests
- ✅ Excellent
* - ``cacheable_mixin.py``
- **97%**
- 18 tests
- ✅ Excellent
* - ``data_loader.py``
- **100%**
- 18 tests
- ✅ Parfait
* - ``data_explorer.py``
- **95%**
- 15 tests
- ✅ Excellent
* - ``logger.py``
- **94%**
- 11 tests
- ✅ Excellent
* - ``interactions_analyzer.py``
- **61%**
- 18 tests
- ⚠️ Bon
* - **Composants UI**
-
-
-
* - ``app.py``
- **63%**
- Tests intégration
- ⚠️ Acceptable
* - ``ingredients_clustering_page.py``
- **32%**
- 18 tests
- ⚠️ UI principalement
* - ``popularity_analysis_page.py``
- **22%**
- 15 tests
- ⚠️ UI principalement
* - **Utilitaires**
-
-
-
* - ``preprocess_ingredients_matrix.py``
- Tests fonctionnels
- 19 tests
- ✅ Testé
**Couverture globale : 49%**
Total : **160 tests** passent avec succès
📊 **Rapport de couverture détaillé** : `Voir le rapport HTML interactif `_
Le rapport HTML complet est généré automatiquement et déployé avec cette documentation.
Il permet de visualiser ligne par ligne le code couvert par les tests.
Détails par Module
------------------
Modules Core (Logique Métier)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Les modules ``core/`` contiennent la logique métier critique et sont **excellemment testés** :
**CacheManager (92%)**
- Tests de sauvegarde/récupération du cache
- Tests de génération de clés cohérentes
- Tests de nettoyage du cache (partiel et complet)
- Tests de gestion d'erreurs (cache corrompu, données invalides)
- Tests d'informations sur le cache
**CacheableMixin (97%)**
- Tests d'opérations cachées
- Tests d'activation/désactivation du cache
- Tests de cache hit/miss
- Tests avec plusieurs analyseurs
- Tests de préservation des types de données
**DataLoader (100%)**
- Chargement de fichiers CSV
- Validation des données
- Préprocessing
- Gestion d'erreurs
**DataExplorer (95%)**
- Exploration de datasets
- Statistiques descriptives
- Rechargement de données
**Logger (94%)**
- Configuration multi-handlers
- Logs structurés (debug, info, warning, error)
- Fichiers de logs séparés
**InteractionsAnalyzer (61%)**
- Agrégation des interactions
- Preprocessing IQR/Z-score
- Détection d'outliers
- Création de segments de popularité
- Catégorisation de recettes
Composants UI (Pages Streamlit)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Les pages Streamlit contiennent beaucoup de code de rendu UI difficile à tester unitairement.
**Note** : Ces pages sont testées **manuellement** via :
- Application déployée sur Streamlit Cloud
- Tests d'intégration end-to-end
- Validation utilisateur
La couverture plus faible est **normale et attendue** pour du code UI.
Exécuter les Tests
------------------
Tests complets
~~~~~~~~~~~~~~
.. code-block:: bash
# Tous les tests
uv run pytest
# Tests avec couverture
uv run pytest --cov=src --cov-report=html
# Ouvrir le rapport HTML
open htmlcov/index.html
Tests spécifiques
~~~~~~~~~~~~~~~~~
.. code-block:: bash
# Tests d'un module spécifique
uv run pytest tests/test_cache_manager.py -v
# Tests d'une classe spécifique
uv run pytest tests/test_cache_manager.py::TestCacheManager -v
# Tests avec affichage des print
uv run pytest -s
Linting
~~~~~~~
.. code-block:: bash
# Vérification PEP8
uv run flake8 src/ tests/
# Fix automatique
uv run autopep8 --in-place --recursive src/ tests/
Tests de Preprocessing
~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: bash
# Tests du preprocessing de la matrice d'ingrédients
uv run pytest tests/test_preprocess_ingredients_matrix.py -v
# Script de test du preprocessing (avec données réelles)
bash scripts/test_preprocessing.sh
Intégration Continue
--------------------
Les tests sont exécutés automatiquement via **GitHub Actions** :
- **Workflow** : ``.github/workflows/test-app.yml``
- **Déclenchement** : À chaque push et pull request
- **Environnement** : Python 3.11, Ubuntu latest
- **Durée** : ~3 minutes
Badges
~~~~~~
.. image:: https://img.shields.io/badge/tests-160%20passed-success
:alt: Tests Status
.. image:: https://img.shields.io/badge/coverage-49%25-yellow
:alt: Coverage
Amélioration Continue
---------------------
Modules Prioritaires
~~~~~~~~~~~~~~~~~~~~
Les modules **Core** étant déjà excellemment testés (92-100%), les efforts futurs devraient se concentrer sur :
1. **InteractionsAnalyzer** : Améliorer de 61% à 80%
- Tester les méthodes de preprocessing non couvertes
- Ajouter des tests pour les cas limites
2. **Pages Streamlit** : Tests d'intégration
- Mocker Streamlit pour tester la logique métier
- Tests end-to-end avec Selenium/Playwright
Bonnes Pratiques
~~~~~~~~~~~~~~~~
- ✅ Tous les nouveaux modules Core doivent avoir **>90% de couverture**
- ✅ Les bugs doivent d'abord être reproduits par un test (TDD)
- ✅ Les tests doivent être rapides (<5 secondes pour la suite complète)
- ✅ Utiliser des fixtures pytest pour partager les données de test
- ✅ Mocker les dépendances externes (fichiers, API, etc.)
Références
----------
- `pytest Documentation `_
- `pytest-cov Documentation `_
- `Coverage.py `_