160 lines
5.5 KiB
Python
Executable File
160 lines
5.5 KiB
Python
Executable File
"""
|
|
TitleLibraryItem 标题库领域模型单元测试
|
|
"""
|
|
|
|
from packages.domain.title_library import TitleLibraryItem
|
|
|
|
|
|
class TestTitleLibraryItem:
|
|
"""TitleLibraryItem 测试"""
|
|
|
|
def test_create_minimal(self):
|
|
item = TitleLibraryItem(id="t1", user_id="u1", name="标题1", text="这是标题文本")
|
|
assert item.id == "t1"
|
|
assert item.user_id == "u1"
|
|
assert item.name == "标题1"
|
|
assert item.text == "这是标题文本"
|
|
|
|
def test_default_values(self):
|
|
item = TitleLibraryItem(id="t1", user_id="u1", name="n", text="t")
|
|
assert item.category == "default"
|
|
assert item.description == ""
|
|
assert item.tags == []
|
|
assert item.usage_count == 0
|
|
assert item.is_active is True
|
|
assert item.metadata_ == {}
|
|
|
|
def test_with_category(self):
|
|
item = TitleLibraryItem(
|
|
id="t1",
|
|
user_id="u1",
|
|
name="n",
|
|
text="t",
|
|
category="美食",
|
|
)
|
|
assert item.category == "美食"
|
|
|
|
def test_with_tags(self):
|
|
item = TitleLibraryItem(
|
|
id="t1",
|
|
user_id="u1",
|
|
name="n",
|
|
text="t",
|
|
tags=["爆款", "美食"],
|
|
)
|
|
assert len(item.tags) == 2
|
|
assert "爆款" in item.tags
|
|
|
|
def test_usage_count(self):
|
|
item = TitleLibraryItem(id="t1", user_id="u1", name="n", text="t")
|
|
assert item.usage_count == 0
|
|
item.usage_count = 10
|
|
assert item.usage_count == 10
|
|
|
|
def test_inactive(self):
|
|
item = TitleLibraryItem(
|
|
id="t1",
|
|
user_id="u1",
|
|
name="n",
|
|
text="t",
|
|
is_active=False,
|
|
)
|
|
assert item.is_active is False
|
|
|
|
def test_with_metadata(self):
|
|
meta = {"source": "import", "quality": "high"}
|
|
item = TitleLibraryItem(
|
|
id="t1",
|
|
user_id="u1",
|
|
name="n",
|
|
text="t",
|
|
metadata_=meta,
|
|
)
|
|
assert item.metadata_["source"] == "import"
|
|
|
|
def test_has_timestamps(self):
|
|
item = TitleLibraryItem(id="t1", user_id="u1", name="n", text="t")
|
|
assert item.created_at is not None
|
|
assert item.updated_at is not None
|
|
|
|
def test_tags_independence_between_instances(self):
|
|
"""不同实例的 tags 列表互不影响"""
|
|
item1 = TitleLibraryItem(id="t1", user_id="u1", name="n1", text="t")
|
|
item2 = TitleLibraryItem(id="t2", user_id="u1", name="n2", text="t")
|
|
item1.tags.append("新标签")
|
|
assert "新标签" not in item2.tags
|
|
assert len(item2.tags) == 0
|
|
|
|
def test_metadata_independence_between_instances(self):
|
|
"""不同实例的 metadata_ 字典互不影响"""
|
|
item1 = TitleLibraryItem(id="t1", user_id="u1", name="n1", text="t")
|
|
item2 = TitleLibraryItem(id="t2", user_id="u1", name="n2", text="t")
|
|
item1.metadata_["key"] = "value"
|
|
assert "key" not in item2.metadata_
|
|
|
|
def test_zero_usage_count(self):
|
|
item = TitleLibraryItem(id="t1", user_id="u1", name="n", text="t", usage_count=0)
|
|
assert item.usage_count == 0
|
|
|
|
def test_large_usage_count(self):
|
|
item = TitleLibraryItem(id="t1", user_id="u1", name="n", text="t", usage_count=999999)
|
|
assert item.usage_count == 999999
|
|
|
|
def test_negative_usage_count(self):
|
|
"""负数使用次数也能存(领域层不做业务校验)"""
|
|
item = TitleLibraryItem(id="t1", user_id="u1", name="n", text="t", usage_count=-1)
|
|
assert item.usage_count == -1
|
|
|
|
def test_empty_text(self):
|
|
item = TitleLibraryItem(id="t1", user_id="u1", name="n", text="")
|
|
assert item.text == ""
|
|
|
|
def test_long_text(self):
|
|
long_text = "标题" * 1000
|
|
item = TitleLibraryItem(id="t1", user_id="u1", name="n", text=long_text)
|
|
assert item.text == long_text
|
|
assert len(item.text) == 2000
|
|
|
|
def test_empty_name(self):
|
|
item = TitleLibraryItem(id="t1", user_id="u1", name="", text="t")
|
|
assert item.name == ""
|
|
|
|
def test_special_characters_in_name_and_text(self):
|
|
special = "!@#$%^&*()_+-=[]{}|;':\",./<>?\n\t"
|
|
item = TitleLibraryItem(id="t1", user_id="u1", name=special, text=special)
|
|
assert item.name == special
|
|
assert item.text == special
|
|
|
|
def test_unicode_in_name_and_text(self):
|
|
item = TitleLibraryItem(
|
|
id="t1",
|
|
user_id="u1",
|
|
name="中文标题🔥emoji",
|
|
text="支持各种文字:中文、English、日本語、한국어",
|
|
)
|
|
assert "中文" in item.name
|
|
assert "🔥" in item.name
|
|
assert "日本語" in item.text
|
|
|
|
def test_many_tags(self):
|
|
tags = [f"tag_{i}" for i in range(100)]
|
|
item = TitleLibraryItem(id="t1", user_id="u1", name="n", text="t", tags=tags)
|
|
assert len(item.tags) == 100
|
|
assert item.tags[0] == "tag_0"
|
|
assert item.tags[99] == "tag_99"
|
|
|
|
def test_is_active_toggle(self):
|
|
item = TitleLibraryItem(id="t1", user_id="u1", name="n", text="t", is_active=True)
|
|
item.is_active = False
|
|
assert item.is_active is False
|
|
item.is_active = True
|
|
assert item.is_active is True
|
|
|
|
def test_empty_description(self):
|
|
item = TitleLibraryItem(id="t1", user_id="u1", name="n", text="t", description="")
|
|
assert item.description == ""
|
|
|
|
def test_custom_category(self):
|
|
item = TitleLibraryItem(id="t1", user_id="u1", name="n", text="t", category="自定义分类")
|
|
assert item.category == "自定义分类"
|