import contextlib import json import re import uuid import requests def test_preview_url_serves_the_asset( http: requests.Session, api_base: str, asset_factory, make_asset_bytes ): scope = f"preview-url-{uuid.uuid4().hex[:6]}" name = f"{scope}.png" data = make_asset_bytes(name, 2048) body = asset_factory(name, ["output", "unit-tests", scope], {}, data) assert re.fullmatch(r"/api/view\?type=output&filename=[^&]+", body["preview_url"]), ( f"unexpected preview URL shape: {body['preview_url']!r}" ) r = http.get(api_base + body["preview_url"], timeout=120) assert r.status_code == 200, r.text assert r.content == data, "the preview URL must serve the asset's own bytes" def test_preview_url_honours_range_requests( http: requests.Session, api_base: str, asset_factory, make_asset_bytes ): scope = f"preview-range-{uuid.uuid4().hex[:6]}" name = f"{scope}.png" data = make_asset_bytes(name, 2048) body = asset_factory(name, ["output", "unit-tests", scope], {}, data) r = http.get( api_base + body["preview_url"], headers={"Range": "bytes=10-109"}, timeout=120 ) assert r.status_code == 206, ( f"expected a partial response, got {r.status_code}: native