mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-06-20 21:18:13 +02:00
52 lines
1.4 KiB
Python
52 lines
1.4 KiB
Python
"""Streaming a podcast's rendered audio over HTTP.
|
|
|
|
A ready podcast streams its bytes; an in-flight one is 409, a stored-but-missing
|
|
object is 404. Storage is an in-memory backend (the object store is a boundary).
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import pytest
|
|
|
|
from app.podcasts.persistence import PodcastStatus
|
|
|
|
pytestmark = pytest.mark.integration
|
|
|
|
BASE = "/api/v1/podcasts"
|
|
|
|
|
|
async def test_stream_serves_stored_audio(
|
|
client, db_search_space, make_podcast, fake_storage
|
|
):
|
|
podcast = await make_podcast(
|
|
search_space_id=db_search_space.id, status=PodcastStatus.READY
|
|
)
|
|
fake_storage.objects["podcasts/audio.mp3"] = b"the-audio"
|
|
|
|
resp = await client.get(f"{BASE}/{podcast.id}/stream")
|
|
|
|
assert resp.status_code == 200
|
|
assert resp.headers["content-type"] == "audio/mpeg"
|
|
assert resp.content == b"the-audio"
|
|
|
|
|
|
async def test_stream_409_while_in_flight(client, db_search_space, make_podcast):
|
|
podcast = await make_podcast(
|
|
search_space_id=db_search_space.id, status=PodcastStatus.DRAFTING
|
|
)
|
|
|
|
resp = await client.get(f"{BASE}/{podcast.id}/stream")
|
|
|
|
assert resp.status_code == 409
|
|
|
|
|
|
async def test_stream_404_when_object_missing(
|
|
client, db_search_space, make_podcast, fake_storage
|
|
):
|
|
podcast = await make_podcast(
|
|
search_space_id=db_search_space.id, status=PodcastStatus.READY
|
|
)
|
|
|
|
resp = await client.get(f"{BASE}/{podcast.id}/stream")
|
|
|
|
assert resp.status_code == 404
|