refactor(tests): 技術債清零 — 移除 FakeRepo/FakeSession Mock DB 違規
Some checks failed
CD Pipeline / build-and-deploy (push) Failing after 35s
Some checks failed
CD Pipeline / build-and-deploy (push) Failing after 35s
## ai_router.py - 抽取 _aggregate_feedback_stats() 純函數,feedback_from_aider_events 呼叫它 ## aider_event_processor.py - _process_one 加 _session_factory=None DI 參數(預設 get_session_factory()) - 可注入測試 factory,不改既有生產邏輯 ## test_ai_router_feedback.py(完全重寫) - 移除 FakeRepo/FakeSession,改為直接測試 _aggregate_feedback_stats 純函數 - 新增 test_feedback_skips_missing_model 邊界條件 - DB 失敗降級行為 test 保留(只 patch get_session_factory,無 FakeRepo) ## test_aider_event_processor.py(完全重寫) - 移除 FakeRepo/FakeSession,改用真實 PostgreSQL(real_factory fixture) - Redis xack + IncidentEngine 保留 mock(外部 broker/AI 服務,符合例外) - 每個測試後 rollback,不污染 dev DB ## setup_test_schema.sql - 補入 aider_events_payload_gin GIN index(與 adr091 生產 migration 一致) ## integration/conftest.py - 補注解說明密碼名稱 awoooi_prod_2026 的歷史混淆 - 修正 assert 邏輯:檢查 DB 名稱而非 URL 字串,避免密碼含 prod 觸發誤判 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -119,8 +119,12 @@ class AiderEventProcessor:
|
||||
logger.exception("aider_processor_loop_error", error=str(e))
|
||||
await asyncio.sleep(1.0)
|
||||
|
||||
async def _process_one(self, stream_key: str, msg_id: Any, data: dict) -> None:
|
||||
"""處理單筆 message:parse → (maybe) incident → DB write → ACK。"""
|
||||
async def _process_one(
|
||||
self, stream_key: str, msg_id: Any, data: dict, _session_factory=None
|
||||
) -> None:
|
||||
"""處理單筆 message:parse → (maybe) incident → DB write → ACK。
|
||||
_session_factory: 可注入測試用 factory,預設使用 get_session_factory()。
|
||||
"""
|
||||
try:
|
||||
raw = data.get(b"payload") or data.get("payload")
|
||||
if isinstance(raw, bytes):
|
||||
@@ -147,7 +151,7 @@ class AiderEventProcessor:
|
||||
# 不中斷 — 即使 incident 失敗,event 仍要持久化
|
||||
|
||||
try:
|
||||
session_factory = get_session_factory()
|
||||
session_factory = _session_factory or get_session_factory()
|
||||
async with session_factory() as session:
|
||||
repo = AiderEventRepository(session)
|
||||
await repo.insert(
|
||||
|
||||
Reference in New Issue
Block a user