refactor: P4b position 标杆模块服务层改造 + 单元测试

【服务层新范式】system/position 作为标杆:
- service 函数改「入参数据/出参数据」:get_position_page(params)->dict、
  add_position(data)/update_position(data)/update_position_status(data)->None、
  delete_positions(ids)->int
- 业务失败 raise BizError(不再 return R.failed),由全局处理器转 R.failed
- get_info 委托 PositionRepository(新增 repository.py,继承 BaseRepository)
- router 负责取参(query args / parse_request_body)与 R 包装

【单元测试】tests/unit/test_modules/test_position_service.py:
- 纯函数(_build_page_data)、BizError 契约(空数据/空ID/无效ID)、
  mock 批量删除(ID 解析验证)——无需数据库即可测试
- conftest flask_app fixture 增加 SECRET_KEY + 关闭 CSRF

【验收】12 passed(5 响应 + 7 position);应用启动;flake8 零告警;
position 路由 401 拦截正常。服务层测试化范式验证可行

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
DjangoAdmin Dev
2026-08-07 14:42:03 +08:00
co-authored by Claude
parent a6e094378c
commit 0cfaf8c894
6 changed files with 204 additions and 130 deletions
+11 -2
View File
@@ -27,5 +27,14 @@ if ROOT not in sys.path:
@pytest.fixture
def flask_app():
"""最小 Flask 应用实例(无数据库/中间件,仅提供应用上下文)。"""
return Flask(__name__)
"""
最小 Flask 应用实例(无数据库/中间件,仅提供应用上下文)。
配置项说明:
- SECRET_KEY: FlaskForm CSRF 校验需要
- WTF_CSRF_ENABLED=False: 单元测试关闭 CSRF
"""
app = Flask(__name__)
app.config['SECRET_KEY'] = 'test-secret-key'
app.config['WTF_CSRF_ENABLED'] = False
return app