docs+tests: P8 测试与文档(CHANGELOG/CONTRIBUTING + 补充单测)
- CHANGELOG.md / CONTRIBUTING.md - 新增 exceptions / case_converter 单元测试 - pytest 12 → 22 passed;全项目 flake8 0 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude
parent
8937799973
commit
d45b61d808
@@ -0,0 +1,38 @@
|
||||
"""
|
||||
命名转换工具单元测试
|
||||
=============================================================
|
||||
|
||||
- convert_camel_case / convert_snake_case:单字符串转换
|
||||
- convert_camel_to_snake / convert_snake_to_camel:字典键递归转换
|
||||
"""
|
||||
|
||||
from src.common.utils.case_converter import (
|
||||
convert_camel_case,
|
||||
convert_snake_case,
|
||||
convert_camel_to_snake,
|
||||
convert_snake_to_camel,
|
||||
)
|
||||
|
||||
|
||||
class TestSingleString:
|
||||
def test_snake_to_camel(self):
|
||||
assert convert_camel_case("user_id") == "userId"
|
||||
|
||||
def test_camel_to_snake(self):
|
||||
assert convert_snake_case("userId") == "user_id"
|
||||
|
||||
|
||||
class TestDictKeys:
|
||||
def test_camel_to_snake_dict(self):
|
||||
data = {"userId": 1, "userInfo": {"realName": "张三"}}
|
||||
assert convert_camel_to_snake(data) == {"user_id": 1, "user_info": {"real_name": "张三"}}
|
||||
|
||||
def test_snake_to_camel_dict(self):
|
||||
data = {"user_id": 1, "user_info": {"real_name": "张三"}}
|
||||
assert convert_snake_to_camel(data) == {"userId": 1, "userInfo": {"realName": "张三"}}
|
||||
|
||||
def test_roundtrip(self):
|
||||
source = {"user_id": 1, "role_ids": [1, 2]}
|
||||
camel = convert_snake_to_camel(source)
|
||||
assert camel == {"userId": 1, "roleIds": [1, 2]}
|
||||
assert convert_camel_to_snake(camel) == source
|
||||
@@ -0,0 +1,37 @@
|
||||
"""
|
||||
业务异常单元测试
|
||||
=============================================================
|
||||
|
||||
验证 BizError 及子类的 msg/code 约定:
|
||||
业务层 raise BizError → 全局异常处理器转 R.failed。
|
||||
"""
|
||||
|
||||
from src.core.exceptions import BizError, NotFoundError, PermissionDeniedError
|
||||
|
||||
|
||||
class TestBizError:
|
||||
def test_default_values(self):
|
||||
"""默认 msg='操作失败',code=1"""
|
||||
e = BizError()
|
||||
assert e.msg == "操作失败"
|
||||
assert e.code == 1
|
||||
|
||||
def test_custom_msg_and_code(self):
|
||||
e = BizError("自定义错误", code=403)
|
||||
assert e.msg == "自定义错误"
|
||||
assert e.code == 403
|
||||
|
||||
def test_is_exception(self):
|
||||
assert issubclass(BizError, Exception)
|
||||
|
||||
|
||||
class TestSubclasses:
|
||||
def test_not_found(self):
|
||||
e = NotFoundError()
|
||||
assert e.msg == "资源不存在"
|
||||
assert e.code == 1
|
||||
|
||||
def test_permission_denied(self):
|
||||
e = PermissionDeniedError()
|
||||
assert e.msg == "权限不足"
|
||||
assert e.code == 403
|
||||
Reference in New Issue
Block a user