fix(test): 修复MagicMock枚举导致的3个单元测试失败
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 18s
AI Code Review / AI Code Review (pull_request) Failing after 32s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 4m18s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 7m30s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 57s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 23s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 1392h5m41s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 1392h5m48s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 1392h5m48s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 1392h5m49s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 1392h5m49s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 1392h5m50s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 1392h5m50s
CI/CD Pipeline / Check if frontend-only change (pull_request) Has been skipped
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 1392h37m58s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 1392h37m57s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 1392h37m58s
CI/CD Pipeline / Production Browser E2E (pull_request) Failing after 1392h37m57s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 1392h37m57s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 1392h37m58s
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 18s
AI Code Review / AI Code Review (pull_request) Failing after 32s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 4m18s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 7m30s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 57s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 23s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 1392h5m41s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 1392h5m48s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 1392h5m48s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 1392h5m49s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 1392h5m49s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 1392h5m50s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 1392h5m50s
CI/CD Pipeline / Check if frontend-only change (pull_request) Has been skipped
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 1392h37m58s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 1392h37m57s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 1392h37m58s
CI/CD Pipeline / Production Browser E2E (pull_request) Failing after 1392h37m57s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 1392h37m57s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 1392h37m58s
根因:测试mock SessionLocal时未区分新/旧模板系统的model查询, SQLAlchemyEditTemplateRepository.get()也会走到mock session并返回MagicMock, 导致_model_to_entity中EditTemplateStatus(model.status)枚举转换失败。 修复:mock session.query()增加side_effect,根据model类型返回不同结果: - EditTemplateModel查询返回None(强制走旧模板系统fallback) - TemplateModel查询返回mock template(测试目标路径) 影响测试: - TestP1Validations.test_validate_template_exists_success - TestTemplatePlanConfigLoading.test_load_template_config_assembles_three_fields - TestTemplatePlanConfigLoading.test_load_template_config_only_bgm
This commit is contained in:
@@ -241,11 +241,27 @@ class TestP1Validations:
|
||||
mock_template.is_active = True
|
||||
|
||||
session = MagicMock()
|
||||
mock_session = MagicMock()
|
||||
session.query.return_value = mock_session
|
||||
filter_result = MagicMock()
|
||||
mock_session.filter.return_value = filter_result
|
||||
filter_result.first.return_value = mock_template
|
||||
|
||||
# EditTemplateModel 查询返回 None(走旧模板系统 fallback)
|
||||
edit_query = MagicMock()
|
||||
edit_filter = MagicMock()
|
||||
edit_query.filter.return_value = edit_filter
|
||||
edit_filter.first.return_value = None
|
||||
|
||||
# TemplateModel 查询返回 mock_template
|
||||
old_query = MagicMock()
|
||||
old_filter = MagicMock()
|
||||
old_query.filter.return_value = old_filter
|
||||
old_filter.first.return_value = mock_template
|
||||
|
||||
def _query_side_effect(model):
|
||||
# 根据 model 类型返回不同的 query mock
|
||||
name = getattr(model, "__name__", "")
|
||||
if "EditTemplate" in name:
|
||||
return edit_query
|
||||
return old_query
|
||||
|
||||
session.query.side_effect = _query_side_effect
|
||||
|
||||
with patch("worker_app.tasks.generation.SessionLocal", return_value=session):
|
||||
_validate_template_exists("tmpl_001") # 不抛异常
|
||||
@@ -255,11 +271,16 @@ class TestP1Validations:
|
||||
from worker_app.tasks.generation import _validate_template_exists
|
||||
|
||||
session = MagicMock()
|
||||
mock_session = MagicMock()
|
||||
session.query.return_value = mock_session
|
||||
filter_result = MagicMock()
|
||||
mock_session.filter.return_value = filter_result
|
||||
filter_result.first.return_value = None
|
||||
|
||||
# 两个系统查询都返回 None
|
||||
def _query_side_effect(model):
|
||||
q = MagicMock()
|
||||
f = MagicMock()
|
||||
q.filter.return_value = f
|
||||
f.first.return_value = None
|
||||
return q
|
||||
|
||||
session.query.side_effect = _query_side_effect
|
||||
|
||||
with patch("worker_app.tasks.generation.SessionLocal", return_value=session):
|
||||
with pytest.raises(ValueError, match="模板不存在"):
|
||||
@@ -431,11 +452,26 @@ class TestTemplatePlanConfigLoading:
|
||||
|
||||
def _mock_session(self, template):
|
||||
session = MagicMock()
|
||||
mock_query = MagicMock()
|
||||
session.query.return_value = mock_query
|
||||
filter_result = MagicMock()
|
||||
mock_query.filter.return_value = filter_result
|
||||
filter_result.first.return_value = template
|
||||
|
||||
# EditTemplateModel 查询返回 None(走旧模板系统 fallback)
|
||||
edit_query = MagicMock()
|
||||
edit_filter = MagicMock()
|
||||
edit_query.filter.return_value = edit_filter
|
||||
edit_filter.first.return_value = None
|
||||
|
||||
# TemplateModel 查询返回 template(旧模板系统)
|
||||
old_query = MagicMock()
|
||||
old_filter = MagicMock()
|
||||
old_query.filter.return_value = old_filter
|
||||
old_filter.first.return_value = template
|
||||
|
||||
def _query_side_effect(model):
|
||||
name = getattr(model, "__name__", "")
|
||||
if "EditTemplate" in name:
|
||||
return edit_query
|
||||
return old_query
|
||||
|
||||
session.query.side_effect = _query_side_effect
|
||||
return session
|
||||
|
||||
def test_load_template_config_assembles_three_fields(self):
|
||||
@@ -503,11 +539,15 @@ class TestTemplatePlanConfigLoading:
|
||||
from worker_app.tasks.generation import _load_template_plan_config
|
||||
|
||||
session = MagicMock()
|
||||
mock_query = MagicMock()
|
||||
session.query.return_value = mock_query
|
||||
filter_result = MagicMock()
|
||||
mock_query.filter.return_value = filter_result
|
||||
filter_result.first.return_value = None
|
||||
|
||||
def _query_side_effect(model):
|
||||
q = MagicMock()
|
||||
f = MagicMock()
|
||||
q.filter.return_value = f
|
||||
f.first.return_value = None
|
||||
return q
|
||||
|
||||
session.query.side_effect = _query_side_effect
|
||||
|
||||
with patch("worker_app.tasks.generation.SessionLocal", return_value=session):
|
||||
result = _load_template_plan_config("tmpl_nonexist")
|
||||
|
||||
Reference in New Issue
Block a user