122 lines
4.7 KiB
Python
122 lines
4.7 KiB
Python
from django.contrib.auth.models import User
|
|
from ecommerce.models import Item, Order
|
|
from rest_framework.authtoken.models import Token
|
|
from rest_framework.test import APIClient
|
|
from rest_framework.test import APITestCase
|
|
from rest_framework import status
|
|
|
|
|
|
class EcommerceTestCase(APITestCase):
|
|
"""
|
|
Conjunto de pruebas para Items y Orders
|
|
"""
|
|
def setUp(self):
|
|
|
|
Item.objects.create(title= "Demo item 1",description= "Descripción de prueba para item demo 1",price= 500,stock= 20)
|
|
Item.objects.create(title= "Demo item 2",description= "Descripción de prueba para item demo 2",price= 700,stock= 15)
|
|
Item.objects.create(title= "Demo item 3",description= "Descripción de prueba para item demo 3",price= 300,stock= 18)
|
|
Item.objects.create(title= "Demo item 4",description= "Descripción de prueba para item demo 4",price= 400,stock= 14)
|
|
Item.objects.create(title= "Demo item 5",description= "Descripción de prueba para item demo 5",price= 500,stock= 30)
|
|
self.items = Item.objects.all()
|
|
self.user = User.objects.create_user(
|
|
username='testuser1',
|
|
password='esta_es_una_prueba',
|
|
email='testuser1@test.com'
|
|
)
|
|
Order.objects.create(item = Item.objects.first(), user = User.objects.first(), quantity=1)
|
|
Order.objects.create(item = Item.objects.first(), user = User.objects.first(), quantity=2)
|
|
|
|
#The app uses token authentication
|
|
self.token = Token.objects.get(user = self.user)
|
|
self.client = APIClient()
|
|
|
|
#We pass the token in all calls to the API
|
|
self.client.credentials(HTTP_AUTHORIZATION='Token ' + self.token.key)
|
|
|
|
|
|
def test_get_all_items(self):
|
|
'''
|
|
test ItemsViewSet método list
|
|
'''
|
|
self.assertEqual(self.items.count(), 5)
|
|
response = self.client.get('/item/')
|
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
|
|
def test_get_one_item(self):
|
|
'''
|
|
test ItemsViewSet método retrieve
|
|
'''
|
|
for item in self.items:
|
|
response = self.client.get(f'/item/{item.id}/')
|
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
|
|
def test_order_is_more_than_stock(self):
|
|
'''
|
|
test Item.check_stock cuando order.quantity > item.stock
|
|
'''
|
|
for i in self.items:
|
|
current_stock = i.stock
|
|
self.assertEqual(i.check_stock(current_stock + 1), False)
|
|
|
|
def test_order_equals_stock(self):
|
|
'''
|
|
test Item.check_stock cuando order.quantity == item.stock
|
|
'''
|
|
for i in self.items:
|
|
current_stock = i.stock
|
|
self.assertEqual(i.check_stock(current_stock), True)
|
|
|
|
def test_order_is_less_than_stock(self):
|
|
'''
|
|
test Item.check_stock cuando order.quantity < item.stock
|
|
'''
|
|
for i in self.items:
|
|
current_stock = i.stock
|
|
self.assertTrue(i.check_stock(current_stock - 1), True)
|
|
|
|
def test_create_order_with_more_than_stock(self):
|
|
'''
|
|
test OrdersViewSet método create cuando order.quantity > item.stock
|
|
'''
|
|
for i in self.items:
|
|
stock = i.stock
|
|
data = {"item": str(i.id), "quantity": str(stock+1)}
|
|
response = self.client.post(f'/order/', data)
|
|
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
|
|
|
def test_create_order_with_less_than_stock(self):
|
|
'''
|
|
test OrdersViewSet método create cuando order.quantity < item.stock
|
|
'''
|
|
for i in self.items:
|
|
data = {"item": str(i.id), "quantity": 1}
|
|
response = self.client.post(f'/order/',data)
|
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
|
|
def test_create_order_with_equal_stock(self):
|
|
'''
|
|
test OrdersViewSet método create cuando order.quantity == item.stock
|
|
'''
|
|
for i in self.items:
|
|
stock = i.stock
|
|
data = {"item": str(i.id), "quantity": str(stock)}
|
|
response = self.client.post(f'/order/',data)
|
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
|
|
def test_get_all_orders(self):
|
|
'''
|
|
test OrdersViewSet método list
|
|
'''
|
|
self.assertEqual(Order.objects.count(), 2)
|
|
response = self.client.get('/order/')
|
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
|
|
def test_get_one_order(self):
|
|
'''
|
|
test OrdersViewSet método retrieve
|
|
'''
|
|
orders = Order.objects.filter(user = self.user)
|
|
for o in orders:
|
|
response = self.client.get(f'/order/{o.id}/')
|
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|