import asyncio import time import pytest @pytest.mark.usefixtures("setup_database") @pytest.mark.usefixtures("celery_session_app") @pytest.mark.usefixtures("celery_session_worker") @pytest.mark.asyncio async def test_transcript_upload_file( tmpdir, dummy_llm, dummy_processors, dummy_diarization, dummy_storage, client, ): # create a transcript response = await client.post("/transcripts", json={"name": "test"}) assert response.status_code == 200 assert response.json()["status"] == "idle" tid = response.json()["id"] # upload mp3 response = await client.post( f"/transcripts/{tid}/record/upload?chunk_number=0&total_chunks=1", files={ "chunk": ( "test_short.wav", open("tests/records/test_short.wav", "rb"), "audio/mpeg", ), }, ) assert response.status_code == 200 assert response.json()["status"] == "ok" # wait the processing to finish (max 10 minutes) timeout_seconds = 600 # 10 minutes start_time = time.monotonic() while (time.monotonic() - start_time) < timeout_seconds: # fetch the transcript and check if it is ended resp = await client.get(f"/transcripts/{tid}") assert resp.status_code == 200 if resp.json()["status"] in ("ended", "error"): break await asyncio.sleep(1) else: pytest.fail(f"Processing timed out after {timeout_seconds} seconds") # check the transcript is ended transcript = resp.json() assert transcript["status"] == "ended" assert transcript["short_summary"] == "LLM SHORT SUMMARY" assert transcript["title"] == "Llm Title" # check topics and transcript response = await client.get(f"/transcripts/{tid}/topics") assert response.status_code == 200 assert len(response.json()) == 1 assert "want to share" in response.json()[0]["transcript"]