from pathlib import Path from app.services.project_activity import ProjectActivityService def test_activity_service_appends_and_lists_newest_first(tmp_path): service = ProjectActivityService(root=str(tmp_path)) first = service.record("p1", "paper_added", "Added paper", status="running", metadata={"file": "a.pdf"}) second = service.record("p1", "memory_flush", "Project memory deepened") rows = service.list("p1") assert [row.event_id for row in rows] == [second.event_id, first.event_id] assert rows[0].event_type == "memory_flush" assert rows[1].metadata == {"file": "a.pdf"} assert Path(tmp_path / "p1.jsonl").exists() def test_activity_service_token_usage_helper(tmp_path): service = ProjectActivityService(root=str(tmp_path)) service.record_llm_usage( project_id="p1", operation="structured_complete", tokens=120, elapsed_seconds=0.5, model="gemma-4-31b", ) row = service.list("p1")[0] assert row.event_type == "llm_usage" assert row.metadata["tokens"] == 120 assert row.metadata["tokens_per_second"] == 240.0