1
0

[gemini] feat: add coverage and duration strictness to pytest (#934) (#1140)

Co-authored-by: Google Gemini <gemini@hermes.local>
Co-committed-by: Google Gemini <gemini@hermes.local>
This commit is contained in:
2026-03-23 18:36:01 +00:00
committed by rockachopa
parent ed63877f75
commit 05e1196ea4
7 changed files with 60 additions and 32 deletions

View File

@@ -9,10 +9,8 @@ import json
from pathlib import Path
import pytest
import scripts.export_trajectories as et
# ── Fixtures ──────────────────────────────────────────────────────────────────
@@ -22,10 +20,30 @@ def simple_session(tmp_path: Path) -> Path:
logs_dir = tmp_path / "logs"
logs_dir.mkdir()
entries = [
{"type": "message", "role": "user", "content": "What time is it?", "timestamp": "2026-03-01T10:00:00"},
{"type": "message", "role": "timmy", "content": "It is 10:00 AM.", "timestamp": "2026-03-01T10:00:01"},
{"type": "message", "role": "user", "content": "Thanks!", "timestamp": "2026-03-01T10:00:05"},
{"type": "message", "role": "timmy", "content": "You're welcome!", "timestamp": "2026-03-01T10:00:06"},
{
"type": "message",
"role": "user",
"content": "What time is it?",
"timestamp": "2026-03-01T10:00:00",
},
{
"type": "message",
"role": "timmy",
"content": "It is 10:00 AM.",
"timestamp": "2026-03-01T10:00:01",
},
{
"type": "message",
"role": "user",
"content": "Thanks!",
"timestamp": "2026-03-01T10:00:05",
},
{
"type": "message",
"role": "timmy",
"content": "You're welcome!",
"timestamp": "2026-03-01T10:00:06",
},
]
session_file = logs_dir / "session_2026-03-01.jsonl"
session_file.write_text("\n".join(json.dumps(e) for e in entries) + "\n")
@@ -38,7 +56,12 @@ def tool_call_session(tmp_path: Path) -> Path:
logs_dir = tmp_path / "logs"
logs_dir.mkdir()
entries = [
{"type": "message", "role": "user", "content": "Read CLAUDE.md", "timestamp": "2026-03-01T10:00:00"},
{
"type": "message",
"role": "user",
"content": "Read CLAUDE.md",
"timestamp": "2026-03-01T10:00:00",
},
{
"type": "tool_call",
"tool": "read_file",
@@ -46,7 +69,12 @@ def tool_call_session(tmp_path: Path) -> Path:
"result": "# CLAUDE.md content here",
"timestamp": "2026-03-01T10:00:01",
},
{"type": "message", "role": "timmy", "content": "Here is the content.", "timestamp": "2026-03-01T10:00:02"},
{
"type": "message",
"role": "timmy",
"content": "Here is the content.",
"timestamp": "2026-03-01T10:00:02",
},
]
session_file = logs_dir / "session_2026-03-01.jsonl"
session_file.write_text("\n".join(json.dumps(e) for e in entries) + "\n")
@@ -236,7 +264,7 @@ def test_export_training_data_writes_jsonl(simple_session: Path, tmp_path: Path)
count = et.export_training_data(logs_dir=simple_session, output_path=output)
assert count == 2
assert output.exists()
lines = [json.loads(l) for l in output.read_text().splitlines() if l.strip()]
lines = [json.loads(line) for line in output.read_text().splitlines() if line.strip()]
assert len(lines) == 2
for line in lines:
assert "messages" in line
@@ -270,16 +298,22 @@ def test_export_training_data_returns_zero_for_empty_logs(tmp_path: Path) -> Non
@pytest.mark.unit
def test_cli_missing_logs_dir(tmp_path: Path) -> None:
rc = et.main(["--logs-dir", str(tmp_path / "nonexistent"), "--output", str(tmp_path / "out.jsonl")])
rc = et.main(
["--logs-dir", str(tmp_path / "nonexistent"), "--output", str(tmp_path / "out.jsonl")]
)
assert rc == 1
@pytest.mark.unit
def test_cli_exports_and_returns_zero(simple_session: Path, tmp_path: Path) -> None:
output = tmp_path / "out.jsonl"
rc = et.main([
"--logs-dir", str(simple_session),
"--output", str(output),
])
rc = et.main(
[
"--logs-dir",
str(simple_session),
"--output",
str(output),
]
)
assert rc == 0
assert output.exists()