优化情报分栏和日报展示

This commit is contained in:
Codex
2026-07-08 23:39:41 +08:00
parent 88e1cf4b7a
commit 8e15211f07
16 changed files with 371 additions and 93 deletions
+82 -1
View File
@@ -1,6 +1,13 @@
from datetime import datetime
from fastapi.testclient import TestClient
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.pool import StaticPool
from app.core.config import get_settings
from app.db.models import AgentRun, Base, Signal
from app.db.session import get_db
from app.main import create_app
@@ -27,7 +34,9 @@ def test_home_page_returns_dashboard_shell(monkeypatch) -> None:
assert response.status_code == 200
assert "SignalScout" in response.text
assert "今日 AI 情报" in response.text
assert "今日 AI 信号" in response.text
assert "renderMarkdownReport" in response.text
assert "自动记录" not in response.text
assert "采集今日情报" not in response.text
@@ -42,3 +51,75 @@ def test_manual_agent_run_endpoint_is_not_exposed(monkeypatch) -> None:
assert response.status_code == 404
assert stream_response.status_code == 404
def test_dashboard_returns_news_and_github_signals_separately(monkeypatch) -> None:
# 仪表盘接口直接返回分组后的业务数据,前端不再用标题或来源名自行猜测分类。
monkeypatch.setenv("SIGNALSCOUT_ENV", "test")
get_settings.cache_clear()
engine = create_engine(
"sqlite:///:memory:",
connect_args={"check_same_thread": False},
poolclass=StaticPool,
future=True,
)
TestingSessionLocal = sessionmaker(bind=engine, autoflush=False, autocommit=False, future=True)
Base.metadata.create_all(engine)
with TestingSessionLocal() as session:
run = AgentRun(status="completed", started_at=datetime(2026, 7, 8, 8, 0), request_payload={})
session.add(run)
session.flush()
session.add_all(
[
Signal(
run_id=run.id,
source_type="news",
topic="AI 新闻",
title="New model release",
summary="模型发布动态。",
source_url="https://example.com/news",
source_url_hash="news-hash",
source_name="Example News",
published_at=datetime(2026, 7, 8, 9, 0),
importance=4,
entities=["Example"],
),
Signal(
run_id=run.id,
source_type="github",
topic="GitHub 热门项目",
title="example/agent-kit",
summary="开源项目动态。",
source_url="https://github.com/example/agent-kit",
source_url_hash="github-hash",
source_name="GitHub",
published_at=datetime(2026, 7, 8, 10, 0),
importance=5,
entities=["example/agent-kit"],
),
]
)
session.commit()
def override_get_db():
# 测试依赖把接口请求限制在内存库里,避免触碰开发数据库。
db = TestingSessionLocal()
try:
yield db
finally:
db.close()
app = create_app()
app.dependency_overrides[get_db] = override_get_db
with TestClient(app) as client:
dashboard_response = client.get("/dashboard")
github_response = client.get("/signals", params={"source_type": "github"})
get_settings.cache_clear()
dashboard = dashboard_response.json()
assert dashboard_response.status_code == 200
assert [item["source_type"] for item in dashboard["news_signals"]] == ["news"]
assert [item["source_type"] for item in dashboard["github_signals"]] == ["github"]
assert github_response.status_code == 200
assert [item["title"] for item in github_response.json()] == ["example/agent-kit"]