ForcePilot/backend/test/unit/channels/contract/dtos/test_cache.py
Kris 08617091dc refactor: 整理项目包结构与导入路径
- 新增多个业务域的__init__.py模块文件,规范包导出结构
- 调整多个DTO文件的导入路径,统一模块组织方式
- 移除测试文件中多余的空行与导入语句
- 优化部分业务模块的包层级划分
2026-07-18 02:04:03 +08:00

56 lines
1.8 KiB
Python

"""cache.py DTO 单元测试。
覆盖 ``LockToken`` 的字段赋值、默认值、不可变语义与 ``__post_init__``
校验逻辑。
"""
from __future__ import annotations
import dataclasses
from datetime import datetime
import pytest
from yuxi.channels.contract.dtos.shared.cache import LockToken
from yuxi.channels.contract.errors import ValidationError
pytestmark = pytest.mark.unit
@pytest.mark.unit
class TestLockToken:
"""锁令牌 DTO 测试。"""
def test_fields_are_assigned(self):
# Arrange
now = datetime(2026, 1, 1, 12, 0, 0)
# Act
token = LockToken(key="lock:abc", value="token-123", expires_at=now)
# Assert
assert token.key == "lock:abc"
assert token.value == "token-123"
assert token.expires_at is now
def test_is_frozen(self):
# Arrange
now = datetime(2026, 1, 1, 12, 0, 0)
token = LockToken(key="lock:abc", value="token-123", expires_at=now)
# Act / Assert
with pytest.raises(dataclasses.FrozenInstanceError):
token.key = "other" # type: ignore[misc]
def test_empty_key_raises_validation_error(self):
# Arrange
now = datetime(2026, 1, 1, 12, 0, 0)
# Act / Assert - key 为空字符串应抛出 ValidationError
with pytest.raises(ValidationError) as exc_info:
LockToken(key="", value="token-123", expires_at=now)
assert exc_info.value.field == "key"
def test_empty_value_raises_validation_error(self):
# Arrange
now = datetime(2026, 1, 1, 12, 0, 0)
# Act / Assert - value 为空字符串应抛出 ValidationError
with pytest.raises(ValidationError) as exc_info:
LockToken(key="lock:abc", value="", expires_at=now)
assert exc_info.value.field == "value"