""" 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