Files
tableau-de-bord/tests/test_routes.py

94 lines
2.7 KiB
Python

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 "TT" 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