62 lines
2.6 KiB
Python
62 lines
2.6 KiB
Python
import json
|
|
from datetime import datetime, timezone
|
|
from pathlib import Path
|
|
|
|
from services.codebase_modularization_performance_service import (
|
|
ROOT,
|
|
_iter_python_files,
|
|
build_codebase_inventory,
|
|
write_codebase_inventory_receipt,
|
|
)
|
|
|
|
|
|
def test_inventory_generates_complete_prioritized_work_items():
|
|
result = build_codebase_inventory(now=datetime(2026, 7, 11, tzinfo=timezone.utc))
|
|
|
|
summary = result["summary"]
|
|
assert summary["production_python_module_count"] > 0
|
|
assert summary["large_python_module_count"] > 0
|
|
assert summary["runtime_control_passed"] == summary["runtime_control_total"]
|
|
assert summary["runtime_closure"] == "partial"
|
|
assert 0 < summary["program_completion_percent"] < 100
|
|
|
|
python_paths = {item["path"] for item in result["python_work_items"]}
|
|
frontend_paths = {item["path"] for item in result["frontend_work_items"]}
|
|
assert "services/pchome_mapping_backlog_service.py" in python_paths
|
|
assert "routes/openclaw_bot_routes.py" in python_paths
|
|
assert "templates/ai_intelligence.html" in frontend_paths
|
|
assert all(item["work_item_id"] for item in result["python_work_items"])
|
|
by_path = {item["path"]: item for item in result["python_work_items"]}
|
|
assert by_path["routes/openclaw_bot_routes.py"]["status"] == "in_progress"
|
|
assert by_path["services/pchome_mapping_backlog_service.py"]["status"] == "not_started"
|
|
assert summary["work_item_status_counts"]["in_progress"] == 3
|
|
assert sum(summary["work_item_status_counts"].values()) == (
|
|
summary["large_python_module_count"] + summary["large_frontend_asset_count"]
|
|
)
|
|
|
|
|
|
def test_inventory_receipt_write_is_atomic_and_readable(tmp_path):
|
|
result = build_codebase_inventory(now=datetime(2026, 7, 11, tzinfo=timezone.utc))
|
|
target = tmp_path / "latest.json"
|
|
|
|
written = write_codebase_inventory_receipt(result, path=target)
|
|
|
|
assert written == target
|
|
assert json.loads(target.read_text(encoding="utf-8"))["schema"] == result["schema"]
|
|
assert not target.with_suffix(".json.tmp").exists()
|
|
|
|
|
|
def test_production_inventory_excludes_docker_build_ignored_sources():
|
|
paths = {path.relative_to(ROOT).as_posix() for path in _iter_python_files(ROOT)}
|
|
|
|
assert "data/__init__.py" not in paths
|
|
assert "logs/__init__.py" not in paths
|
|
assert not any(path.startswith(".claude/") for path in paths)
|
|
|
|
|
|
def test_scheduler_owns_daily_inventory_runtime():
|
|
source = (Path(__file__).resolve().parents[1] / "run_scheduler.py").read_text(encoding="utf-8")
|
|
|
|
assert 'day.at("04:15").do(run_codebase_modularization_performance_task)' in source
|
|
assert '_save_stats("codebase_modularization_performance", payload)' in source
|