test_media_service.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. from __future__ import annotations
  2. from acquisition.media.service import stabilize_media_urls
  3. def test_stabilize_media_urls_keeps_order_and_positions():
  4. calls = []
  5. def uploader(url: str, media_type: str) -> str:
  6. calls.append((url, media_type))
  7. return f"https://cdn.test/{media_type}/{len(calls)}"
  8. rows = stabilize_media_urls(
  9. image_urls=["https://src.test/a.jpg", "", "https://src.test/b.jpg"],
  10. video_urls=["https://src.test/c.mp4"],
  11. uploader=uploader,
  12. )
  13. assert [(row.media_type, row.position) for row in rows] == [
  14. ("image", 1),
  15. ("image", 2),
  16. ("video", 3),
  17. ]
  18. assert rows[0].source_url == "https://src.test/a.jpg"
  19. assert rows[0].cdn_url == "https://cdn.test/image/1"
  20. assert rows[-1].cdn_url == "https://cdn.test/video/3"
  21. assert calls == [
  22. ("https://src.test/a.jpg", "image"),
  23. ("https://src.test/b.jpg", "image"),
  24. ("https://src.test/c.mp4", "video"),
  25. ]
  26. def test_stabilize_media_urls_falls_back_to_source_on_upload_error():
  27. def uploader(url: str, media_type: str) -> str:
  28. raise RuntimeError(f"{media_type} upload failed")
  29. rows = stabilize_media_urls(
  30. image_urls=["https://src.test/a.jpg"],
  31. video_urls=["https://src.test/c.mp4"],
  32. uploader=uploader,
  33. )
  34. assert [row.cdn_url for row in rows] == [
  35. "https://src.test/a.jpg",
  36. "https://src.test/c.mp4",
  37. ]
  38. assert [row.status for row in rows] == ["ready", "ready"]