Remove promo, add featured on main page
All checks were successful
Build and Push Docker Image / build (push) Successful in 54s

This commit is contained in:
2026-06-15 18:56:11 +02:00
parent 373cc15e4d
commit e9da339a4c
7 changed files with 325 additions and 215 deletions

View File

@@ -3,6 +3,8 @@ from django.core import mail
from django.test import SimpleTestCase, TestCase, override_settings
from django.urls import reverse, resolve
from items.models import Category, Item
@override_settings(EMAIL_BACKEND="django.core.mail.backends.locmem.EmailBackend", ADMINISTRATOR_EMAIL="admin@example.com")
class FaqQuestionTests(TestCase):
@@ -39,6 +41,50 @@ class FaqQuestionTests(TestCase):
self.assertContains(response, "Необходимо согласие на обработку персональных данных.")
class HomePopularProductsTests(TestCase):
def setUp(self):
self.category = Category.objects.create(name="Plumbing", slug="plumbing")
def test_home_page_renders_available_products(self):
visible_item = Item.objects.create(
name="Visible sink",
slug="visible-sink",
category=self.category,
price="1600.00",
is_available=True,
)
Item.objects.create(
name="Hidden sink",
slug="hidden-sink",
category=self.category,
price="1800.00",
is_available=False,
)
response = self.client.get(reverse("home"))
self.assertEqual(response.status_code, 200)
self.assertContains(response, visible_item.name)
self.assertContains(response, reverse("detail", args=[self.category.slug, visible_item.slug]))
self.assertContains(response, "1600,00 руб.")
self.assertNotContains(response, "Hidden sink")
def test_home_page_limits_popular_products_to_six(self):
for index in range(7):
Item.objects.create(
name=f"Product {index}",
slug=f"product-{index}",
category=self.category,
price="1000.00",
is_available=True,
)
response = self.client.get(reverse("home"))
self.assertEqual(response.status_code, 200)
self.assertEqual(len(response.context["home_products"]), 6)
class FaviconTests(SimpleTestCase):
def test_favicon_route_returns_icon(self):
response = self.client.get(reverse("favicon"))

View File

@@ -2,11 +2,15 @@ import logging
from django.conf import settings
from django.core.mail import send_mail
from django.db.models import BooleanField, Case, Value, When
from django.shortcuts import redirect, render
from django.urls import reverse
from django.contrib import messages
from favorites.services import get_user_favorite_item_ids
from home.forms import FaqQuestionForm
from items.models import Item
from orders.services import get_user_cart_item_ids
logger = logging.getLogger(__name__)
@@ -55,7 +59,26 @@ def index(request):
messages.success(request, "Спасибо. Ваш вопрос отправлен, мы свяжемся с вами в ближайшее время.")
return redirect(f"{reverse('home')}#faq-section")
return render(request=request, template_name='home/index.html', context={"faq_form": form})
home_products = (
Item.objects.filter(is_available=True)
.select_related("category", "subcategory")
.prefetch_related("images")
.annotate(
discount_sort=Case(
When(discount_price__isnull=False, then=Value(True)),
default=Value(False),
output_field=BooleanField(),
)
)
.order_by("-is_new", "-discount_sort", "-created_at")[:6]
)
return render(request=request, template_name='home/index.html', context={
"faq_form": form,
"home_products": home_products,
"favorite_item_ids": get_user_favorite_item_ids(request.user),
"cart_item_ids": get_user_cart_item_ids(request.user),
})
def services(request):