from app.models import WorkEntry, TimeSlot from app import db from datetime import date, time import sqlalchemy as sa def test_dashboard_empty(client): response = client.get("/") assert response.status_code == 200 assert "Journal de bord" in response.text def test_entry_form_get(client): response = client.get("/entries/new") assert response.status_code == 200 assert "Nouvelle" in response.text def test_create_entry(client, app): response = client.post("/entries/new", data={ "date": "2025-06-02", "day_type": "WORK", "journey_profile_id": "moteur_seul", "motor_vehicle_id": "familiale", "start_time": ["09:00"], "end_time": ["17:45"], "comment": "", }, follow_redirects=True) assert response.status_code == 200 with app.app_context(): entry = db.session.scalar( sa.select(WorkEntry).where(WorkEntry.date == date(2025, 6, 2)) ) assert entry is not None assert entry.day_type == "WORK" assert len(entry.time_slots) == 1 assert entry.motor_vehicle_id == "familiale" def test_entry_list(client, app): with app.app_context(): entry = WorkEntry(date=date(2025, 6, 3), day_type="TT") db.session.add(entry) db.session.commit() response = client.get("/entries/") assert response.status_code == 200 assert "Télétravail" in response.text def test_reports_page(client): response = client.get("/reports/") assert response.status_code == 200 assert "Rapports" in response.text def test_delete_entry(client, app): with app.app_context(): entry = WorkEntry(date=date(2025, 6, 4), day_type="RTT") db.session.add(entry) db.session.commit() entry_id = entry.id response = client.post(f"/entries/{entry_id}/delete", follow_redirects=True) assert response.status_code == 200 with app.app_context(): deleted = db.session.scalar( sa.select(WorkEntry).where(WorkEntry.id == entry_id) ) assert deleted is None def test_create_entry_velo_no_motor_vehicle(client, app): """Un trajet vélo seul ne doit pas enregistrer de motor_vehicle_id.""" response = client.post("/entries/new", data={ "date": "2025-06-10", "day_type": "WORK", "journey_profile_id": "velo_seul", "motor_vehicle_id": "", "start_time": ["08:30"], "end_time": ["17:00"], "comment": "", }, follow_redirects=True) assert response.status_code == 200 with app.app_context(): entry = db.session.scalar( sa.select(WorkEntry).where(WorkEntry.date == date(2025, 6, 10)) ) assert entry is not None assert entry.motor_vehicle_id is None