test_video_recall_pagination.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import sys
  2. import unittest
  3. from pathlib import Path
  4. from unittest.mock import patch
  5. _HERE = Path(__file__).parent
  6. sys.path.insert(0, str(_HERE))
  7. from tools.video_recall import LandingVideo, fetch_landing_videos_for_account # noqa: E402
  8. def _video(video_id: int) -> LandingVideo:
  9. return LandingVideo(
  10. video_id=video_id,
  11. title=f"video-{video_id}",
  12. cover_url="",
  13. video_url="",
  14. score=0.0,
  15. rov=0.0,
  16. sim=0.0,
  17. visit_uv=0,
  18. category="",
  19. standard_element="",
  20. category_name="",
  21. demand_content_title="",
  22. demand_content_topic="",
  23. demand_content_id="",
  24. demand_type="",
  25. point_type="",
  26. dimension="",
  27. experiment_id=f"exp-{video_id}",
  28. )
  29. class VideoRecallPaginationTest(unittest.TestCase):
  30. def test_fetch_for_account_reads_up_to_three_pages_and_dedupes(self):
  31. calls = []
  32. def fake_fetch(*, crowd_package, page_size, page_num=1, source, **kwargs):
  33. calls.append((crowd_package, page_size, page_num, source))
  34. pages = {
  35. 1: [_video(1), _video(2)],
  36. 2: [_video(2), _video(3)],
  37. 3: [_video(4)],
  38. }
  39. return pages.get(page_num, [])
  40. with patch("tools.video_recall.get_account_crowd_package", return_value="回流330以上人群"), \
  41. patch("tools.video_recall.fetch_landing_videos", side_effect=fake_fetch):
  42. videos = fetch_landing_videos_for_account(
  43. 86197363,
  44. page_size=2,
  45. max_pages=3,
  46. source="prior",
  47. enable_hot_fallback=False,
  48. )
  49. self.assertEqual([1, 2, 3, 4], [v.video_id for v in videos])
  50. self.assertEqual(
  51. [
  52. ("R_330+", 2, 1, "prior"),
  53. ("R_330+", 2, 2, "prior"),
  54. ("R_330+", 2, 3, "prior"),
  55. ],
  56. calls,
  57. )
  58. if __name__ == "__main__":
  59. unittest.main()