Spaces:
Sleeping
Sleeping
| import os | |
| import sys | |
| from fastapi.testclient import TestClient | |
| # Ajouter la racine du projet au PYTHONPATH | |
| sys.path.append(os.path.dirname(os.path.dirname(__file__))) | |
| from main_api import app | |
| client = TestClient(app) | |
| def test_health_check(): | |
| response = client.get("/health") | |
| assert response.status_code == 200 | |
| data = response.json() | |
| assert data["status"] in ("healthy", "unhealthy") | |
| assert "modele" in data | |
| assert "scaler" in data | |
| def test_test_prediction_ok_and_has_fields(): | |
| response = client.post("/test-prediction") | |
| assert response.status_code == 200 | |
| data = response.json() | |
| for field in [ | |
| "prediction", | |
| "probabilite_abandon", | |
| "seuil_applique", | |
| "confiance_modele", | |
| "recommandation", | |
| "details", | |
| ]: | |
| assert field in data | |
| for field in ["prob_rester", "prob_partir", "satisfaction_moyenne"]: | |
| assert field in data["details"] | |
| from main_api import GenreEnum, EtatCivilEnum, DepartementEnum, \ | |
| DomaineEtudeEnum, FrequenceDeplacementEnum | |
| def build_payload(**overrides): | |
| base = dict( | |
| age=35, | |
| genre=GenreEnum.masculin.value, | |
| etat_civil=EtatCivilEnum.celibataire.value, | |
| salaire=5000, | |
| distance=5, | |
| departement=DepartementEnum.consulting.value, | |
| domaine_etude=DomaineEtudeEnum.transformation_digitale.value, | |
| niveau_hierarchique=2, | |
| poste_freq_deplacement=FrequenceDeplacementEnum.modere.value, | |
| emplois_precedents=3, | |
| experience_totale=8, | |
| annees_entreprise=5, | |
| annees_poste=2, | |
| annees_derniere_promotion=1, | |
| annees_responsable_actuel=3, | |
| heures_semaine=40, | |
| heures_supplementaires=False, | |
| employes_supervision=0, | |
| evaluation_precedente=3, | |
| evaluation_actuelle=3, | |
| satisfaction_environnement=3, | |
| satisfaction_travail=3, | |
| satisfaction_equipe=3, | |
| satisfaction_balance=3, | |
| augmentation_salaire=15, | |
| participation_pee=1, | |
| formations_completees=2, | |
| ) | |
| base.update(overrides) | |
| return base | |
| def test_predict_single_valid_employee(): | |
| payload = build_payload() | |
| response = client.post("/predict", json=payload) | |
| assert response.status_code == 200 | |
| data = response.json() | |
| assert data["prediction"] in ("Risque Élevé", "Risque Faible") | |
| assert 0 <= data["probabilite_abandon"] <= 100 | |
| def test_predict_missing_field_returns_422(): | |
| payload = build_payload() | |
| payload.pop("age") | |
| response = client.post("/predict", json=payload) | |
| assert response.status_code == 422 | |