Files
LandPPT/tests/test_speech_script_progress_sse.py
sligter a3240f8c1c feat(progress): add SSE endpoint for streaming speech script generation progress
feat(progress): implement polling fallback for speech script progress tracking
feat(ai): enhance AIProviderFactory to reuse providers based on configuration
feat(database): add foreign key indexes for improved query performance
test: add tests for speech script progress SSE endpoint and fallback mechanisms
2026-05-30 12:24:44 +08:00

36 lines
1.6 KiB
Python

from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
ROUTE_FILE = ROOT / "src/landppt/web/route_modules/speech_script_routes.py"
DIALOG_JS_FILE = ROOT / "src/landppt/web/static/js/pages/project/slides_editor/projectSlidesEditor.speechScriptsDialog.js"
MANAGE_JS_FILE = ROOT / "src/landppt/web/static/js/pages/project/slides_editor/projectSlidesEditor.speechScriptsManage.js"
def _read(path: Path) -> str:
return path.read_text(encoding="utf-8")
def test_speech_script_progress_has_sse_endpoint():
route_text = _read(ROUTE_FILE)
assert '@router.get("/api/projects/{project_id}/speech-scripts/progress/{task_id}/stream")' in route_text
assert "async def stream_speech_script_progress(" in route_text
assert 'media_type="text/event-stream"' in route_text
assert '"X-Accel-Buffering": "no"' in route_text
assert "event: progress" in route_text
assert '"done" if progress_info.status in {"completed", "failed"}' in route_text
assert "event: progress_error" in route_text
def test_speech_script_progress_frontend_uses_sse_with_polling_fallback():
dialog_text = _read(DIALOG_JS_FILE)
manage_text = _read(MANAGE_JS_FILE)
assert "new EventSource(url, { withCredentials: true })" in dialog_text
assert "/speech-scripts/progress/${taskId}/stream" in dialog_text
assert "startProgressTrackingPolling(" in dialog_text
assert "startSingleScriptProgressTrackingPolling(" in dialog_text
assert "startSpeechHumanizeProgressTrackingPolling(" in manage_text
assert "typeof startSpeechProgressSse === 'function'" in manage_text