mod: галерея (8) Общая галерея с фильтрами стала универсальной для всех "этажей"
This commit is contained in:
@@ -794,35 +794,7 @@ class GalleryFreshFloorTests(BaseMediaTestCase):
|
||||
item = TbHypn0Item.objects.first()
|
||||
self.assertContains(response, f"gallery-card-{item.s_hash_id}")
|
||||
|
||||
def test_gallery_floor_fresh_pagination(self):
|
||||
# Создаем 20 картин
|
||||
svg_bytes = b'<svg><circle/></svg>'
|
||||
for i in range(20):
|
||||
item = TbHypn0Item(
|
||||
s_title=f"Кандидат #{i}",
|
||||
file_svg=ContentFile(svg_bytes, name=f"cand_{i}.svg"),
|
||||
i_views_count=i,
|
||||
i_level=TbHypn0Item.Level.CANDIDATE,
|
||||
is_public=True,
|
||||
)
|
||||
item.save(visitor_uuid_or_fp=self.vid)
|
||||
|
||||
# Страница 1 (должно быть 16 штук)
|
||||
url = reverse("hypn0_site:gallery_floor", kwargs={"floor_slug": "fresh"})
|
||||
response_p1 = self.client.get(url)
|
||||
self.assertEqual(response_p1.status_code, 200)
|
||||
self.assertContains(response_p1, "Плеск бессознательного")
|
||||
self.assertContains(response_p1, "FRESH STREAM")
|
||||
self.assertEqual(len(response_p1.context["page_obj"]), 16)
|
||||
self.assertContains(response_p1, "Фаза 1 из 2")
|
||||
|
||||
# Страница 2 (должно быть 4 штуки)
|
||||
response_p2 = self.client.get(url, data={"page": 2})
|
||||
self.assertEqual(response_p2.status_code, 200)
|
||||
self.assertEqual(len(response_p2.context["page_obj"]), 4)
|
||||
self.assertContains(response_p2, "Фаза 2 из 2")
|
||||
|
||||
def test_gallery_floors_curated_and_top(self):
|
||||
def test_gallery_floors_curated_and_top_getters(self):
|
||||
from hypn0_site.views import get_floor_curated, get_floor_top
|
||||
|
||||
svg_bytes = b'<svg><circle/></svg>'
|
||||
@@ -854,30 +826,12 @@ class GalleryFreshFloorTests(BaseMediaTestCase):
|
||||
self.assertEqual(len(top_res), 1)
|
||||
self.assertEqual(top_res[0].pk, item_top.pk)
|
||||
|
||||
# Проверяем рендеринг страниц этажей
|
||||
url_curated = reverse("hypn0_site:gallery_floor", kwargs={"floor_slug": "curated"})
|
||||
resp_c = self.client.get(url_curated)
|
||||
self.assertEqual(resp_c.status_code, 200)
|
||||
self.assertContains(resp_c, "Одобрено Мозговым Слизнем")
|
||||
self.assertContains(resp_c, "CURATED")
|
||||
|
||||
url_top = reverse("hypn0_site:gallery_floor", kwargs={"floor_slug": "top"})
|
||||
resp_t = self.client.get(url_top)
|
||||
self.assertEqual(resp_t.status_code, 200)
|
||||
self.assertContains(resp_t, "Глубокий транс")
|
||||
self.assertContains(resp_t, "TOP TIER")
|
||||
|
||||
# Проверяем отображение на главной странице
|
||||
resp_idx = self.client.get(reverse("hypn0_site:index"))
|
||||
self.assertEqual(resp_idx.status_code, 200)
|
||||
self.assertContains(resp_idx, f"gallery-card-{item_curated.s_hash_id}")
|
||||
self.assertContains(resp_idx, f"gallery-card-{item_top.s_hash_id}")
|
||||
|
||||
def test_gallery_floor_unknown_404(self):
|
||||
url = reverse("hypn0_site:gallery_floor", kwargs={"floor_slug": "non_existent"})
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
|
||||
class CardBgStyleTests(BaseMediaTestCase):
|
||||
"""Тестирование вычисления адаптивных стилей подложки карточки."""
|
||||
|
||||
@@ -11,8 +11,6 @@ urlpatterns = [
|
||||
path("publish", views.publish, name="publish"),
|
||||
path("gallery", views.gallery_archive, name="gallery_archive"),
|
||||
path("gallery/random", views.gallery_random, name="gallery_random"),
|
||||
path("gallery/random-pool", views.gallery_random, name="gallery_random_pool"),
|
||||
path("gallery/floor/<slug:floor_slug>", views.gallery_floor, name="gallery_floor"),
|
||||
path("gallery/<str:hash_id>", views.gallery_detail, name="gallery_detail"),
|
||||
path("gallery/<str:hash_id>/download", views.gallery_download, name="gallery_download"),
|
||||
path("gallery/<str:hash_id>/vote", views.gallery_vote, name="gallery_vote"),
|
||||
|
||||
@@ -141,55 +141,6 @@ def gallery_archive(request: HttpRequest) -> HttpResponse:
|
||||
return render(request, "gallery/archive.html", context)
|
||||
|
||||
|
||||
def gallery_floor(request: HttpRequest, floor_slug: str) -> HttpResponse:
|
||||
"""
|
||||
Страница полного просмотра конкретного этажа галереи с пагинацией (по 16 карточек).
|
||||
"""
|
||||
floors_config = {
|
||||
"fresh": {
|
||||
"title": "Плеск бессознательного",
|
||||
"badge": "FRESH STREAM",
|
||||
"badge_color": "amber",
|
||||
"subtitle": "Свежие галлюцинации из инкубатора • Первичная оценка сообщества",
|
||||
"getter": get_floor_fresh,
|
||||
},
|
||||
"curated": {
|
||||
"title": "Одобрено Мозговым Слизнем",
|
||||
"badge": "CURATED",
|
||||
"badge_color": "cyan",
|
||||
"subtitle": "Проверено контролем качества • Высокий психоделический резонанс",
|
||||
"getter": get_floor_curated,
|
||||
},
|
||||
"top": {
|
||||
"title": "Глубокий транс",
|
||||
"badge": "TOP TIER",
|
||||
"badge_color": "emerald",
|
||||
"subtitle": "Золотой фонд гипноза • Абсолютное подчинение воли",
|
||||
"getter": get_floor_top,
|
||||
},
|
||||
}
|
||||
|
||||
if floor_slug not in floors_config:
|
||||
raise Http404("Этаж транса не обнаружен в матрице")
|
||||
|
||||
cfg = floors_config[floor_slug]
|
||||
items_qs = cfg["getter"](limit=None)
|
||||
|
||||
paginator = Paginator(items_qs, 16)
|
||||
page_number = request.GET.get("page", 1)
|
||||
page_obj = paginator.get_page(page_number)
|
||||
|
||||
context = {
|
||||
"floor_slug": floor_slug,
|
||||
"floor_title": cfg["title"],
|
||||
"floor_badge": cfg["badge"],
|
||||
"floor_badge_color": cfg["badge_color"],
|
||||
"floor_subtitle": cfg["subtitle"],
|
||||
"page_obj": page_obj,
|
||||
}
|
||||
return render(request, "gallery/floor.html", context)
|
||||
|
||||
|
||||
@ensure_csrf_cookie
|
||||
def index(request: HttpRequest | None) -> HttpResponse:
|
||||
fresh_items = get_floor_fresh(limit=8)
|
||||
|
||||
Reference in New Issue
Block a user