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'
|
'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
|
## Tests
|
||||||
|
|
||||||
Creación de pruebas en [./backend/core/tests.py](./backend/core/tests.py).
|
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
|
#### Test suite para Contact
|
||||||
|
|
||||||
0. test setup
|
0. test setup
|
||||||
1. test para método create
|
1. test ContactViewSet para método create
|
||||||
2. test para método create cuando nombre no está en los datos
|
2. test ContactViewSet para método create cuando nombre no está en los datos
|
||||||
3. test para método create cuando nombre está en blanco
|
3. test ContactViewSet para método create cuando nombre está en blanco
|
||||||
4. test para método create cuando mensaje no está en los datos
|
4. test ContactViewSet para método create cuando mensaje no está en los datos
|
||||||
5. test para método create cuando mensaje está en blanco
|
5. test ContactViewSet para método create cuando mensaje está en blanco
|
||||||
6. test para método create cuando email no está en los datos
|
6. test ContactViewSet para método create cuando email no está en los datos
|
||||||
7. test para método create cuando email está en blanco
|
7. test ContactViewSet para método create cuando email está en blanco
|
||||||
8. test para método create cuando email no es un email
|
8. test ContactViewSet para método create cuando email no es un email
|
||||||
|
|
||||||
Correr test `./manage.py test`
|
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):
|
class ContactTestCase(APITestCase):
|
||||||
"""
|
"""
|
||||||
Test suite for Contact
|
Test suite para Contact
|
||||||
"""
|
"""
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.client = APIClient()
|
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