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)