Coverage for app / backend / src / tests / test_media.py: 100%
32 statements
« prev ^ index » next coverage.py v7.13.2, created at 2026-02-03 06:18 +0000
« prev ^ index » next coverage.py v7.13.2, created at 2026-02-03 06:18 +0000
1from urllib.parse import parse_qs, urlparse
3import pytest
4from google.protobuf import empty_pb2
5from sqlalchemy import select
7from couchers.crypto import b64decode, random_hex
8from couchers.db import session_scope
9from couchers.models import InitiatedUpload, Upload
10from couchers.proto import media_pb2
11from tests.fixtures.db import generate_user
12from tests.fixtures.sessions import api_session, media_session
15@pytest.fixture(autouse=True)
16def _(testconfig):
17 pass
20def test_media_upload(db):
21 user, token = generate_user()
23 media_bearer_token = random_hex(32)
25 with api_session(token) as api:
26 res = api.InitiateMediaUpload(empty_pb2.Empty())
28 params = parse_qs(urlparse(res.upload_url).query)
29 data = b64decode(params["data"][0])
31 response = media_pb2.UploadRequest.FromString(data)
32 key = response.key
34 filename = random_hex(32)
36 req = media_pb2.UploadConfirmationReq(key=key, filename=filename)
38 with session_scope() as session:
39 # make sure it exists
40 assert (
41 session.execute(select(InitiatedUpload).where(InitiatedUpload.key == key)).scalar_one_or_none() is not None
42 )
44 with media_session(media_bearer_token) as media:
45 res = media.UploadConfirmation(req)
47 with session_scope() as session:
48 # make sure it exists
49 assert (
50 session.execute(
51 select(Upload)
52 .where(Upload.key == key)
53 .where(Upload.filename == filename)
54 .where(Upload.creator_user_id == user.id)
55 ).scalar_one_or_none()
56 is not None
57 )
59 with session_scope() as session:
60 # make sure it was deleted
61 assert not session.execute(select(InitiatedUpload)).scalar_one_or_none()