"""贴纸引擎单元测试 - 配置+解析等纯逻辑.""" from __future__ import annotations import pytest from video_processing.sticker_engine import ( ImageStickerConfig, TextStickerConfig, parse_stickers_from_config, ) class TestImageStickerConfigDefaults: """ImageStickerConfig 默认值测试.""" def test_default_values(self): """默认值正确.""" s = ImageStickerConfig() assert s.enabled is False assert s.type == "image" assert s.position == "top_right" assert s.x is None assert s.y is None assert s.x_unit == "percent" assert s.y_unit == "percent" assert s.scale == 1.0 assert s.width is None assert s.height is None assert s.opacity == 1.0 assert s.start_time == 0.0 assert s.duration == 0.0 assert s.fade_in == 0.0 assert s.fade_out == 0.0 assert s.z_index == 10 assert s.image_url == "" assert s.preset_id == "" class TestTextStickerConfigDefaults: """TextStickerConfig 默认值测试.""" def test_default_values(self): """默认值正确.""" s = TextStickerConfig() assert s.enabled is False assert s.type == "text" assert s.text == "" assert s.font_size == 36 assert s.font_color == "#FFFFFF" assert s.font_family == "sans" assert s.stroke_color == "#000000" assert s.stroke_width == 2 assert s.shadow_color == "#000000" assert s.shadow_x == 2 assert s.shadow_y == 2 assert s.shadow_alpha == 0.5 assert s.position == "center" assert s.start_time == 0.0 assert s.duration == 0.0 assert s.z_index == 10 assert s.bg_color == "" assert s.bg_padding == 8 assert s.bg_alpha == 0.8 assert s.bg_corner_radius == 8 class TestParseStickersFromConfig: """parse_stickers_from_config 测试.""" def test_none_returns_empty(self): """None返回空列表.""" result = parse_stickers_from_config(None) assert result == [] def test_empty_dict_returns_empty(self): """空dict返回空.""" result = parse_stickers_from_config({}) assert result == [] def test_no_stickers_key_returns_empty(self): """无stickers键返回空.""" result = parse_stickers_from_config({"other": "value"}) assert result == [] def test_stickers_not_list_returns_empty(self): """stickers不是列表返回空.""" result = parse_stickers_from_config({"stickers": "not_a_list"}) assert result == [] def test_empty_stickers_list(self): """空贴纸列表.""" result = parse_stickers_from_config({"stickers": []}) assert result == [] def test_single_sticker(self): """单个贴纸.""" result = parse_stickers_from_config( { "stickers": [{"type": "text", "text": "hello"}], } ) assert len(result) == 1 assert result[0]["text"] == "hello" def test_multiple_stickers(self): """多个贴纸.""" result = parse_stickers_from_config( { "stickers": [ {"type": "text", "text": "a"}, {"type": "image", "image_url": "/b.png"}, {"type": "text", "text": "c"}, ], } ) assert len(result) == 3 def test_returns_raw_dicts(self): """返回原始dict,不做转换.""" sticker = {"type": "text", "text": "test", "font_size": 48} result = parse_stickers_from_config({"stickers": [sticker]}) assert result[0] is sticker # 引用相同,不做深拷贝