chore: fix python style violations
Co-authored-by: OpenAI/GPT-5.6-Terra <vibecoder@antoineve.me> Co-authored-by: OpenAI/GPT-5.6-Luna <vibecoder@antoineve.me> Co-authored-by: MiniMax/MiniMax-M3 <vibecoder@antoineve.me> Co-authored-by: DeepSeek/DeepSeek-v4-Flash <vibecoder@antoineve.me>
This commit is contained in:
@@ -1,11 +1,14 @@
|
||||
import pytest
|
||||
from app import create_app, db as _db
|
||||
|
||||
from app import create_app
|
||||
from app import db as _db
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def app(tmp_path):
|
||||
config_path = tmp_path / "config.toml"
|
||||
config_path.write_text("""
|
||||
config_path.write_text(
|
||||
"""
|
||||
[vehicles.citadine]
|
||||
name = "Citadine électrique"
|
||||
fuel = "electric"
|
||||
@@ -59,7 +62,9 @@ forfait = 699
|
||||
km_max = 0
|
||||
taux = 0.364
|
||||
forfait = 0
|
||||
""", encoding="utf-8")
|
||||
""",
|
||||
encoding="utf-8",
|
||||
)
|
||||
|
||||
application = create_app(config_path=str(config_path))
|
||||
application.config["TESTING"] = True
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
def test_get_vehicles_returns_configured_vehicles(app):
|
||||
with app.app_context():
|
||||
from app.config_loader import get_vehicles
|
||||
|
||||
vehicles = get_vehicles()
|
||||
assert "familiale" in vehicles
|
||||
assert vehicles["familiale"]["co2_per_km"] == 142
|
||||
@@ -9,6 +10,7 @@ def test_get_vehicles_returns_configured_vehicles(app):
|
||||
def test_get_motor_vehicles_excludes_velo(app):
|
||||
with app.app_context():
|
||||
from app.config_loader import get_motor_vehicles
|
||||
|
||||
motor = get_motor_vehicles()
|
||||
assert "familiale" in motor
|
||||
assert "citadine" in motor
|
||||
@@ -19,6 +21,7 @@ def test_get_motor_vehicles_excludes_velo(app):
|
||||
def test_get_journeys_returns_profiles(app):
|
||||
with app.app_context():
|
||||
from app.config_loader import get_journeys
|
||||
|
||||
journeys = get_journeys()
|
||||
assert "moteur_seul" in journeys
|
||||
assert journeys["moteur_seul"]["distances"]["moteur"] == 25
|
||||
@@ -27,6 +30,7 @@ def test_get_journeys_returns_profiles(app):
|
||||
def test_journey_has_motor_true(app):
|
||||
with app.app_context():
|
||||
from app.config_loader import journey_has_motor
|
||||
|
||||
assert journey_has_motor("moteur_seul") is True
|
||||
assert journey_has_motor("moteur_velo") is True
|
||||
|
||||
@@ -34,6 +38,7 @@ def test_journey_has_motor_true(app):
|
||||
def test_journey_has_motor_false(app):
|
||||
with app.app_context():
|
||||
from app.config_loader import journey_has_motor
|
||||
|
||||
assert journey_has_motor("velo_seul") is False
|
||||
assert journey_has_motor(None) is False
|
||||
|
||||
@@ -41,6 +46,7 @@ def test_journey_has_motor_false(app):
|
||||
def test_get_bareme_returns_tranches(app):
|
||||
with app.app_context():
|
||||
from app.config_loader import get_bareme
|
||||
|
||||
tranches = get_bareme(2025, 5)
|
||||
assert len(tranches) == 3
|
||||
assert tranches[0]["taux"] == 0.548
|
||||
@@ -49,6 +55,7 @@ def test_get_bareme_returns_tranches(app):
|
||||
def test_day_types_without_journey(app):
|
||||
with app.app_context():
|
||||
from app.config_loader import day_types_without_journey
|
||||
|
||||
types = day_types_without_journey()
|
||||
assert "TT" in types
|
||||
assert "WORK" not in types
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
from app.business.leave_calc import compute_leave_used, get_or_create_balance
|
||||
from app.models import WorkEntry, LeaveBalance
|
||||
from app import db
|
||||
from datetime import date
|
||||
import sqlalchemy as sa
|
||||
|
||||
from app import db
|
||||
from app.business.leave_calc import compute_leave_used, get_or_create_balance
|
||||
from app.models import LeaveBalance, WorkEntry
|
||||
|
||||
|
||||
def test_compute_leave_used_conges(app):
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
from app.models import WorkEntry, TimeSlot
|
||||
from app import db
|
||||
from datetime import date, time
|
||||
from datetime import date
|
||||
|
||||
import sqlalchemy as sa
|
||||
|
||||
from app import db
|
||||
from app.models import WorkEntry
|
||||
|
||||
|
||||
def test_dashboard_empty(client):
|
||||
response = client.get("/")
|
||||
@@ -17,21 +19,23 @@ def test_entry_form_get(client):
|
||||
|
||||
|
||||
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)
|
||||
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))
|
||||
)
|
||||
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
|
||||
@@ -66,29 +70,29 @@ def test_delete_entry(client, app):
|
||||
assert response.status_code == 200
|
||||
|
||||
with app.app_context():
|
||||
deleted = db.session.scalar(
|
||||
sa.select(WorkEntry).where(WorkEntry.id == entry_id)
|
||||
)
|
||||
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)
|
||||
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))
|
||||
)
|
||||
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
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from app.business.time_calc import (
|
||||
minutes_to_str,
|
||||
work_minutes_reference,
|
||||
week_balance_minutes,
|
||||
work_minutes_reference,
|
||||
)
|
||||
|
||||
|
||||
@@ -42,10 +42,11 @@ def test_week_balance_negative():
|
||||
assert week_balance_minutes(2200, 2325) == -125
|
||||
|
||||
|
||||
from app.business.time_calc import count_day_types
|
||||
from app.models import WorkEntry, TimeSlot
|
||||
from app.business.time_calc import monthly_stats
|
||||
from datetime import date, time as dtime
|
||||
from datetime import date
|
||||
from datetime import time as dtime
|
||||
|
||||
from app.business.time_calc import count_day_types, monthly_stats
|
||||
from app.models import TimeSlot, WorkEntry
|
||||
|
||||
|
||||
def test_count_day_types_basic():
|
||||
@@ -67,8 +68,10 @@ def _entry(d: date, *slots: tuple[str, str]) -> WorkEntry:
|
||||
"""Helper : crée un WorkEntry avec des TimeSlots."""
|
||||
entry = WorkEntry(date=d, day_type="WORK")
|
||||
entry.time_slots = [
|
||||
TimeSlot(start_time=dtime(*[int(x) for x in s.split(":")]),
|
||||
end_time=dtime(*[int(x) for x in e.split(":")]))
|
||||
TimeSlot(
|
||||
start_time=dtime(*[int(x) for x in s.split(":")]),
|
||||
end_time=dtime(*[int(x) for x in e.split(":")]),
|
||||
)
|
||||
for s, e in slots
|
||||
]
|
||||
return entry
|
||||
@@ -89,9 +92,9 @@ def test_monthly_stats_empty():
|
||||
def test_monthly_stats_median_daily_odd():
|
||||
# 420, 465, 510 → médiane = 465
|
||||
entries = [
|
||||
_entry(date(2025, 1, 6), ("9:00", "16:00")), # 420 min
|
||||
_entry(date(2025, 1, 7), ("9:00", "16:45")), # 465 min
|
||||
_entry(date(2025, 1, 8), ("9:00", "17:30")), # 510 min
|
||||
_entry(date(2025, 1, 6), ("9:00", "16:00")), # 420 min
|
||||
_entry(date(2025, 1, 7), ("9:00", "16:45")), # 465 min
|
||||
_entry(date(2025, 1, 8), ("9:00", "17:30")), # 510 min
|
||||
]
|
||||
result = monthly_stats(entries)
|
||||
assert result["median_daily_min"] == 465
|
||||
@@ -114,7 +117,7 @@ def test_monthly_stats_median_weekly():
|
||||
entries = [
|
||||
_entry(date(2025, 1, 6), ("9:00", "16:45")), # sem 2
|
||||
_entry(date(2025, 1, 7), ("9:00", "16:45")), # sem 2
|
||||
_entry(date(2025, 1, 13), ("9:00", "16:00")), # sem 3
|
||||
_entry(date(2025, 1, 13), ("9:00", "16:00")), # sem 3
|
||||
]
|
||||
result = monthly_stats(entries)
|
||||
assert result["median_weekly_min"] == 675
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from app.business.travel_calc import (
|
||||
compute_km_for_entry,
|
||||
compute_co2_grams,
|
||||
compute_frais_reels,
|
||||
compute_km_for_entry,
|
||||
)
|
||||
|
||||
VEHICLES = {
|
||||
@@ -17,15 +17,15 @@ JOURNEYS = {
|
||||
}
|
||||
|
||||
TRANCHES_CV3 = [
|
||||
{"km_max": 5000, "taux": 0.529, "forfait": 0},
|
||||
{"km_max": 5000, "taux": 0.529, "forfait": 0},
|
||||
{"km_max": 20000, "taux": 0.316, "forfait": 1065},
|
||||
{"km_max": 0, "taux": 0.370, "forfait": 0},
|
||||
{"km_max": 0, "taux": 0.370, "forfait": 0},
|
||||
]
|
||||
|
||||
TRANCHES_CV5 = [
|
||||
{"km_max": 5000, "taux": 0.636, "forfait": 0},
|
||||
{"km_max": 5000, "taux": 0.636, "forfait": 0},
|
||||
{"km_max": 20000, "taux": 0.357, "forfait": 1395},
|
||||
{"km_max": 0, "taux": 0.427, "forfait": 0},
|
||||
{"km_max": 0, "taux": 0.427, "forfait": 0},
|
||||
]
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user