goon/tests/test_feed_diversify.py
goon-foss 0edc85c05f feat(api): glowny feed bez archiwum i z limitem jednego zrodla na strone
"Newest ingest" bez filtrow pomija sceny z dociagania archiwum (backfill): deep-crawl
tubepornclassic dokladal 7,9 tys. scen z lat 2016-2018 dziennie, a xhamster/xnxx/xvideos/
sxyprn kolejne 3,3 tys., wszystkie na szczycie listy. Po odcieciu eporner (2 tys. anonimowych
uploadow dziennie) mial 121 ze 150 pozycji, wiec na pierwszych 8 stronach jedno zrodlo zajmuje
najwyzej 1/3 strony, dopoki sa inne; nadmiar zjezdza nizej, nic nie ginie. Pierwsze 3 strony:
eporner 51, xvideos 24, xnxx 20, youporn 20, pornxpph 15, fullporner 12.

Z filtrami i w sekcjach JAV/Anime bez zmian.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 12:00:11 +02:00

51 lines
1.6 KiB
Python

import uuid
from app.api.scenes import _diversify_pages
def _ids(n, origin):
return [(uuid.uuid4(), origin) for _ in range(n)]
def _mixed(flood_share=0.7, n=300, others=("b", "c", "d")):
"""Jak feed 2026-09-19: jedno zrodlo zalewa, reszta kapie, wszystko w kolejnosci czasu."""
items, k = [], 0
for i in range(n):
if (i % 10) < flood_share * 10:
items.append((uuid.uuid4(), "flood"))
else:
items.append((uuid.uuid4(), others[k % len(others)]))
k += 1
return items
def test_flood_is_capped_while_other_sources_exist():
items = _mixed()
pages = _diversify_pages(items, 10, 1 / 3)
origin = dict(items)
# 90 scen z innych zrodel wystarcza na 15 stron po 6; tyle stron trzyma limit
for pg in pages[:15]:
assert len(pg) == 10
assert sum(origin[i] == "flood" for i in pg) <= 4
def test_nothing_is_lost_and_pages_are_full():
items = _mixed()
pages = _diversify_pages(items, 10, 1 / 3)
assert sorted(i for pg in pages for i in pg) == sorted(i for i, _ in items)
assert all(len(pg) == 10 for pg in pages[:-1])
def test_two_sources_still_fill_pages():
items = _ids(40, "a") + _ids(40, "b")
pages = _diversify_pages(items, 10, 1 / 3)
assert all(len(pg) == 10 for pg in pages)
def test_order_within_source_is_kept():
items = _mixed()
flat = [i for pg in _diversify_pages(items, 10, 1 / 3) for i in pg]
for src in ("flood", "b", "c", "d"):
mine = [i for i, o in items if o == src]
mine_set = set(mine)
assert [i for i in flat if i in mine_set] == mine