62 lines
2.1 KiB
Python
62 lines
2.1 KiB
Python
"""Phase 15 访问日志测试。"""
|
|
|
|
from fastapi.testclient import TestClient
|
|
|
|
from app.main import app
|
|
|
|
|
|
def _client() -> TestClient:
|
|
return TestClient(app, raise_server_exceptions=False)
|
|
|
|
|
|
def test_access_log_recorded() -> None:
|
|
"""访问公共页面后应有访问日志。"""
|
|
with _client() as client:
|
|
# 注册+创建知识库
|
|
client.post("/api/auth/register", json={"username": "log_user", "email": "log@example.com", "password": "password123"})
|
|
resp = client.post("/api/knowledge-bases", json={"name": "Log Test"})
|
|
kb_id = resp.json()["id"]
|
|
|
|
# 获取 AI 链接
|
|
resp = client.get(f"/api/knowledge-bases/{kb_id}/link")
|
|
token = resp.json()["token"]
|
|
|
|
# 访问公共页面
|
|
client.get(f"/k/{token}")
|
|
client.get(f"/k/{token}.json")
|
|
|
|
# 检查访问日志
|
|
from app.core.db import get_session_factory
|
|
from sqlalchemy import text
|
|
|
|
factory = get_session_factory()
|
|
with factory() as session:
|
|
result = session.execute(text("SELECT COUNT(*) FROM access_logs WHERE knowledge_base_id = :kb_id"), {"kb_id": kb_id})
|
|
count = result.scalar()
|
|
assert count >= 2
|
|
|
|
|
|
def test_access_log_with_kb() -> None:
|
|
"""访问知识库首页应记录访问日志。"""
|
|
with _client() as client:
|
|
client.post("/api/auth/register", json={"username": "log_doc", "email": "log_doc@example.com", "password": "password123"})
|
|
resp = client.post("/api/knowledge-bases", json={"name": "Log Test"})
|
|
kb_id = resp.json()["id"]
|
|
|
|
# 获取 AI 链接
|
|
resp = client.get(f"/api/knowledge-bases/{kb_id}/link")
|
|
token = resp.json()["token"]
|
|
|
|
# 访问公共页面
|
|
client.get(f"/k/{token}")
|
|
|
|
# 检查访问日志
|
|
from app.core.db import get_session_factory
|
|
from sqlalchemy import text
|
|
|
|
factory = get_session_factory()
|
|
with factory() as session:
|
|
result = session.execute(text("SELECT COUNT(*) FROM access_logs WHERE knowledge_base_id = :kb_id"), {"kb_id": kb_id})
|
|
count = result.scalar()
|
|
assert count >= 1
|