签入版本

This commit is contained in:
2026-09-12 18:57:19 +08:00
parent d45b61d808
commit 2857e0f2da
295 changed files with 20713 additions and 13125 deletions
@@ -10,6 +10,7 @@
import pytest
from src.common.utils.model_utils import build_page_data
from src.core.exceptions import BizError
from src.modules.system.position import service as position_service
@@ -18,7 +19,7 @@ class TestBuildPageData:
"""分页数据构建(纯函数)"""
def test_shape(self):
data = position_service._build_page_data([], 0, 10, 1, 0)
data = build_page_data([], 0, 1, 10)
assert data == {'records': [], 'total': 0, 'size': 10, 'current': 1, 'pages': 0}
@@ -63,9 +64,9 @@ class TestDeletePositions:
with pytest.raises(BizError, match="无效的记录ID"):
position_service.delete_positions('abc')
def test_parse_and_delete(self, monkeypatch):
"""ID 解析后调用模型批量删除,返回删除计数"""
from src.modules.system.position.models import Position
def test_parse_and_delete(self, app, monkeypatch):
"""ID 解析后调用仓库批量删除,返回删除计数(before_delete 引用校验需 DB 上下文)"""
from src.modules.system.position.repository import PositionRepository
captured = {}
@@ -73,9 +74,41 @@ class TestDeletePositions:
captured['ids'] = ids
return len(ids)
monkeypatch.setattr(Position, 'batch_delete', classmethod(fake_batch_delete))
monkeypatch.setattr(PositionRepository, 'batch_delete', classmethod(fake_batch_delete))
count = position_service.delete_positions('1,2,3')
with app.app_context():
count = position_service.delete_positions('1,2,3')
assert count == 3
assert captured['ids'] == [1, 2, 3]
class TestPositionList:
"""岗位列表(无分页):参数条件筛选 + status=1 硬性过滤"""
@pytest.fixture
def seed_positions(self, app):
from src.core.database import db
from src.modules.system.position.repository import PositionRepository
with app.app_context():
PositionRepository.create(name="产品经理", status=1, sort=1)
PositionRepository.create(name="项目经理", status=1, sort=2)
PositionRepository.create(name="测试主管", status=0, sort=3)
db.session.commit()
def test_list_no_filter_returns_enabled_only(self, app, seed_positions):
with app.app_context():
data = position_service.get_position_list(None)
assert [d["name"] for d in data] == ["产品经理", "项目经理"]
def test_list_filters_by_name(self, app, seed_positions):
with app.app_context():
data = position_service.get_position_list({"name": "经理"})
assert [d["name"] for d in data] == ["产品经理", "项目经理"]
def test_list_status_param_is_ignored(self, app, seed_positions):
# status 为硬性条件,即使传入 status=0 也只返回启用(status=1)记录
with app.app_context():
data = position_service.get_position_list({"name": "经理", "status": 0})
assert [d["name"] for d in data] == ["产品经理", "项目经理"]