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:
@@ -0,0 +1,36 @@
|
||||
"""shared/base_repository 与模块 repository 的单元测试(SQLite 内存库)。"""
|
||||
|
||||
from modules.system.level.repository import level_repo
|
||||
from modules.system.position.repository import position_repo
|
||||
|
||||
|
||||
def test_level_repo_crud(sqlite_db):
|
||||
# create
|
||||
obj = level_repo.create(name="高级", status=1, sort=1)
|
||||
assert obj.id is not None
|
||||
sqlite_db.commit()
|
||||
|
||||
# get / exists
|
||||
assert level_repo.get_by_id(obj.id).name == "高级"
|
||||
assert level_repo.exists(obj.id)
|
||||
assert level_repo.get_by_id(0) is None
|
||||
assert not level_repo.exists(999)
|
||||
|
||||
# paginate
|
||||
items, total = level_repo.paginate(1, 10)
|
||||
assert total == 1
|
||||
assert items[0].id == obj.id
|
||||
|
||||
# update
|
||||
assert level_repo.update(obj.id, {"name": "资深"}) == 1
|
||||
assert level_repo.get_by_id(obj.id).name == "资深"
|
||||
|
||||
# soft delete
|
||||
assert level_repo.soft_delete([obj.id])
|
||||
assert level_repo.get_by_id(obj.id) is None
|
||||
|
||||
|
||||
def test_position_repo_paginate_empty(sqlite_db):
|
||||
items, total = position_repo.paginate(1, 10)
|
||||
assert total == 0
|
||||
assert items == []
|
||||
Reference in New Issue
Block a user