82 lines
2.5 KiB
Python
82 lines
2.5 KiB
Python
from decimal import Decimal
|
|
from rest_framework.test import APITestCase as TestCase
|
|
from shop.models import Product, ProductPrice, Tax, Customer
|
|
from shop.utils import create_order_line_for_product, create_order
|
|
|
|
|
|
class ShopModelsTest(TestCase):
|
|
def setUp(self) -> None:
|
|
self.tax = Tax.objects.create(
|
|
code="IVA",
|
|
value=21,
|
|
)
|
|
self.create_products()
|
|
|
|
def create_products(self):
|
|
self.potatoes = Product.objects.create(
|
|
name="Patatas",
|
|
stock=Decimal("100.00"),
|
|
unit=Product.UnitChoices.WEIGHT_KG,
|
|
)
|
|
self.gasoline = Product.objects.create(
|
|
name="Gasolina",
|
|
stock=Decimal("800.00"),
|
|
unit=Product.UnitChoices.VOLUME_LITER,
|
|
)
|
|
self.usb_c = Product.objects.create(
|
|
name="Cable USB-C",
|
|
stock=Decimal("5.00"),
|
|
unit=Product.UnitChoices.UNIT,
|
|
)
|
|
|
|
ProductPrice.objects.create(
|
|
product=self.potatoes, price=Decimal("0.80"), tax=self.tax
|
|
)
|
|
ProductPrice.objects.create(
|
|
product=self.gasoline, price=Decimal("1.15"), tax=self.tax
|
|
)
|
|
ProductPrice.objects.create(
|
|
product=self.usb_c, price=Decimal("9.95"), tax=self.tax
|
|
)
|
|
|
|
def test_create_order(self):
|
|
self.customer = Customer.objects.create(
|
|
first_name="Luke",
|
|
last_name="Skywalker",
|
|
vat_id="11111111H",
|
|
address="Farm Skywalker",
|
|
city="Desert",
|
|
state="Mos-Eisley",
|
|
zip="00001",
|
|
country="Tatooine",
|
|
)
|
|
|
|
order = create_order(
|
|
customer=self.customer,
|
|
billing_address=self.customer.address,
|
|
billing_city=self.customer.city,
|
|
billing_state=self.customer.state,
|
|
billing_zip=self.customer.zip,
|
|
billing_country=self.customer.country,
|
|
)
|
|
|
|
l1 = create_order_line_for_product(
|
|
self.potatoes,
|
|
quantity=Decimal("1.5"),
|
|
order=order,
|
|
)
|
|
l2 = create_order_line_for_product(
|
|
self.gasoline,
|
|
quantity=Decimal("40"),
|
|
order=order,
|
|
)
|
|
l3 = create_order_line_for_product(
|
|
self.usb_c,
|
|
quantity=Decimal("1.00"),
|
|
order=order,
|
|
)
|
|
order.calculate_total_from_lines()
|
|
|
|
assert order.total == l1.total + l2.total + l3.total
|
|
assert order.base_total == l1.base_total + l2.base_total + l3.base_total
|