94 lines
2.7 KiB
Python
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 "Tableau 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
|