from bincio.extract.writer import make_activity_id, _slugify from bincio.extract.models import ParsedActivity, DataPoint from datetime import datetime, timezone def _dummy_activity(title=None): ts = datetime(2024, 6, 1, 7, 30, 12, tzinfo=timezone.utc) return ParsedActivity( points=[DataPoint(timestamp=ts)], sport="cycling", started_at=ts, source_file="test.fit", source_hash="sha256:abc", title=title, ) def test_id_with_title(): act = _dummy_activity("Morning Ride") aid = make_activity_id(act) assert aid.startswith("2024-06-01T") assert "morning-ride" in aid def test_id_without_title(): act = _dummy_activity() aid = make_activity_id(act) assert "2024-06-01T" in aid # No trailing dash assert not aid.endswith("-") def test_slugify(): assert _slugify("Morning Ride!") == "morning-ride" assert _slugify(" Vélo ") == "velo" # é → e via NFKD + ASCII assert _slugify("") == ""