feat: added tests for wishlist
This commit is contained in:
@@ -4,7 +4,9 @@ from web.models import WebSettings
|
||||
|
||||
def web_settings(request):
|
||||
settings = WebSettings.load()
|
||||
navbar_categories = ProductCategory.objects.filter(hidden=False, show_in_navbar=True)
|
||||
navbar_categories = ProductCategory.objects.filter(
|
||||
hidden=False, show_in_navbar=True
|
||||
)
|
||||
|
||||
return {
|
||||
"logo": settings.logo.url if settings.logo else "",
|
||||
|
||||
@@ -13,5 +13,7 @@ class TestCategoryView(TestCase, CreateProductsMixin):
|
||||
category = ProductCategory.objects.create(
|
||||
name="category 1", show_in_navbar=True, hidden=False
|
||||
)
|
||||
response = self.client.get(reverse("web:category_view", kwargs={"slug": category.slug}))
|
||||
response = self.client.get(
|
||||
reverse("web:category_view", kwargs={"slug": category.slug})
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
from django.contrib.auth.models import User
|
||||
from django.test import TestCase
|
||||
from django.urls import reverse
|
||||
|
||||
from shop.models import Cart, CartItem, WishlistedProduct
|
||||
from shop.tests.mixins import CreateProductsMixin
|
||||
from web.settings import ANONYMOUS_CART_ID_COOKIE_NAME
|
||||
|
||||
|
||||
class TestWishlist(TestCase, CreateProductsMixin):
|
||||
def setUp(self):
|
||||
self.product = self.create_product()
|
||||
self.user = User.objects.create_user("vader", "darth@vader.com", "ihatesand")
|
||||
|
||||
def test_logged_user_wishlist_button_for_non_wishlisted_product(self):
|
||||
assert WishlistedProduct.objects.count() == 0
|
||||
self.client.force_login(self.user)
|
||||
response = self.client.get(
|
||||
reverse("web:wishlist_button", kwargs={"pk": self.product.pk})
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
||||
def test_logged_user_wishlist_button_for_wishlisted_product(self):
|
||||
WishlistedProduct.objects.create(
|
||||
user=self.user,
|
||||
product=self.product,
|
||||
)
|
||||
self.client.force_login(self.user)
|
||||
response = self.client.get(
|
||||
reverse("web:wishlist_button", kwargs={"pk": self.product.pk})
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
||||
def test_logged_user_create_wishlisted_product(self):
|
||||
assert WishlistedProduct.objects.count() == 0
|
||||
self.client.force_login(self.user)
|
||||
response = self.client.post(
|
||||
reverse("web:add_to_wishlist"),
|
||||
{
|
||||
"product": self.product.pk,
|
||||
}
|
||||
)
|
||||
assert response.status_code == 201
|
||||
assert WishlistedProduct.objects.filter(user=self.user, product=self.product).exists()
|
||||
|
||||
def test_logged_user_delete_wishlisted_product(self):
|
||||
wishlisted = WishlistedProduct.objects.create(
|
||||
user=self.user,
|
||||
product=self.product,
|
||||
)
|
||||
self.client.force_login(self.user)
|
||||
response = self.client.post(
|
||||
reverse("web:delete_from_wishlist", kwargs={"pk": wishlisted.pk})
|
||||
)
|
||||
assert response.status_code == 204
|
||||
assert not WishlistedProduct.objects.filter(user=self.user, product=self.product).exists()
|
||||
+11
-7
@@ -6,12 +6,12 @@ from web.views.web import (
|
||||
add_cart_item,
|
||||
add_to_wishlist,
|
||||
cart_detail,
|
||||
category_view,
|
||||
delete_cart_item,
|
||||
delete_from_wishlist,
|
||||
index,
|
||||
manifest,
|
||||
product_detail,
|
||||
category_view,
|
||||
)
|
||||
|
||||
app_name = "web"
|
||||
@@ -21,26 +21,30 @@ urlpatterns = [
|
||||
path("categories/<str:slug>/", category_view, name="category_view"),
|
||||
path("products/<int:pk>/<str:slug>/", product_detail, name="product_detail"),
|
||||
path("cart/", cart_detail, name="cart_detail"),
|
||||
|
||||
# users
|
||||
path("login/", login, name="login"),
|
||||
path("logout/", logout, name="logout"),
|
||||
path("register/", register, name="register"),
|
||||
path("reset-password/", reset_password, name="reset-password"),
|
||||
path("my-account/", my_account, name="my_account"),
|
||||
|
||||
# components
|
||||
path("web/components/products/", list_products, name="list_products"),
|
||||
path("web/components/cart-dropdown/", cart_dropdown, name="cart_dropdown"),
|
||||
path("web/components/cart/", cart, name="cart"),
|
||||
path("web/components/wishlist-button/<int:pk>/", wishlist_button, name="wishlist_button"),
|
||||
|
||||
path(
|
||||
"web/components/wishlist-button/<int:pk>/",
|
||||
wishlist_button,
|
||||
name="wishlist_button",
|
||||
),
|
||||
# api
|
||||
path("web/add-cart-item/", add_cart_item, name="add_cart_item"),
|
||||
path("web/delete-cart-item/<int:pk>/", delete_cart_item, name="delete_cart_item"),
|
||||
path("web/add-to-wishlist/", add_to_wishlist, name="add_to_wishlist"),
|
||||
path("web/delete-from-wishlist/<int:pk>/", delete_from_wishlist, name="delete_from_wishlist"),
|
||||
|
||||
path(
|
||||
"web/delete-from-wishlist/<int:pk>/",
|
||||
delete_from_wishlist,
|
||||
name="delete_from_wishlist",
|
||||
),
|
||||
# manifest
|
||||
path("manifest.json", manifest, name="manifest_json"),
|
||||
]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from decimal import Decimal
|
||||
|
||||
from django.shortcuts import render, get_object_or_404
|
||||
from django.shortcuts import get_object_or_404, render
|
||||
from django.views.generic import TemplateView
|
||||
|
||||
from shop.filters import ProductFilter
|
||||
@@ -76,11 +76,13 @@ def cart(request, *args, **kwargs):
|
||||
|
||||
|
||||
class WishlistButton(TemplateView):
|
||||
template_name = 'components/products/wishlist_button.html'
|
||||
template_name = "components/products/wishlist_button.html"
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
product = get_object_or_404(Product, pk=self.kwargs.get('pk'))
|
||||
is_wishlisted = WishlistedProduct.objects.filter(user=self.request.user, product=product).exists()
|
||||
product = get_object_or_404(Product, pk=self.kwargs.get("pk"))
|
||||
is_wishlisted = WishlistedProduct.objects.filter(
|
||||
user=self.request.user, product=product
|
||||
).exists()
|
||||
|
||||
return {
|
||||
"is_wishlisted": is_wishlisted,
|
||||
|
||||
+4
-2
@@ -27,7 +27,7 @@ class CategoryView(TemplateView):
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
settings = WebSettings.load()
|
||||
slug = kwargs.get('slug')
|
||||
slug = kwargs.get("slug")
|
||||
category = ProductCategory.objects.get(slug=slug)
|
||||
|
||||
return {
|
||||
@@ -140,7 +140,9 @@ def add_to_wishlist(request, *args, **kwargs):
|
||||
]
|
||||
)
|
||||
def delete_from_wishlist(request, pk, *args, **kwargs):
|
||||
wishlisted_item = get_object_or_404(WishlistedProduct, product_id=pk, user=request.user)
|
||||
wishlisted_item = get_object_or_404(
|
||||
WishlistedProduct, product_id=pk, user=request.user
|
||||
)
|
||||
wishlisted_item.delete()
|
||||
return HttpResponse(status=204, headers={"HX-Trigger": "updated-wishlist"})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user