github.com/ismailbayram/bigpicture@v0.0.0-20231225173155-e4b21f5efcff/internal/browser/pyproject/baskets/tests/test_views.py (about)

     1  import json
     2  from model_mommy import mommy
     3  from django.test import TestCase
     4  from rest_framework.reverse import reverse_lazy
     5  from rest_framework import status
     6  
     7  from base.test import BaseTestViewMixin
     8  from cars.enums import CarType
     9  from cars.service import CarService
    10  from products.service import ProductService
    11  from baskets.service import BasketService
    12  
    13  
    14  class BasketViewSetTest(TestCase, BaseTestViewMixin):
    15      def setUp(self):
    16          self.service = BasketService()
    17          self.product_service = ProductService()
    18          self.car_service = CarService()
    19          self.init_users()
    20          self.store = mommy.make('stores.Store', washer_profile=self.washer_profile,
    21                                  is_approved=True, is_active=True)
    22          self.store2 = mommy.make('stores.Store', washer_profile=self.washer2_profile,
    23                                   is_approved=True, is_active=True)
    24          self.product1 = self.product_service.create_primary_product(self.store)
    25          self.product2 = self.product_service.create_product(name='Parfume', store=self.store,
    26                                                              washer_profile=self.store.washer_profile)
    27          self.product3 = self.product_service.create_primary_product(self.store2)
    28          self.car = self.car_service.create_car(licence_plate="34FH3773", car_type=CarType.sedan,
    29                                                 customer_profile=self.customer_profile)
    30  
    31      def test_view_basket(self):
    32          url = reverse_lazy('api:basket')
    33  
    34          response = self.client.get(url)
    35          self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
    36  
    37          headers = {'HTTP_AUTHORIZATION': f'Token {self.customer2_token}'}
    38          response = self.client.get(url, content_type='application/json', **headers)
    39          self.assertEqual(response.status_code, status.HTTP_406_NOT_ACCEPTABLE)
    40  
    41          headers = {'HTTP_AUTHORIZATION': f'Token {self.customer_token}'}
    42          response = self.client.get(url, content_type='application/json', **headers)
    43          self.assertEqual(response.status_code, status.HTTP_200_OK)
    44          jresponse = json.loads(response.content)
    45          self.assertEqual(jresponse['basket']['total_amount'], '0.00')
    46          self.assertEqual(jresponse['basket']['total_quantity'], 0)
    47          self.assertEqual(jresponse['basket']['car']['pk'], self.car.pk)
    48          self.assertEqual(len(jresponse['basket']['basketitem_set']), 0)
    49          self.assertEqual(len(jresponse['basket']['discountitem_set']), 0)
    50  
    51          headers = {'HTTP_AUTHORIZATION': f'Token {self.washer_token}'}
    52          response = self.client.get(url, content_type='application/json', **headers)
    53          self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
    54  
    55          headers = {'HTTP_AUTHORIZATION': f'Token {self.worker_token}'}
    56          response = self.client.get(url, content_type='application/json', **headers)
    57          self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
    58  
    59      def test_add_item(self):
    60          url = reverse_lazy('api:basket')
    61          data = {
    62              "product": self.product1.pk
    63          }
    64  
    65          response = self.client.post(url, data=data)
    66          self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
    67  
    68          headers = {'HTTP_AUTHORIZATION': f'Token {self.customer_token}'}
    69          response = self.client.post(url, data=data, content_type='application/json', **headers)
    70          self.assertEqual(response.status_code, status.HTTP_201_CREATED)
    71          jresponse = json.loads(response.content)
    72          self.assertEqual(jresponse['basket']['total_amount'], str(self.product1.price(self.car.car_type)))
    73          self.assertEqual(jresponse['basket']['total_quantity'], 1)
    74          self.assertEqual(len(jresponse['basket']['basketitem_set']), 1)
    75  
    76          response = self.client.post(url, data=data, content_type='application/json', **headers)
    77          self.assertEqual(response.status_code, status.HTTP_406_NOT_ACCEPTABLE)
    78  
    79          data.update({"product": self.product2.pk})
    80          response = self.client.post(url, data=data, content_type='application/json', **headers)
    81          self.assertEqual(response.status_code, status.HTTP_201_CREATED)
    82          jresponse = json.loads(response.content)
    83          self.assertEqual(jresponse['basket']['total_amount'],
    84                           str(self.product1.price(self.car.car_type) + self.product2.price(self.car.car_type)))
    85          self.assertEqual(jresponse['basket']['total_quantity'], 2)
    86          self.assertEqual(len(jresponse['basket']['basketitem_set']), 2)
    87  
    88          self.product_service.delete_product(self.product2)
    89          response = self.client.get(url, content_type='application/json', **headers)
    90          self.assertEqual(response.status_code, status.HTTP_200_OK)
    91          jresponse = json.loads(response.content)
    92          self.assertNotEqual(len(jresponse['basket']['warning_messages']), 0)
    93  
    94          data.update({"product": self.product3.pk})
    95          response = self.client.post(url, data=data, content_type='application/json', **headers)
    96          self.assertEqual(response.status_code, status.HTTP_201_CREATED)
    97          jresponse = json.loads(response.content)
    98          self.assertEqual(jresponse['basket']['total_amount'], str(self.product3.price(self.car.car_type)))
    99          self.assertEqual(jresponse['basket']['total_quantity'], 1)
   100          self.assertEqual(len(jresponse['basket']['basketitem_set']), 1)
   101  
   102          headers = {'HTTP_AUTHORIZATION': f'Token {self.washer_token}'}
   103          response = self.client.post(url, data=data, content_type='application/json', **headers)
   104          self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
   105  
   106          headers = {'HTTP_AUTHORIZATION': f'Token {self.worker_token}'}
   107          response = self.client.post(url, data=data, content_type='application/json', **headers)
   108          self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
   109  
   110      def test_delete_item(self):
   111          url = reverse_lazy('api:basket')
   112          data = {
   113              "product": self.product1.pk
   114          }
   115  
   116          response = self.client.delete(url, data=data)
   117          self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
   118  
   119          headers = {'HTTP_AUTHORIZATION': f'Token {self.customer_token}'}
   120          response = self.client.post(url, data=data, content_type='application/json', **headers)
   121          self.assertEqual(response.status_code, status.HTTP_201_CREATED)
   122  
   123          response = self.client.delete(url, data=data, content_type='application/json', **headers)
   124          self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
   125          response = self.client.get(url, content_type='application/json', **headers)
   126          self.assertEqual(response.status_code, status.HTTP_200_OK)
   127          jresponse = json.loads(response.content)
   128          self.assertEqual(jresponse['basket']['total_amount'], '0.00')
   129          self.assertEqual(jresponse['basket']['total_quantity'], 0)
   130          self.assertEqual(len(jresponse['basket']['basketitem_set']), 0)
   131  
   132          headers = {'HTTP_AUTHORIZATION': f'Token {self.washer_token}'}
   133          response = self.client.delete(url, data=data, content_type='application/json', **headers)
   134          self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
   135  
   136          headers = {'HTTP_AUTHORIZATION': f'Token {self.worker_token}'}
   137          response = self.client.delete(url, data=data, content_type='application/json', **headers)
   138          self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)