Files
main_backend/tests/integration/test_captions_endpoints.py
2026-02-04 02:19:50 +03:00

81 lines
2.5 KiB
Python

"""
Tests for captions endpoints.
"""
from __future__ import annotations
from unittest.mock import AsyncMock, patch
import pytest
from httpx import AsyncClient
class TestGetVideoEndpoint:
"""Tests for POST /api/captions/get_video/."""
async def test_get_video_success(self, auth_client: AsyncClient):
"""Test caption burn-in endpoint returns result."""
mock_transcription = {
"segments": [
{
"text": "Hello world",
"semantic_tags": [],
"structure_tags": [],
"time": {"start": 0.0, "end": 2.0},
"lines": [
{
"text": "Hello world",
"semantic_tags": [],
"structure_tags": [],
"time": {"start": 0.0, "end": 2.0},
"words": [],
}
],
}
]
}
with patch(
"cpv3.modules.captions.router.generate_captions",
new_callable=AsyncMock,
return_value="uploads/output/captioned_video.mp4",
):
response = await auth_client.post(
"/api/captions/get_video/",
json={
"folder": "output",
"video_s3_path": "uploads/source_video.mp4",
"transcription": mock_transcription,
},
)
assert response.status_code == 200
data = response.json()
assert "result" in data
assert data["result"] == "uploads/output/captioned_video.mp4"
async def test_get_video_unauthenticated(self, async_client: AsyncClient):
"""Test caption burn-in without auth returns 401."""
response = await async_client.post(
"/api/captions/get_video/",
json={
"folder": "output",
"video_s3_path": "test.mp4",
"transcription": {"segments": []},
},
)
assert response.status_code == 401
async def test_get_video_missing_fields(self, auth_client: AsyncClient):
"""Test caption burn-in with missing required fields returns 422."""
response = await auth_client.post(
"/api/captions/get_video/",
json={
"folder": "output",
# missing video_s3_path and transcription
},
)
assert response.status_code == 422