Tesis 1.0.0
Loading...
Searching...
No Matches
test_cart_views.py
Go to the documentation of this file.
1from django.test import TestCase
2from django.urls import reverse
3from rest_framework.test import APIClient
4from rest_framework import status
5from appUSERS.models import Usuario
6from appCART.models import Pedido, Carrito, DetallePedido
7from appFOOD.models import Producto, CategoriaProducto
8from datetime import date
9import json
10
11class CartViewTests(TestCase):
12 """
13 Pruebas unitarias para las vistas de carrito
14 """
15
16 def setUp(self):
17 # Crear cliente API
18 self.client = APIClient()
19
20 # Crear usuario para autenticación
21 self.usuario = Usuario.objects.create_user(
22 email='cliente@example.com',
23 password='password123',
24 nombre='Cliente',
25 apellido='Test',
26 telefono='1234567890',
27 direccion='Calle Falsa 123'
28 )
29
30 # Autenticar usuario
31 self.client.force_authenticate(user=self.usuario)
32
33 # Crear categoría
34 self.categoria = CategoriaProducto.objects.create(
35 nombre_categoria='Hamburguesas',
36 descripcion='Hamburguesas clásicas'
37 )
38
39 # Crear producto
40 self.producto = Producto.objects.create(
41 nombre_producto='Hamburguesa clásica',
42 descripcion='Hamburguesa con queso, lechuga y tomate',
43 precio=500.0,
44 stock=10,
45 imageURL='hamburguesa.jpg',
46 id_categoria=self.categoria
47 )
48
49 # Crear pedido
50 self.pedido = Pedido.objects.create(
51 id_usuario=self.usuario,
52 fecha_pedido=date.today(),
53 direccion_entrega=self.usuario.direccion,
54 estado='Pendiente'
55 )
56
57 # URLs para las vistas
58 self.add_to_cart_url = reverse('appCART:agregar-producto', args=[self.producto.id_producto])
59 self.view_cart_url = reverse('appCART:ver-carrito')
60 self.confirm_order_url = reverse('appCART:confirmar-pedido')
61
63 """Prueba que se puede agregar un producto al carrito"""
64 data = {
65 'cantidad': 2,
66 'direccion': 'Calle Falsa 123'
67 }
68
69 response = self.client.post(self.add_to_cart_url, data)
70 self.assertEqual(response.status_code, status.HTTP_200_OK)
71 self.assertIn('message', response.data)
72 self.assertEqual(response.data['message'], 'Producto agregado al carrito')
73
74 # Verificar que se creó el detalle de pedido y carrito
75 self.assertTrue(DetallePedido.objects.filter(id_pedido=self.pedido, id_producto=self.producto).exists())
76 self.assertTrue(Carrito.objects.filter(producto=self.producto, usuario=self.usuario).exists())
77
79 """Prueba que se puede ver el carrito del usuario"""
80 # Crear un ítem en el carrito primero
81 Carrito.objects.create(
82 producto=self.producto,
83 cantidad=2,
84 usuario=self.usuario,
85 comprado=False,
86 id_pedido=self.pedido
87 )
88
89 response = self.client.get(self.view_cart_url)
90 self.assertEqual(response.status_code, status.HTTP_200_OK)
91 self.assertTrue(isinstance(response.data, list))
92 self.assertEqual(len(response.data), 1)
93 self.assertEqual(response.data[0]['producto'], 'Hamburguesa clásica')
94 self.assertEqual(response.data[0]['cantidad'], 2)
95
97 """Prueba que no se puede confirmar un pedido vacío"""
98 # Asegurarse que el carrito está vacío
99 Carrito.objects.filter(usuario=self.usuario).delete()
100
101 response = self.client.post(self.confirm_order_url)
102 self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
103 self.assertIn('error', response.data)