Spaces:
Sleeping
Sleeping
Download tests/test_db.py from rriviere/attrition-api-dev: direct link, hf CLI and curl.
- Browser
- Download file 2.72 kB
-
https://huggingface.co/spaces/rriviere/attrition-api-dev/resolve/main/tests/test_db.py
- Command line
-
hf download hf://spaces/rriviere/attrition-api-dev/tests/test_db.py
-
curl -L -o test_db.py https://huggingface.co/spaces/rriviere/attrition-api-dev/resolve/main/tests/test_db.py
2.72 kB
| import pytest | |
| from sqlalchemy import create_engine | |
| from sqlalchemy.orm import sessionmaker | |
| from app.db.models import Base, Prediction | |
| from app.db.crud import log_prediction | |
| from app.schemas.prediction import PredictionInput, PredictionOutput | |
| VALID_INPUT = PredictionInput( | |
| age=35, genre="M", statut_marital="Marié(e)", poste="Consultant", | |
| domaine_etude="Infra & Cloud", niveau_education=3, | |
| departement="Ventes", niveau_hierarchique_poste=2, | |
| nombre_experiences_precedentes=2, annee_experience_totale=10, | |
| annees_dans_l_entreprise=5, annees_dans_le_poste_actuel=2, | |
| annees_sous_responsable_actuel=3, annees_depuis_la_derniere_promotion=1, | |
| note_evaluation_actuelle=3, note_evaluation_precedente=3, | |
| augmentation_salaire_precedente=15, nb_formations_suivies=2, | |
| nombre_participation_pee=1, satisfaction_employee_environnement=3, | |
| satisfaction_employee_nature_travail=4, satisfaction_employee_equipe=3, | |
| satisfaction_employee_equilibre_pro_perso=2, | |
| heure_supplementaires="Non", frequence_deplacement="Occasionnel", | |
| distance_domicile_travail=10, revenu_mensuel=5000, | |
| ) | |
| VALID_OUTPUT = PredictionOutput(prediction=0, label="Reste", probabilite=0.30) | |
| def db_session(): | |
| engine = create_engine("sqlite:///:memory:") | |
| Base.metadata.create_all(engine) | |
| Session = sessionmaker(bind=engine) | |
| session = Session() | |
| yield session | |
| session.close() | |
| Base.metadata.drop_all(engine) | |
| def test_log_prediction_creates_record(db_session): | |
| record = log_prediction(db_session, VALID_INPUT, VALID_OUTPUT) | |
| assert record.id is not None | |
| assert record.prediction == 0 | |
| assert record.probabilite == 0.30 | |
| def test_log_prediction_is_retrievable(db_session): | |
| log_prediction(db_session, VALID_INPUT, VALID_OUTPUT) | |
| result = db_session.query(Prediction).first() | |
| assert result is not None | |
| assert result.age == 35 | |
| assert result.poste == "Consultant" | |
| assert result.prediction == 0 | |
| def test_delete_prediction(db_session): | |
| record = log_prediction(db_session, VALID_INPUT, VALID_OUTPUT) | |
| record_id = record.id | |
| db_session.delete(record) | |
| db_session.commit() | |
| result = db_session.get(Prediction, record_id) | |
| assert result is None | |
| def test_missing_required_field_raises_integrity_error(db_session): | |
| from sqlalchemy.exc import IntegrityError | |
| # On crée un Prediction en omettant le champ 'prediction' → NULL interdit | |
| invalid_record = Prediction( | |
| **VALID_INPUT.model_dump(), | |
| probabilite=0.30, | |
| # prediction= intentionnellement absent → None → violation NOT NULL | |
| ) | |
| db_session.add(invalid_record) | |
| with pytest.raises(IntegrityError): | |
| db_session.commit() | |