Scan registered repos for TODO.md files unchanged longer than a configurable threshold (default 6 days). Feeds activity-core stale-review.
64 lines
No EOL
2 KiB
Python
64 lines
No EOL
2 KiB
Python
from __future__ import annotations
|
|
|
|
import time
|
|
|
|
import pytest
|
|
|
|
|
|
async def _create_domain(client, slug="tododom"):
|
|
r = await client.post("/domains/", json={"slug": slug, "name": "Todo Domain"})
|
|
assert r.status_code == 201, r.text
|
|
return r.json()
|
|
|
|
|
|
async def _create_repo(client, domain_slug, local_path, slug="todo-repo"):
|
|
r = await client.post("/repos/", json={
|
|
"slug": slug,
|
|
"name": "Todo Repo",
|
|
"domain_slug": domain_slug,
|
|
"local_path": str(local_path),
|
|
"remote_url": f"https://example.invalid/{slug}.git",
|
|
})
|
|
assert r.status_code == 201, r.text
|
|
return r.json()
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_todo_md_staleness_flags_unchanged_file(client, tmp_path):
|
|
domain = await _create_domain(client)
|
|
repo_root = tmp_path / "stale-repo"
|
|
repo_root.mkdir()
|
|
todo = repo_root / "TODO.md"
|
|
todo.write_text("# TODO\n\n- [ ] item\n", encoding="utf-8")
|
|
old = time.time() - (8 * 24 * 60 * 60)
|
|
import os
|
|
os.utime(todo, (old, old))
|
|
|
|
await _create_repo(client, domain["slug"], repo_root, slug="stale-repo")
|
|
|
|
r = await client.get("/repos/todo-md-staleness?stale_days=6")
|
|
assert r.status_code == 200, r.text
|
|
payload = r.json()
|
|
assert payload["stale_count"] == 1
|
|
assert payload["repos"][0]["repo_slug"] == "stale-repo"
|
|
assert payload["repos"][0]["age_days"] >= 6
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_todo_md_staleness_ignores_missing_and_fresh(client, tmp_path):
|
|
domain = await _create_domain(client)
|
|
|
|
fresh_root = tmp_path / "fresh-repo"
|
|
fresh_root.mkdir()
|
|
(fresh_root / "TODO.md").write_text("# TODO\n", encoding="utf-8")
|
|
await _create_repo(client, domain["slug"], fresh_root, slug="fresh-repo")
|
|
|
|
bare_root = tmp_path / "bare-repo"
|
|
bare_root.mkdir()
|
|
await _create_repo(client, domain["slug"], bare_root, slug="bare-repo")
|
|
|
|
r = await client.get("/repos/todo-md-staleness?stale_days=6")
|
|
assert r.status_code == 200, r.text
|
|
payload = r.json()
|
|
assert payload["stale_count"] == 0
|
|
assert payload["total_with_todo"] == 1 |