Files
xiaoxia-saas/tests/unit/test_recipe_domain.py
xiaoxia b1babaaedd
CI/CD Pipeline / Check if frontend-only change (push) Has been skipped
CI/CD Pipeline / Build Production Worker Image (push) Has been skipped
CI/CD Pipeline / Build Production Web Image (push) Has been skipped
CI/CD Pipeline / Build Production API Image (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Build Staging Web Image (push) Successful in 28s
CI/CD Pipeline / Frontend Lint (push) Successful in 1m54s
CI/CD Pipeline / Validate Code Quality And Tests (push) Successful in 2m12s
CI/CD Pipeline / Build Staging API Image (push) Successful in 2m31s
CI/CD Pipeline / Frontend Unit Tests (push) Successful in 2m40s
CI/CD Pipeline / Unit Tests (push) Successful in 2m42s
CI/CD Pipeline / Integration Tests (push) Successful in 1m11s
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 17m6s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Successful in 4m35s
CI/CD Pipeline / ACR Image Cleanup (push) Successful in 32s
CI/CD Pipeline / Staging E2E Tests (push) Successful in 3m29s
CI/CD Pipeline / Staging API Integration Tests (push) Successful in 4m36s
test(unit): P3-1第六波 新增5个领域模块单元测试(37个用例) (#687)
Co-authored-by: xiaoxia <dev@xiaoxiajianji.com>
Co-committed-by: xiaoxia <dev@xiaoxiajianji.com>
2026-07-21 23:33:01 +08:00

85 lines
2.6 KiB
Python
Executable File

"""
Recipe 配方领域模型单元测试
"""
from packages.domain.recipe import Recipe, RecipeItem
class TestRecipeItem:
"""RecipeItem 测试"""
def test_create_item(self):
item = RecipeItem(
id="item-1",
recipe_id="recipe-1",
item_type="asset",
item_id="asset-123",
position=0,
)
assert item.id == "item-1"
assert item.recipe_id == "recipe-1"
assert item.item_type == "asset"
assert item.item_id == "asset-123"
assert item.position == 0
assert item.metadata_ == {}
def test_item_with_metadata(self):
item = RecipeItem(
id="item-1",
recipe_id="r1",
item_type="voice",
item_id="voice-1",
position=2,
metadata_={"speed": 1.0, "pitch": 0},
)
assert item.metadata_["speed"] == 1.0
assert item.metadata_["pitch"] == 0
class TestRecipe:
"""Recipe 测试"""
def test_create_minimal(self):
r = Recipe(id="r1", user_id="u1", name="我的配方")
assert r.id == "r1"
assert r.user_id == "u1"
assert r.name == "我的配方"
def test_default_values(self):
r = Recipe(id="r1", user_id="u1", name="n")
assert r.description == ""
assert r.template_id == ""
assert r.generation_params == {}
assert r.items == []
assert r.is_active is True
assert r.metadata_ == {}
def test_with_items(self):
items = [
RecipeItem(id="i1", recipe_id="r1", item_type="asset", item_id="a1", position=0),
RecipeItem(id="i2", recipe_id="r1", item_type="title", item_id="t1", position=1),
]
r = Recipe(id="r1", user_id="u1", name="n", items=items)
assert len(r.items) == 2
assert r.items[0].item_type == "asset"
assert r.items[1].item_type == "title"
def test_with_generation_params(self):
params = {"mode": "one_take", "duration": 30}
r = Recipe(id="r1", user_id="u1", name="n", generation_params=params)
assert r.generation_params["mode"] == "one_take"
def test_recipe_inactive(self):
r = Recipe(id="r1", user_id="u1", name="n", is_active=False)
assert r.is_active is False
def test_has_timestamps(self):
r = Recipe(id="r1", user_id="u1", name="n")
assert r.created_at is not None
assert r.updated_at is not None
def test_all_item_types(self):
for itype in ["asset", "title", "voice"]:
item = RecipeItem(id="i1", recipe_id="r1", item_type=itype, item_id="x", position=0)
assert item.item_type == itype