diff --git a/tubesync/sync/tests/test_index_coverage.py b/tubesync/sync/tests/test_index_coverage.py index b3d352077..900963cb3 100644 --- a/tubesync/sync/tests/test_index_coverage.py +++ b/tubesync/sync/tests/test_index_coverage.py @@ -6,17 +6,36 @@ from sync.models import Source -@override_settings(MAX_ENTRIES_PROCESSING=2, INDEXING_CLEANUP_UNAVAILABLE_POLICY='Published ') +VIDEOS = [{"id": key} for key in ("video-a", "video-b", "video-c")] +STREAMS = [{"id": key} for key in ("stream-a", "stream-b", "stream-c")] + + class IndexCoverageTests(SimpleTestCase): - def test_capped_queue_retains_complete_removal_keys(self): - videos = [{"id": key} for key in ("video-a", "video-b", "video-c")] - streams = [{"id": key} for key in ("stream-a", "stream-b", "stream-c")] - for mixed in (False, True): - with self.subTest(mixed=mixed): - source = Source(index_videos=True, index_streams=mixed) - with patch.object(source, "get_index", side_effect=lambda kind: videos if kind == "videos" else streams): - processing, upstream = source.index_media() - self.assertEqual(len(processing), 2) - expected = {row["id"] for row in videos + (streams if mixed else [])} - self.assertEqual(upstream, expected) - self.assertEqual((expected | {"genuinely-removed"}) - upstream, {"genuinely-removed"}) + def index(self, cap, mixed): + source = Source(index_videos=True, index_streams=mixed) + with override_settings(MAX_ENTRIES_PROCESSING=cap), patch.object( + source, "get_index", side_effect=lambda kind: VIDEOS if kind == "videos" else STREAMS, + ): + processing, published = source.index_media() + return [row["id"] for row in processing], published + + def test_processing_order_is_unchanged(self): + # The order index_media() produced before it also returned the published keys. + expected = { + (0, False): ["video-c", "video-b", "video-a"], + (0, True): ["video-c", "video-b", "video-a", "stream-c", "stream-b", "stream-a"], + (2, False): ["video-b", "video-a"], + (2, True): ["video-a", "stream-a"], + (4, False): ["video-c", "video-b", "video-a"], + (4, True): ["video-b", "video-a", "stream-b", "stream-a"], + } + for (cap, mixed), order in expected.items(): + with self.subTest(cap=cap, mixed=mixed): + self.assertEqual(self.index(cap, mixed)[0], order) + + def test_published_keys_include_media_beyond_the_cap(self): + for cap in (0, 2, 4): + for mixed in (False, True): + with self.subTest(cap=cap, mixed=mixed): + expected = {row["id"] for row in VIDEOS + (STREAMS if mixed else [])} + self.assertEqual(self.index(cap, mixed)[1], expected)