Files
xiaoxia-saas/tests/unit/test_mediakit_conflicts.py
CI Bot 7cb36a5c3d
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 3m9s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 3m39s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 3m43s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 4m0s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 4m3s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 4m7s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 1m14s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m24s
AI Code Review / AI Code Review (pull_request) Failing after 4m42s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 5m49s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m58s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 9m19s
CI/CD Pipeline / CI Gate (pull_request) Failing after 24s
CI/CD Pipeline / Production Browser E2E (pull_request) Failing after 420h56m34s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 420h56m38s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 420h56m38s
CI/CD Pipeline / PR Build Web Image (pull_request) Failing after 421h5m58s
CI/CD Pipeline / Canary Release to Production (pull_request) Failing after 420h56m36s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 421h5m58s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 421h8m58s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 421h5m59s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 421h8m59s
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Failing after 421h9m2s
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Failing after 421h9m2s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 421h9m6s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 421h9m7s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 421h9m8s
CI/CD Pipeline / Check push changed paths (pull_request) Failing after 421h9m10s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 421h30m41s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 421h30m43s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 421h43m3s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 421h43m6s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Failing after 421h43m8s
style: auto-format with black + isort + prettier [skip ci-format-check]
2026-08-29 18:16:26 +00:00

69 lines
2.8 KiB
Python
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""MediaKit 智能选片挪点冲突检测测试(Task G 验收项 1)。
覆盖 _recommended_time_conflicts:
- 区间重叠判定(含 0.3s 边缘间隙扩边)
- 不冲突场景(间隔大于边缘间隙)
- 边缘间隙可配置
"""
from __future__ import annotations
import os
import sys
from pathlib import Path
os.environ.setdefault("JWT_SECRET_KEY", "unit-test-secret-key-for-testing")
os.environ.setdefault("DATABASE_URL", "sqlite:///test.db")
sys.path.insert(0, str(Path(__file__).resolve().parents[2] / "apps" / "api"))
from app.api.routes.templates_editor.clips import (
SEGMENT_EDGE_GAP,
_recommended_time_conflicts,
)
class TestRecommendedTimeConflicts:
def test_overlapping_range_conflicts(self):
"""推荐区间与已用区间直接重叠 → 冲突。"""
assert _recommended_time_conflicts(10.0, 5.0, [(12.0, 17.0)]) is True
def test_identical_range_conflicts(self):
assert _recommended_time_conflicts(10.0, 5.0, [(10.0, 15.0)]) is True
def test_touching_endpoint_conflicts_due_to_edge_gap(self):
"""首尾紧贴(推荐 15 开始,已用 [10,15]):0.3s 扩边内 → 冲突。"""
assert _recommended_time_conflicts(15.0, 5.0, [(10.0, 15.0)]) is True
def test_gap_within_edge_gap_conflicts(self):
"""间隔 0.2s(< 0.3s 边缘间隙)→ 冲突。"""
assert _recommended_time_conflicts(15.2, 5.0, [(10.0, 15.0)]) is True
def test_gap_beyond_edge_gap_no_conflict(self):
"""间隔 0.5s(> 0.3s 边缘间隙)→ 不冲突。"""
assert _recommended_time_conflicts(15.5, 5.0, [(10.0, 15.0)]) is False
def test_far_apart_no_conflict(self):
"""相隔很远 → 不冲突。"""
assert _recommended_time_conflicts(20.0, 5.0, [(0.0, 5.0)]) is False
def test_empty_used_no_conflict(self):
assert _recommended_time_conflicts(10.0, 5.0, []) is False
def test_any_one_range_conflicts(self):
"""多个已用区间,任一冲突即返回 True。"""
used = [(0.0, 5.0), (10.0, 15.0), (20.0, 25.0)]
assert _recommended_time_conflicts(12.0, 2.0, used) is True
assert _recommended_time_conflicts(6.0, 2.0, used) is False
def test_custom_edge_gap(self):
"""edge_gap 可配置:gap=0 时紧贴不冲突(端点相接不算重叠)。"""
# edge_gap=0:15.0 开始与已用 [10,15] 端点相接,区间判定 start<end_gap(15) → False
assert _recommended_time_conflicts(15.0, 5.0, [(10.0, 15.0)], edge_gap=0.0) is False
# edge_gap=1.0:0.5 间隔也算冲突
assert _recommended_time_conflicts(15.5, 5.0, [(10.0, 15.0)], edge_gap=1.0) is True
def test_default_edge_gap_constant(self):
"""默认边缘间隙常量为 0.3s(配置常量)。"""
assert SEGMENT_EDGE_GAP == 0.3