feat(phase6): 测试补全 + 集成测试 + repository 落地示范
- tests/unit/modules/test_repository.py:base_repository 在 SQLite 内存库的 CRUD 测试 - tests/integration/api/test_smoke.py:登录链路 / 只读接口 / 未授权拦截(标记 integration,默认跳过) - conftest 提供 sqlite_db(隔离 DB)与 app/client/admin_headers(集成)fixture - pytest.ini 默认跳过 integration,Makefile test-integration 可显式运行 - 修复 base_repository.get_by_id/get_by_ids 对字符串 ID 的兼容(URL 路径参数) - 示范 modules/system/level service 改用 level_repo,CRUD 全链路实测通过 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -53,6 +53,7 @@ from sqlalchemy import and_
|
||||
from shared.constants import PAGE_SIZE
|
||||
from modules.system.level.schemas import LevelForm, LevelStatusForm
|
||||
from modules.system.level.models import Level
|
||||
from modules.system.level.repository import level_repo
|
||||
from modules.upload import service as upload
|
||||
from config import FASTAPI_TEMP_PATH, FASTAPI_UPLOAD_DIR, FASTAPI_IMAGE_URL
|
||||
from core.database import get_db_session
|
||||
@@ -66,13 +67,12 @@ from utils.request import like_contains
|
||||
# 查询职级分页数据
|
||||
|
||||
def get_level_page(request):
|
||||
db = get_db_session()
|
||||
# 页码
|
||||
page = int(request.query_params.get("pageNo", 1))
|
||||
# 每页数
|
||||
limit = int(request.query_params.get("pageSize", PAGE_SIZE))
|
||||
# 查询数据
|
||||
query = db.query(Level).filter(Level.is_delete == 0)
|
||||
query = level_repo.filter(Level.is_delete == 0)
|
||||
# 职级名称
|
||||
name = request.query_params.get('name')
|
||||
if name:
|
||||
@@ -105,9 +105,8 @@ def get_level_page(request):
|
||||
# 根据ID查询职级详情
|
||||
|
||||
def get_level_detail(level_id):
|
||||
db = get_db_session()
|
||||
# 根据ID查询职级
|
||||
level = db.query(Level).filter(and_(Level.id == level_id, Level.is_delete == 0)).first()
|
||||
level = level_repo.get_by_id(level_id)
|
||||
# 查询结果为空判断
|
||||
if not level:
|
||||
return None
|
||||
@@ -118,15 +117,11 @@ def get_level_detail(level_id):
|
||||
# 添加职级
|
||||
|
||||
def add_level(request, data: LevelForm):
|
||||
db = get_db_session()
|
||||
# 唯一性校验
|
||||
if db.query(Level).filter(and_(Level.name == data.name, Level.is_delete == 0)).first():
|
||||
if level_repo.filter(Level.name == data.name, Level.is_delete == 0).first():
|
||||
return R.failed("职级名称不能重复")
|
||||
# 表单数据赋值给对象
|
||||
level = Level(**data.model_dump(exclude={'id'}))
|
||||
level.create_user = get_user_id(request)
|
||||
# 插入数据
|
||||
level.save()
|
||||
# 表单数据赋值给对象并插入
|
||||
level_repo.create(**data.model_dump(exclude={'id'}), create_user=get_user_id(request))
|
||||
# 返回结果
|
||||
return R.ok(msg="添加成功")
|
||||
|
||||
@@ -134,24 +129,21 @@ def add_level(request, data: LevelForm):
|
||||
# 更新职级
|
||||
|
||||
def update_level(request, data: LevelForm):
|
||||
db = get_db_session()
|
||||
# 记录ID判空
|
||||
if not data.id or data.id <= 0:
|
||||
return R.failed("记录ID不能为空")
|
||||
# 唯一性校验(排除自身)
|
||||
if db.query(Level).filter(and_(Level.name == data.name, Level.id != data.id, Level.is_delete == 0)).first():
|
||||
if level_repo.filter(Level.name == data.name, Level.id != data.id, Level.is_delete == 0).first():
|
||||
return R.failed("职级名称不能重复")
|
||||
|
||||
# 根据ID查询记录
|
||||
level = db.query(Level).filter(and_(Level.id == data.id, Level.is_delete == 0)).first()
|
||||
# 查询结果判空
|
||||
if not level:
|
||||
if not level_repo.get_by_id(data.id):
|
||||
return R.failed("记录不存在")
|
||||
# 构造更新数据(排除 id)
|
||||
updData = data.model_dump(exclude={'id'})
|
||||
updData['update_user'] = get_user_id(request)
|
||||
updData['update_time'] = datetime.now(tz=timezone.utc)
|
||||
result = db.query(Level).filter_by(id=data.id).update(updData)
|
||||
result = level_repo.update(data.id, updData)
|
||||
# 提交数据
|
||||
if not result:
|
||||
return R.failed("更新失败")
|
||||
@@ -164,15 +156,12 @@ def delete_level(level_id):
|
||||
# 设置状态
|
||||
|
||||
def update_level_status(request, data: LevelStatusForm):
|
||||
db = get_db_session()
|
||||
# 根据ID查询记录
|
||||
level = db.query(Level).filter(and_(Level.id == data.id, Level.is_delete == 0)).first()
|
||||
# 查询结果判空
|
||||
if not level:
|
||||
if not level_repo.get_by_id(data.id):
|
||||
return R.failed("记录不存在")
|
||||
|
||||
# 更新记录
|
||||
result = db.query(Level).filter_by(id=data.id).update({
|
||||
result = level_repo.update(data.id, {
|
||||
"status": data.status,
|
||||
"update_user": get_user_id(request),
|
||||
"update_time": datetime.now(tz=timezone.utc)
|
||||
|
||||
Reference in New Issue
Block a user