Le quota quotidien est désormais dérivé d'heures_semaine / jours_par_semaine
au lieu d'être saisi directement. Rétrocompatible avec les anciennes configs
qui utilisent encore heures_jour.
💘 Generated with Crush
Assisted-by: Crush:glm-5.2
39 lines
1.1 KiB
Python
39 lines
1.1 KiB
Python
"""Fixtures partagées pour les tests.
|
|
|
|
Freeze "today" pour des calculs déterministes ET installe un DATA_DIR
|
|
temporaire unique pour tout le process de test, afin que tous les modules
|
|
de tests (test_logs, test_security, ...) partagent le même stockage.
|
|
"""
|
|
import datetime as dt_module
|
|
import tempfile
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
import calcul
|
|
import models
|
|
|
|
# ── DATA_DIR unique pour tout le run ─────────────────────────────────────────
|
|
_TMP = Path(tempfile.mkdtemp())
|
|
models.DATA_DIR = _TMP
|
|
models.CONFIG_FILE = models.DATA_DIR / "config.json"
|
|
models.CONFIG_FILE.write_text('{"heures_semaine": 39.0, "jours_par_semaine": 5, "allowed_email_domain": "x.fr"}')
|
|
|
|
|
|
class FrozenDatetime(dt_module.datetime):
|
|
_frozen = dt_module.datetime(2026, 7, 17, 10, 30) # vendredi
|
|
|
|
@classmethod
|
|
def today(cls):
|
|
return cls._frozen
|
|
|
|
@classmethod
|
|
def now(cls, tz=None):
|
|
return cls._frozen
|
|
|
|
|
|
@pytest.fixture
|
|
def freeze_today(monkeypatch):
|
|
monkeypatch.setattr(calcul, "datetime", FrozenDatetime)
|
|
return FrozenDatetime._frozen
|