diff --git a/tests/unit/test_mediakit_smart_clips.py b/tests/unit/test_mediakit_smart_clips.py index e06283548..73143849d 100644 --- a/tests/unit/test_mediakit_smart_clips.py +++ b/tests/unit/test_mediakit_smart_clips.py @@ -306,6 +306,26 @@ class TestGetTemplateSegments: # ── from-assets 端点集成测试 ──────────────────────────────────────────────── +def _patch_zero_noise(): + """消除 clips.py 排序随机噪声(SCORE_RANDOM_NOISE_MAX 噪声返回 0)。 + + 用于均衡分配等确定性断言;其他 uniform 调用(片段时长随机)行为不变。 + """ + import random as _stdlib_random + + from app.api.routes.templates_editor import clips as clips_module + from packages.domain.smart_match import SCORE_RANDOM_NOISE_MAX + + _fallback = _stdlib_random.Random() + + def _fake_uniform(a, b): + if b == SCORE_RANDOM_NOISE_MAX: + return 0.0 + return _fallback.uniform(a, b) + + return patch.object(clips_module.random, "uniform", _fake_uniform) + + def _make_auth_user(): auth = MagicMock() auth.user.id = "user-001" @@ -470,16 +490,18 @@ class TestFromAssetsByTemplateSegments: mock_asset_repo.get.side_effect = get_asset body = ClipsFromAssetsRequest(asset_ids=["a1", "a2"]) - create_clips_from_assets_editor( - template_id="tmpl-1", - body=body, - background_tasks=MagicMock(), - plan_id="plan-1", - services=(mock_tpl_svc, mock_plan_svc), - asset_repo=mock_asset_repo, - db=MagicMock(), - current_user=_make_auth_user(), - ) + # 消除排序噪声,确定性断言贪心均衡分配 + with _patch_zero_noise(): + create_clips_from_assets_editor( + template_id="tmpl-1", + body=body, + background_tasks=MagicMock(), + plan_id="plan-1", + services=(mock_tpl_svc, mock_plan_svc), + asset_repo=mock_asset_repo, + db=MagicMock(), + current_user=_make_auth_user(), + ) clips_data = _get_clips_data(mock_plan_svc) asset_ids = [c["asset_id"] for c in clips_data]