creación de unit tests para ecommerce app (10)
This commit is contained in:
parent
0cfc0e5991
commit
74220d57c8
125
README.md
125
README.md
@ -285,39 +285,6 @@ Se puede utilizar la shell de Django para chequear la nueva entrada en Contacto
|
||||
'DevFzn'
|
||||
```
|
||||
|
||||
#### Jerarquia de directorios
|
||||
|
||||
```txt
|
||||
📂️ .
|
||||
├── 📂️ backend
|
||||
│ ├── 📂️ core
|
||||
│ │ ├── 📂️ migrations
|
||||
│ │ │ ├── 0001_initial.py
|
||||
│ │ │ └── __init__.py
|
||||
│ │ ├── __init__.py
|
||||
│ │ ├── admin.py
|
||||
│ │ ├── apps.py
|
||||
│ │ ├── models.py
|
||||
│ │ ├── serializers.py
|
||||
│ │ ├── tests.py
|
||||
│ │ └── views.py
|
||||
│ ├── 📂️ drf_course
|
||||
│ │ ├── __init__.py
|
||||
│ │ ├── asgi.py
|
||||
│ │ ├── settings.py
|
||||
│ │ ├── urls.py
|
||||
│ │ └── wsgi.py
|
||||
│ ├── 📂️ utils
|
||||
│ │ ├── __init__.py
|
||||
│ │ └── model_abstracts.py
|
||||
│ ├── .env
|
||||
│ └── manage.py
|
||||
├── .gitignore
|
||||
├── env.template
|
||||
├── README.md
|
||||
└── requirements.txt
|
||||
```
|
||||
|
||||
## Tests
|
||||
|
||||
Creación de pruebas en [./backend/core/tests.py](./backend/core/tests.py).
|
||||
@ -327,14 +294,14 @@ Utilizando las clases `APIClient` que proporciona un cliente incorporado y
|
||||
#### Test suite para Contact
|
||||
|
||||
0. test setup
|
||||
1. test para método create
|
||||
2. test para método create cuando nombre no está en los datos
|
||||
3. test para método create cuando nombre está en blanco
|
||||
4. test para método create cuando mensaje no está en los datos
|
||||
5. test para método create cuando mensaje está en blanco
|
||||
6. test para método create cuando email no está en los datos
|
||||
7. test para método create cuando email está en blanco
|
||||
8. test para método create cuando email no es un email
|
||||
1. test ContactViewSet para método create
|
||||
2. test ContactViewSet para método create cuando nombre no está en los datos
|
||||
3. test ContactViewSet para método create cuando nombre está en blanco
|
||||
4. test ContactViewSet para método create cuando mensaje no está en los datos
|
||||
5. test ContactViewSet para método create cuando mensaje está en blanco
|
||||
6. test ContactViewSet para método create cuando email no está en los datos
|
||||
7. test ContactViewSet para método create cuando email está en blanco
|
||||
8. test ContactViewSet para método create cuando email no es un email
|
||||
|
||||
Correr test `./manage.py test`
|
||||
|
||||
@ -537,3 +504,79 @@ router.register(r'order', ecommerce_views.OrderViewSet, basename='order')
|
||||
...
|
||||
```
|
||||
|
||||
### Ecommerce Tests
|
||||
|
||||
Creación de [test](./backend/ecommerce/tests.py) unitarios para la aplicación.
|
||||
|
||||
0. test setup
|
||||
1. test ItemsViewSet método list
|
||||
2. test ItemsViewSet método retrieve
|
||||
3. test Item.check_stock cuando order.quantity > item.stock
|
||||
4. test Item.check_stock cuando order.quantity == item.stock
|
||||
5. test Item.check_stock cuando order.quantity < item.stock
|
||||
6. test OrdersViewSet método create cuando order.quantity > item.stock
|
||||
7. test OrdersViewSet método create cuando order.quantity < item.stock
|
||||
8. test OrdersViewSet método create cuando order.quantity == item.stock
|
||||
9. test OrdersViewSet método list
|
||||
10. test OrdersViewSet método retrieve
|
||||
|
||||
Correr tests `./manage.py test`.
|
||||
|
||||
```py
|
||||
Found 18 test(s).
|
||||
Creating test database for alias 'default'...
|
||||
System check identified no issues (0 silenced).
|
||||
..................
|
||||
----------------------------------------------------------------------
|
||||
Ran 18 tests in 2.248s
|
||||
|
||||
OK
|
||||
Destroying test database for alias 'default'...
|
||||
```
|
||||
|
||||
----
|
||||
|
||||
### Jerarquia de directorios
|
||||
|
||||
```txt
|
||||
📂️ .
|
||||
├── 📂️ backend
|
||||
│ ├── 📂️ core
|
||||
│ │ ├── 📂️ migrations
|
||||
│ │ │ ├── 0001_initial.py
|
||||
│ │ │ └── __init__.py
|
||||
│ │ ├── __init__.py
|
||||
│ │ ├── admin.py
|
||||
│ │ ├── apps.py
|
||||
│ │ ├── models.py
|
||||
│ │ ├── serializers.py
|
||||
│ │ ├── tests.py
|
||||
│ │ └── views.py
|
||||
│ ├── 📂️ drf_course
|
||||
│ │ ├── __init__.py
|
||||
│ │ ├── asgi.py
|
||||
│ │ ├── settings.py
|
||||
│ │ ├── urls.py
|
||||
│ │ └── wsgi.py
|
||||
│ ├── 📂️ ecommerce
|
||||
│ │ ├── 📂️ migrations
|
||||
│ │ │ ├── 0001_initial.py
|
||||
│ │ │ └── __init__.py
|
||||
│ │ ├── __init__.py
|
||||
│ │ ├── admin.py
|
||||
│ │ ├── apps.py
|
||||
│ │ ├── models.py
|
||||
│ │ ├── serializers.py
|
||||
│ │ ├── signals.py
|
||||
│ │ ├── tests.py
|
||||
│ │ └── views.py
|
||||
│ ├── 📂️ utils
|
||||
│ │ ├── __init__.py
|
||||
│ │ └── model_abstracts.py
|
||||
│ ├── .env
|
||||
│ └── manage.py
|
||||
├── .gitignore
|
||||
├── env.template
|
||||
├── README.md
|
||||
└── requirements.txt
|
||||
```
|
||||
|
@ -5,7 +5,7 @@ from rest_framework import status
|
||||
|
||||
class ContactTestCase(APITestCase):
|
||||
"""
|
||||
Test suite for Contact
|
||||
Test suite para Contact
|
||||
"""
|
||||
def setUp(self):
|
||||
self.client = APIClient()
|
||||
|
@ -1,3 +1,121 @@
|
||||
from django.test import TestCase
|
||||
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
|
||||
|
||||
# Create your tests here.
|
||||
|
||||
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)
|
||||
|
Loading…
Reference in New Issue
Block a user