feat: restore source parity and harden agent runtime

This commit is contained in:
2026-06-22 11:17:26 +08:00
parent e33f08277b
commit 0793eb82d6
596 changed files with 168879 additions and 290 deletions
@@ -0,0 +1,74 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
报表模块端到端验收自检(无需启动浏览器)。
运行:cd backend-fastapi && python -m online_dev.report_manager.acceptance_e2e
"""
from __future__ import annotations
import sys
from pathlib import Path
from online_dev.report_manager.engine.test_golden import test_all_golden_fixtures
def _check_routes_registered() -> None:
root = Path(__file__).parent
sources = [
(root / "api.py").read_text(encoding="utf-8"),
(root / "data_api.py").read_text(encoding="utf-8"),
]
blob = "\n".join(sources)
required = [
'"/list"',
'"/save"',
'"/{version_id}/preview"',
'"/preview-template"',
'"/export-excel/template"',
'"/export-pdf/template"',
'"/import-excel"',
'"/query-list/{template_id}"',
'"/{template_id}/publish"',
]
missing = [p for p in required if p not in blob]
if missing:
raise AssertionError(f"missing route decorators for: {missing}")
def _check_jnpf_db_fixtures() -> None:
fixtures_dir = Path(__file__).parent / "engine" / "fixtures"
names = [
"golden_jnpf_db_user_list.json",
"golden_jnpf_db_user_group.json",
"golden_jnpf_db_user_matrix.json",
]
for name in names:
path = fixtures_dir / name
if not path.is_file():
raise AssertionError(f"missing JNPF DB fixture: {name}")
def main() -> int:
print("1/3 route registration …")
_check_routes_registered()
print(" ok")
print("2/3 JNPF DB golden fixtures …")
_check_jnpf_db_fixtures()
print(" ok (3 fixtures)")
print("3/3 golden transform regression …")
test_all_golden_fixtures()
count = len(list((Path(__file__).parent / "engine" / "fixtures").glob("golden_*.json")))
print(f" ok ({count} fixtures)")
print("\nManual E2E (browser):")
print(" - 新建报表 → 设计 → 保存 → 发布版本")
print(" - 发布菜单 → 运行时填写查询 → 预览")
print(" - Excel / PDF 导出、浏览器打印(>100 张图告警)")
return 0
if __name__ == "__main__":
sys.exit(main())