feat: 新增预算费控模型与报销审批流引擎
后端新增预算费控服务和报销单审批流模块,引入申请人费用画像 算法,优化知识库 RAG 运行时和同步逻辑,完善报销单工作流常 量和明细同步,更新差旅报销规则电子表格,前端新增预算分析 组件和数字员工模型,完善审批对话框和洞察面板交互,优化侧 边栏和顶栏样式,补充单元测试。
This commit is contained in:
65
server/tests/test_knowledge_sync.py
Normal file
65
server/tests/test_knowledge_sync.py
Normal file
@@ -0,0 +1,65 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from sqlalchemy import create_engine
|
||||
from sqlalchemy.orm import Session, sessionmaker
|
||||
from sqlalchemy.pool import StaticPool
|
||||
|
||||
from app.api.deps import CurrentUserContext
|
||||
from app.db.base import Base
|
||||
from app.services.knowledge import KNOWLEDGE_INGEST_STATUS_INGESTED, KnowledgeService
|
||||
from app.services.knowledge_sync import KnowledgeSyncDispatchService
|
||||
|
||||
|
||||
def build_session() -> Session:
|
||||
engine = create_engine(
|
||||
"sqlite+pysqlite:///:memory:",
|
||||
connect_args={"check_same_thread": False},
|
||||
poolclass=StaticPool,
|
||||
)
|
||||
Base.metadata.create_all(bind=engine)
|
||||
session_factory = sessionmaker(bind=engine, autoflush=False, autocommit=False)
|
||||
return session_factory()
|
||||
|
||||
|
||||
def test_force_sync_queues_ingested_documents_and_creates_hermes_run(tmp_path, monkeypatch) -> None:
|
||||
submitted: list[dict[str, object]] = []
|
||||
user = CurrentUserContext(
|
||||
username="admin",
|
||||
name="管理员",
|
||||
role_codes=["manager"],
|
||||
is_admin=True,
|
||||
)
|
||||
|
||||
with build_session() as db:
|
||||
knowledge_service = KnowledgeService(storage_root=tmp_path, db=db)
|
||||
uploaded = knowledge_service.upload_document("报销制度", "demo.txt", b"hello", user)
|
||||
document_id = uploaded.id
|
||||
knowledge_service.set_document_ingest_statuses(
|
||||
[document_id],
|
||||
KNOWLEDGE_INGEST_STATUS_INGESTED,
|
||||
agent_run_id="run_previous",
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"app.services.knowledge_rag.KnowledgeRagService.get_document_status_map",
|
||||
lambda self, _document_ids: {},
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"app.services.knowledge_sync.knowledge_index_task_manager.submit_sync",
|
||||
lambda **kwargs: submitted.append(kwargs),
|
||||
)
|
||||
|
||||
dispatch_service = KnowledgeSyncDispatchService(db)
|
||||
dispatch_service.knowledge_service = knowledge_service
|
||||
|
||||
result = dispatch_service.queue_sync(
|
||||
current_user=user,
|
||||
folder=None,
|
||||
document_ids=[document_id],
|
||||
force=True,
|
||||
changed_only=True,
|
||||
)
|
||||
|
||||
assert result.agent_run_id.startswith("run_")
|
||||
assert document_id in result.document_ids
|
||||
assert submitted
|
||||
assert submitted[0]["agent_run_id"] == result.agent_run_id
|
||||
Reference in New Issue
Block a user