129 lines
4.9 KiB
Python
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()
|