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()