Files
shoppy/web/tests/test_orders.py
T
2025-01-16 23:32:03 +01:00

129 lines
4.9 KiB
Python

from decimal import Decimal
from django.contrib.auth.models import User
from django.test import TestCase
from django.urls import reverse
from shop.models import (
Cart,
CartItem,
CustomerAddress,
Order,
ShippingMethod,
ShopSettings,
)
from shop.tests.mixins import CreateProductsMixin
class TestOrders(TestCase, CreateProductsMixin):
def setUp(self):
self.product = self.create_product()
self.user = User.objects.create_user(
"anakin", "anakin@skywalker.com", "ihatesand"
)
self.cart_for_user = self.create_cart(user=self.user)
self.anonymous_cart = self.create_cart()
self.address = CustomerAddress.objects.create(
vat_id="11111111H",
full_name="Vader",
address="Tatooine",
address_town="Mos Eisley",
address_zip="00001",
address_state="Tatooine",
address_country="Mos Eisley",
address_phone="00000000",
address_type=CustomerAddress.Types.BILLING,
email=self.user.email,
default=True,
)
self.shipping_method = self.create_shipping_method()
self.settings = ShopSettings.load()
self.settings.shared_secret = "sq7HjrUOBfKmC576ILgskD5srU870gJ7" # Debug secret
self.settings.save()
def create_cart(self, user=None):
cart = Cart.objects.create(
user=user,
)
CartItem.objects.create(
cart=cart,
product=self.product,
quantity=1,
)
return cart
def create_shipping_method(self):
product = self.create_product(sku="SM1", name="SM1", price=Decimal("1.00"))
method = ShippingMethod.objects.create(name="SM 1", shipping_product=product)
return method
def test_logged_user_orders_page(self):
self.client.force_login(self.user)
response = self.client.get(reverse("web:orders"))
assert response.status_code == 200
def test_logged_user_create_get_order_page(self):
self.client.force_login(self.user)
response = self.client.get(reverse("web:cart_detail"))
assert response.status_code == 200
# Crear pedido
data = {
"email": self.user.email,
"shipping_address_full_name": self.address.full_name,
"shipping_address": self.address.address,
"shipping_address_town": self.address.address_town,
"shipping_address_zip": self.address.address_zip,
"shipping_address_state": self.address.address_state,
"shipping_address_country": self.address.address_country,
"shipping_address_phone": self.address.address_phone,
"same_as_shipping": True,
"billing_address_full_name": self.address.full_name,
"billing_address": self.address.address,
"billing_address_town": self.address.address_town,
"billing_address_zip": self.address.address_zip,
"billing_address_state": self.address.address_state,
"billing_address_country": self.address.address_country,
"billing_address_phone": self.address.address_phone,
"shipping_method": self.shipping_method.pk,
}
response = self.client.post(reverse("web:cart_detail"), data)
assert response.status_code == 302
order = Order.objects.filter(user=self.user).first()
assert order is not None
response = self.client.get(response.url)
assert response.status_code == 200
def test_logged_user_create_get_order_page_invalid_data(self):
self.client.force_login(self.user)
response = self.client.get(reverse("web:cart_detail"))
assert response.status_code == 200
# Sin e-mail
data = {
"shipping_address_full_name": self.address.full_name,
"shipping_address": self.address.address,
"shipping_address_town": self.address.address_town,
"shipping_address_zip": self.address.address_zip,
"shipping_address_state": self.address.address_state,
"shipping_address_country": self.address.address_country,
"shipping_address_phone": self.address.address_phone,
"same_as_shipping": True,
"billing_address_full_name": self.address.full_name,
"billing_address": self.address.address,
"billing_address_town": self.address.address_town,
"billing_address_zip": self.address.address_zip,
"billing_address_state": self.address.address_state,
"billing_address_country": self.address.address_country,
"billing_address_phone": self.address.address_phone,
"shipping_method": self.shipping_method.pk,
}
response = self.client.post(reverse("web:cart_detail"), data)
assert response.status_code == 200
assert not Order.objects.filter(user=self.user).exists()