import re import pytest from app import db from app.api import reset_rate_limiter from app.models import TimeSlot, WorkEntry, WorkplacePresenceEvent TOKEN = "test-api-token" URL = "/api/v1/workplace-presence" @pytest.fixture(autouse=True) def api_state(monkeypatch): monkeypatch.setenv("WORKLOG_API_TOKEN", TOKEN) reset_rate_limiter() yield reset_rate_limiter() def post(client, payload, **headers): return client.post(URL, json=payload, headers={"Authorization": f"Bearer {TOKEN}", **headers}) def test_arrival_and_departure_create_expected_records(client, app): arrival = post( client, {"event": "arrival", "occurred_at": "2026-08-13T08:00:00+02:00", "idempotency_key": "a"}, ) assert arrival.status_code == 201 assert arrival.json["status"] == "created" assert arrival.json["time_slot_id"] is None departure = post( client, {"event": "departure", "occurred_at": "2026-08-13T17:00:00+02:00", "idempotency_key": "d"}, ) assert departure.status_code == 200 assert departure.json["time_slot_id"] is not None with app.app_context(): assert db.session.query(TimeSlot).count() == 1 def test_arrival_entry_can_be_fully_edited_from_web_form(client, app): arrival = post( client, { "event": "arrival", "occurred_at": "2026-08-13T08:00:00+02:00", "idempotency_key": "web-edit-arrival", }, ) assert arrival.status_code == 201 entry_id = arrival.json["entry_id"] form = client.get(f"/entries/{entry_id}/edit") assert form.status_code == 200 assert "Véhicule à moteur seul" in form.text assert re.search( r'