from django.contrib.auth.models import User from django.test import TestCase from django.urls import reverse from shop.models import WishlistedProduct from shop.tests.mixins import CreateProductsMixin 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_not_logged_user_create_wishlisted_product(self): assert WishlistedProduct.objects.count() == 0 response = self.client.post(reverse('web:add_to_wishlist'), {'product': self.product.pk}) assert response.status_code == 400 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() def test_logged_user_wishlist(self): WishlistedProduct.objects.create(user=self.user, product=self.product) self.client.force_login(self.user) response = self.client.get(reverse('web:wishlist')) assert response.status_code == 200 def test_not_logged_user_wishlist(self): WishlistedProduct.objects.create(user=self.user, product=self.product) response = self.client.get(reverse('web:wishlist')) assert response.status_code == 302 def test_list_wishlisted_products(self): WishlistedProduct.objects.create(user=self.user, product=self.product) self.client.force_login(self.user) response = self.client.get(reverse('web:list_wishlisted_products')) assert response.status_code == 200