From 3dae593b79b2ee55defc3d3088923efb558bc82b Mon Sep 17 00:00:00 2001 From: Jan Gregorczyk Date: Sat, 17 Feb 2024 20:06:36 +0100 Subject: [PATCH] test: cart api with tests updated/refactored --- Dshop/apps/products_catalogue/api_views.py | 3 ++ .../tests/test_api_persistent_cart.py | 29 +++++++++++-------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/Dshop/apps/products_catalogue/api_views.py b/Dshop/apps/products_catalogue/api_views.py index 402b996..2b183a7 100644 --- a/Dshop/apps/products_catalogue/api_views.py +++ b/Dshop/apps/products_catalogue/api_views.py @@ -2,6 +2,7 @@ from rest_framework import viewsets from rest_framework.views import APIView from rest_framework.response import Response +from rest_framework.permissions import AllowAny from rest_framework import status from dj_shop_cart.cart import get_cart_class from .models import Product @@ -17,7 +18,9 @@ class ProductViewSet(viewsets.ModelViewSet): class CartAPIView(APIView): + permission_classes = (AllowAny ,) serializer_class = CartReadSerializer + def post(self, request): write_serializer = CartWriteSerializer(data=request.data, context={'request': request}) if write_serializer.is_valid(): diff --git a/Dshop/apps/products_catalogue/tests/test_api_persistent_cart.py b/Dshop/apps/products_catalogue/tests/test_api_persistent_cart.py index b426d5f..512f248 100644 --- a/Dshop/apps/products_catalogue/tests/test_api_persistent_cart.py +++ b/Dshop/apps/products_catalogue/tests/test_api_persistent_cart.py @@ -33,17 +33,18 @@ def assert_data_empty(data): @pytest.mark.django_db -def test_get_cart_empty(api_client): - response = api_client.get(reverse("api_cart")) +def test_get_cart_empty(): + response = APIClient().get(reverse("api_cart")) assert response.status_code == status.HTTP_200_OK assert_data_empty(response.data) @pytest.mark.django_db -def test_add(api_client, tv_product): +def test_add(tv_product): data = { 'items': [ {'product_pk': tv_product.pk, 'quantity': 10} ] } + api_client = APIClient() response = api_client.post(reverse("api_cart"), data) assert_products_data(response.data, [tv_product], [10]) assert response.status_code == status.HTTP_201_CREATED @@ -72,7 +73,7 @@ def test_add_relogin_get(tv_product): @pytest.mark.django_db -def test_add_ten_and_get(api_client, ten_tv_products): +def test_add_ten_and_get(ten_tv_products): quantities = [1, 1, 6, 8, 3, 4, 2, 26, 1, 10] data = { @@ -81,6 +82,7 @@ def test_add_ten_and_get(api_client, ten_tv_products): for product, quantity in zip(ten_tv_products, quantities) ] } + api_client = APIClient() response = api_client.post(reverse("api_cart"), data) assert response.status_code == status.HTTP_201_CREATED assert_products_data(response.data, ten_tv_products, quantities) @@ -90,7 +92,7 @@ def test_add_ten_and_get(api_client, ten_tv_products): @pytest.mark.django_db -def test_add_ten_replace_with_one(api_client, ten_tv_products, tv_product): +def test_add_ten_replace_with_one(ten_tv_products, tv_product): quantities = [11, 1, 3, 8, 4, 5, 6, 7, 1, 10] data = { 'items': [ @@ -98,6 +100,7 @@ def test_add_ten_replace_with_one(api_client, ten_tv_products, tv_product): for product, quantity in zip(ten_tv_products, quantities) ] } + api_client = APIClient() response = api_client.post(reverse("api_cart"), data) assert response.status_code == status.HTTP_201_CREATED @@ -115,7 +118,7 @@ def test_add_ten_replace_with_one(api_client, ten_tv_products, tv_product): @pytest.mark.django_db -def test_delete_ten(api_client, ten_tv_products): +def test_delete_ten(ten_tv_products): quantities = [1, 1, 6, 8, 3, 4, 2, 26, 1, 10] data = { 'items': [ @@ -123,6 +126,7 @@ def test_delete_ten(api_client, ten_tv_products): for product, quantity in zip(ten_tv_products, quantities) ] } + api_client = APIClient() response = api_client.post(reverse("api_cart"), data) assert response.status_code == status.HTTP_201_CREATED response = api_client.post(reverse("api_cart"), {}) @@ -133,20 +137,20 @@ def test_delete_ten(api_client, ten_tv_products): @pytest.mark.django_db -def test_get_non_unique_pks(api_client, tv_product): +def test_get_non_unique_pks(tv_product): data = { 'items':[ {'product_pk': tv_product.pk, 'quantity': 2}, {'product_pk': tv_product.pk, 'quantity': 3} ] } - response = api_client.post(reverse("api_cart"), data) + response = APIClient().post(reverse("api_cart"), data) assert str(response.data['items'][0]) == "product_pk must be unique within items." assert response.status_code == status.HTTP_400_BAD_REQUEST @pytest.mark.django_db -def test_get_non_existing_pks(api_client, tv_product): +def test_get_non_existing_pks(tv_product): NON_EXISTING_ID = 999999 data = { 'items':[ @@ -154,20 +158,21 @@ def test_get_non_existing_pks(api_client, tv_product): {'product_pk': NON_EXISTING_ID, 'quantity': 3} ] } + api_client = APIClient() response = api_client.post(reverse("api_cart"), data) assert response.status_code == status.HTTP_404_NOT_FOUND response = api_client.get(reverse("api_cart")) - assert_data_empty(response.data) + assert_products_data(response.data, [tv_product], [2]) @pytest.mark.django_db -def test_get_zero_quantities(api_client, tv_product): +def test_get_zero_quantities(tv_product): data = { 'items':[ {'product_pk': tv_product.pk, 'quantity': 0} ] } - response = api_client.post(reverse("api_cart"), data) + response = APIClient().post(reverse("api_cart"), data) error_str = str(response.data['items'][0]['quantity'][0]) assert response.status_code == status.HTTP_400_BAD_REQUEST assert error_str == 'Ensure this value is greater than or equal to 1.'