Files
company-ai-platform/tests/conftest.py
JiuContinent eb8267ed18 ```
feat(feishu): 添加飞书入站事件inbox和混合数据库协调功能

- 实现飞书入站事件持久化inbox机制,支持状态管理、租约锁定和重试退避
- 添加混合数据库基线协调工具,确保平台PostgreSQL结构安全对齐
- 增加运行组件心跳检测和readiness就绪检查机制
- 实现app_ticket事件的安全轮换和验证处理
- 添加生产环境运行编排和fail-closed安全机制
- 支持webhook快速确认和长连接独立进程处理
- 完善个人数据擦除时的待处理事件清理功能
```
2026-07-27 17:14:37 +08:00

62 lines
2.0 KiB
Python

import os
import sys
import tempfile
from pathlib import Path
_database_file = tempfile.NamedTemporaryFile(
prefix="company-ai-platform-tests-",
suffix=".db",
delete=False,
)
_database_file.close()
_database_path = Path(_database_file.name)
# This module is loaded before test modules are imported. Keep every suite run isolated
# from a developer's local .env, database, queues, and external AI/Feishu credentials.
os.environ.update(
{
"COMPANY_AI_DISABLE_DOTENV": "true",
"APP_ENV": "test",
"DATABASE_URL": f"sqlite:///{_database_path.as_posix()}",
"LEGACY_DATABASE_URL": "",
"LEGACY_ALLOWED_QUERIES": "{}",
"LEGACY_PROJECT_QUERY": "",
"LEGACY_TASK_QUERY": "",
"API_KEY": "test-key",
"API_KEYS": "[]",
"AUDIT_API_KEY": "audit-key",
"AUDIT_API_KEYS": "[]",
"AUDIT_API_ACTOR": "audit-manager",
"MODEL_PROVIDER": "noop",
"DIRECT_LLM_API_KEY": "",
"HERMES_API_KEY": "",
"OPENCLAW_API_KEY": "",
"OPENCLAW_GATEWAY_TOKEN": "",
"FEISHU_APP_ID": "",
"FEISHU_APP_SECRET": "",
"FEISHU_ENCRYPT_KEY": "",
"FEISHU_DEFAULT_CHAT_ID": "",
"FEISHU_VERIFICATION_TOKEN": "test-feishu-token",
"FEISHU_EVENT_TRANSPORT": "webhook",
"FEISHU_ADMIN_IDENTITIES": "",
"FEISHU_USER_FEATURES_ENABLED": "false",
"MARKET_DATA_TOKEN": "",
"SCHEDULER_ENABLED": "false",
"TASK_QUEUE_ENABLED": "false",
"TASK_QUEUE_ALWAYS_EAGER": "false",
"LEGACY_SYNC_ENABLED": "false",
}
)
def pytest_sessionfinish() -> None:
"""Remove the suite database after every test module has finished."""
database_module = sys.modules.get("app.core.database.session")
if database_module is not None:
database_module.engine.dispose()
if database_module.legacy_engine is not None:
database_module.legacy_engine.dispose()
_database_path.unlink(missing_ok=True)